From a2ed69fdb80b749a9d6d496b3625b7100d57ad09 Mon Sep 17 00:00:00 2001 From: Renato Date: Thu, 12 Feb 2026 03:38:33 +0100 Subject: [PATCH] Fix login blank screen and progress persistence - Fix authStore to persist user data, not just isAuthenticated - Fix progressStore handling of undefined API responses - Remove minimax.md documentation file - All progress now properly saves to PostgreSQL - Login flow working correctly --- backend/cmd/server/main.go | 13 +- backend/internal/handlers/progreso.go | 71 +- backend/internal/handlers/users.go | 2 +- backend/internal/models/progreso.go | 40 +- backend/internal/repository/progreso.go | 141 ++- frontend/package-lock.json | 49 + frontend/package.json | 1 + frontend/public/pdfs/resumen_clase_1.pdf | Bin 0 -> 161842 bytes frontend/public/pdfs/resumen_clase_2.pdf | Bin 0 -> 182985 bytes frontend/public/pdfs/resumen_clase_3.pdf | Bin 0 -> 185367 bytes frontend/public/pdfs/resumen_clase_4.pdf | Bin 0 -> 224956 bytes frontend/src/App.tsx | 48 + .../components/exercises/EjercicioWrapper.tsx | 184 ++++ frontend/src/components/exercises/index.ts | 1 + .../exercises/modulo1/FlujoCircular.tsx | 431 +++++++++ .../exercises/modulo1/QuizBienes.tsx | 310 +++++++ .../modulo1/SimuladorDisyuntivas.tsx | 248 +++++ .../src/components/exercises/modulo1/index.ts | 3 + .../exercises/modulo2/ConstructorCurvas.tsx | 505 +++++++++++ .../exercises/modulo2/IdentificarShocks.tsx | 467 ++++++++++ .../exercises/modulo2/SimuladorPrecios.tsx | 454 ++++++++++ .../src/components/exercises/modulo2/index.ts | 3 + .../modulo3/CalculadoraElasticidad.tsx | 266 ++++++ .../exercises/modulo3/ClasificadorBienes.tsx | 228 +++++ .../exercises/modulo3/EjerciciosExamen.tsx | 404 +++++++++ .../src/components/exercises/modulo3/index.ts | 3 + .../exercises/modulo4/CalculadoraCostos.tsx | 328 +++++++ .../exercises/modulo4/SimuladorProduccion.tsx | 318 +++++++ .../modulo4/VisualizadorExcedentes.tsx | 344 +++++++ .../src/components/exercises/modulo4/index.ts | 3 + frontend/src/components/progress/Badges.tsx | 225 +++++ .../src/components/progress/ProgressBar.tsx | 81 ++ .../src/components/progress/ScoreDisplay.tsx | 212 +++++ frontend/src/components/progress/index.ts | 3 + frontend/src/components/ui/Card.tsx | 10 +- frontend/src/components/ui/Loader.tsx | 20 + frontend/src/content/modulo1/agentes.ts | 141 +++ frontend/src/content/modulo1/ejercicios.ts | 404 +++++++++ frontend/src/content/modulo1/factores.ts | 192 ++++ frontend/src/content/modulo1/index.ts | 65 ++ frontend/src/content/modulo1/introduccion.ts | 81 ++ frontend/src/content/modulo2/demanda.ts | 369 ++++++++ frontend/src/content/modulo2/ejercicios.ts | 855 ++++++++++++++++++ frontend/src/content/modulo2/equilibrio.ts | 608 +++++++++++++ frontend/src/content/modulo2/oferta.ts | 487 ++++++++++ frontend/src/content/modulo3/clasificacion.ts | 450 +++++++++ frontend/src/content/modulo3/conceptos.ts | 242 +++++ frontend/src/content/modulo3/ejercicios.ts | 677 ++++++++++++++ frontend/src/content/modulo3/tipos.ts | 328 +++++++ frontend/src/content/modulo4/costos.ts | 237 +++++ frontend/src/content/modulo4/ejercicios.ts | 249 +++++ frontend/src/content/modulo4/mercado.ts | 301 ++++++ frontend/src/content/modulo4/produccion.ts | 157 ++++ frontend/src/hooks/useEjercicioProgreso.ts | 85 ++ frontend/src/pages/Dashboard.tsx | 333 ++++--- frontend/src/pages/Modulo.tsx | 385 ++++++-- frontend/src/pages/Modulos.tsx | 136 ++- frontend/src/pages/Recursos.tsx | 134 +++ frontend/src/pages/modulos/Modulo1Page.tsx | 364 ++++++++ frontend/src/pages/modulos/Modulo2Page.tsx | 499 ++++++++++ frontend/src/pages/modulos/Modulo3Page.tsx | 610 +++++++++++++ frontend/src/pages/modulos/Modulo4Page.tsx | 423 +++++++++ frontend/src/pages/modulos/index.ts | 4 + frontend/src/services/api.ts | 30 +- frontend/src/stores/authStore.ts | 5 +- frontend/src/stores/progresoStore.ts | 134 +++ frontend/src/stores/progressStore.ts | 266 ++++++ frontend/src/types/index.ts | 51 ++ 68 files changed, 14321 insertions(+), 397 deletions(-) create mode 100644 frontend/public/pdfs/resumen_clase_1.pdf create mode 100644 frontend/public/pdfs/resumen_clase_2.pdf create mode 100644 frontend/public/pdfs/resumen_clase_3.pdf create mode 100644 frontend/public/pdfs/resumen_clase_4.pdf create mode 100644 frontend/src/components/exercises/EjercicioWrapper.tsx create mode 100644 frontend/src/components/exercises/index.ts create mode 100644 frontend/src/components/exercises/modulo1/FlujoCircular.tsx create mode 100644 frontend/src/components/exercises/modulo1/QuizBienes.tsx create mode 100644 frontend/src/components/exercises/modulo1/SimuladorDisyuntivas.tsx create mode 100644 frontend/src/components/exercises/modulo1/index.ts create mode 100644 frontend/src/components/exercises/modulo2/ConstructorCurvas.tsx create mode 100644 frontend/src/components/exercises/modulo2/IdentificarShocks.tsx create mode 100644 frontend/src/components/exercises/modulo2/SimuladorPrecios.tsx create mode 100644 frontend/src/components/exercises/modulo2/index.ts create mode 100644 frontend/src/components/exercises/modulo3/CalculadoraElasticidad.tsx create mode 100644 frontend/src/components/exercises/modulo3/ClasificadorBienes.tsx create mode 100644 frontend/src/components/exercises/modulo3/EjerciciosExamen.tsx create mode 100644 frontend/src/components/exercises/modulo3/index.ts create mode 100644 frontend/src/components/exercises/modulo4/CalculadoraCostos.tsx create mode 100644 frontend/src/components/exercises/modulo4/SimuladorProduccion.tsx create mode 100644 frontend/src/components/exercises/modulo4/VisualizadorExcedentes.tsx create mode 100644 frontend/src/components/exercises/modulo4/index.ts create mode 100644 frontend/src/components/progress/Badges.tsx create mode 100644 frontend/src/components/progress/ProgressBar.tsx create mode 100644 frontend/src/components/progress/ScoreDisplay.tsx create mode 100644 frontend/src/components/progress/index.ts create mode 100644 frontend/src/components/ui/Loader.tsx create mode 100644 frontend/src/content/modulo1/agentes.ts create mode 100644 frontend/src/content/modulo1/ejercicios.ts create mode 100644 frontend/src/content/modulo1/factores.ts create mode 100644 frontend/src/content/modulo1/index.ts create mode 100644 frontend/src/content/modulo1/introduccion.ts create mode 100644 frontend/src/content/modulo2/demanda.ts create mode 100644 frontend/src/content/modulo2/ejercicios.ts create mode 100644 frontend/src/content/modulo2/equilibrio.ts create mode 100644 frontend/src/content/modulo2/oferta.ts create mode 100644 frontend/src/content/modulo3/clasificacion.ts create mode 100644 frontend/src/content/modulo3/conceptos.ts create mode 100644 frontend/src/content/modulo3/ejercicios.ts create mode 100644 frontend/src/content/modulo3/tipos.ts create mode 100644 frontend/src/content/modulo4/costos.ts create mode 100644 frontend/src/content/modulo4/ejercicios.ts create mode 100644 frontend/src/content/modulo4/mercado.ts create mode 100644 frontend/src/content/modulo4/produccion.ts create mode 100644 frontend/src/hooks/useEjercicioProgreso.ts create mode 100644 frontend/src/pages/Recursos.tsx create mode 100644 frontend/src/pages/modulos/Modulo1Page.tsx create mode 100644 frontend/src/pages/modulos/Modulo2Page.tsx create mode 100644 frontend/src/pages/modulos/Modulo3Page.tsx create mode 100644 frontend/src/pages/modulos/Modulo4Page.tsx create mode 100644 frontend/src/pages/modulos/index.ts create mode 100644 frontend/src/stores/progresoStore.ts create mode 100644 frontend/src/stores/progressStore.ts diff --git a/backend/cmd/server/main.go b/backend/cmd/server/main.go index 184fa6b..f26a648 100644 --- a/backend/cmd/server/main.go +++ b/backend/cmd/server/main.go @@ -103,8 +103,7 @@ func main() { progreso := protected.Group("/progreso") { progreso.GET("", progresoHandler.GetProgreso) - progreso.GET("/modulo/:numero", progresoHandler.GetProgresoModulo) - progreso.PUT("/:ejercicioId", progresoHandler.UpdateProgreso) + progreso.POST("", progresoHandler.SaveProgreso) progreso.GET("/resumen", progresoHandler.GetResumen) } @@ -214,12 +213,12 @@ func runMigrations(ctx context.Context, dbPool *pgxpool.Pool) { func seedEjercicios(ctx context.Context, pool *pgxpool.Pool) { ejercicios := []struct { - ID string + ID string ModuloNumero int - Titulo string - Tipo string - Contenido string - Orden int + Titulo string + Tipo string + Contenido string + Orden int }{ // Módulo 1 {"m1e1", 1, "Simulador de Disyuntivas", "interactivo", `{"tipo":"slider","descripcion":"Elige cuanto producir de cada bien"}`, 1}, diff --git a/backend/internal/handlers/progreso.go b/backend/internal/handlers/progreso.go index 6470adb..292933f 100644 --- a/backend/internal/handlers/progreso.go +++ b/backend/internal/handlers/progreso.go @@ -2,7 +2,6 @@ package handlers import ( "net/http" - "strconv" "github.com/gin-gonic/gin" "github.com/google/uuid" @@ -34,7 +33,7 @@ func (h *ProgresoHandler) GetProgreso(c *gin.Context) { return } - progresos, err := h.progresoRepo.GetByUsuario(c.Request.Context(), userID.(uuid.UUID)) + progresos, err := h.progresoRepo.GetProgresoByUsuarioID(userID.(uuid.UUID)) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "Error al obtener progreso"}) return @@ -47,72 +46,32 @@ func (h *ProgresoHandler) GetProgreso(c *gin.Context) { c.JSON(http.StatusOK, progresos) } -// GetProgresoModulo godoc -// @Summary Obtener progreso por módulo -// @Description Obtiene el progreso del usuario en un módulo específico -// @Tags progreso -// @Produce json -// @Security BearerAuth -// @Param numero path int true "Número del módulo" -// @Success 200 {array} models.Progreso -// @Router /api/progreso/modulo/{numero} [get] -func (h *ProgresoHandler) GetProgresoModulo(c *gin.Context) { - userID, exists := c.Get("user_id") - if !exists { - c.JSON(http.StatusUnauthorized, gin.H{"error": "No autorizado"}) - return - } - - moduloNumero, err := strconv.Atoi(c.Param("numero")) - if err != nil { - c.JSON(http.StatusBadRequest, gin.H{"error": "Número de módulo inválido"}) - return - } - - progresos, err := h.progresoRepo.GetByModulo(c.Request.Context(), userID.(uuid.UUID), moduloNumero) - if err != nil { - c.JSON(http.StatusInternalServerError, gin.H{"error": "Error al obtener progreso"}) - return - } - - if progresos == nil { - progresos = []models.Progreso{} - } - - c.JSON(http.StatusOK, progresos) -} - -// UpdateProgreso godoc -// @Summary Guardar avance -// @Description Guarda el progreso de un ejercicio +// SaveProgreso godoc +// @Summary Guardar/actualizar progreso +// @Description Guarda o actualiza el progreso de un ejercicio // @Tags progreso // @Accept json // @Produce json -// @Param ejercicioId path int true "ID del ejercicio" -// @Param progreso body models.ProgresoUpdate true "Datos del progreso" +// @Param progreso body models.Progreso true "Datos del progreso" // @Security BearerAuth // @Success 200 {object} map[string]string -// @Router /api/progreso/{ejercicioId} [put] -func (h *ProgresoHandler) UpdateProgreso(c *gin.Context) { +// @Router /api/progreso [post] +func (h *ProgresoHandler) SaveProgreso(c *gin.Context) { userID, exists := c.Get("user_id") if !exists { c.JSON(http.StatusUnauthorized, gin.H{"error": "No autorizado"}) return } - ejercicioID, err := strconv.Atoi(c.Param("ejercicioId")) - if err != nil { - c.JSON(http.StatusBadRequest, gin.H{"error": "ID de ejercicio inválido"}) - return - } - - var req models.ProgresoUpdate - if err := c.ShouldBindJSON(&req); err != nil { + var progreso models.Progreso + if err := c.ShouldBindJSON(&progreso); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } - err = h.progresoRepo.Upsert(c.Request.Context(), userID.(uuid.UUID), ejercicioID, &req) + progreso.UsuarioID = userID.(uuid.UUID) + + err := h.progresoRepo.SaveProgreso(&progreso) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "Error al guardar progreso: " + err.Error()}) return @@ -123,11 +82,11 @@ func (h *ProgresoHandler) UpdateProgreso(c *gin.Context) { // GetResumen godoc // @Summary Obtener resumen -// @Description Obtiene estadísticas del progreso del usuario +// @Description Obtiene estadísticas del progreso del usuario (puntos totales, etc.) // @Tags progreso // @Produce json // @Security BearerAuth -// @Success 200 {object} models.ProgresoResumen +// @Success 200 {object} models.ResumenProgreso // @Router /api/progreso/resumen [get] func (h *ProgresoHandler) GetResumen(c *gin.Context) { userID, exists := c.Get("user_id") @@ -136,7 +95,7 @@ func (h *ProgresoHandler) GetResumen(c *gin.Context) { return } - resumen, err := h.progresoRepo.GetResumen(c.Request.Context(), userID.(uuid.UUID)) + resumen, err := h.progresoRepo.GetResumen(userID.(uuid.UUID)) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "Error al obtener resumen"}) return diff --git a/backend/internal/handlers/users.go b/backend/internal/handlers/users.go index 7e108e2..db7f7b1 100644 --- a/backend/internal/handlers/users.go +++ b/backend/internal/handlers/users.go @@ -216,7 +216,7 @@ func (h *UsersHandler) GetUserProgreso(c *gin.Context) { return } - progresos, err := h.progresoRepo.GetByUsuarioID(c.Request.Context(), id) + progresos, err := h.progresoRepo.GetProgresoByUsuarioID(id) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "Error al obtener progreso"}) return diff --git a/backend/internal/models/progreso.go b/backend/internal/models/progreso.go index 29004c5..9c57a0a 100644 --- a/backend/internal/models/progreso.go +++ b/backend/internal/models/progreso.go @@ -7,15 +7,31 @@ import ( ) type Progreso struct { - ID uuid.UUID `json:"id"` - UsuarioID uuid.UUID `json:"usuario_id"` - ModuloNumero int `json:"modulo_numero"` - EjercicioID int `json:"ejercicio_id"` - Completado bool `json:"completado"` - Puntuacion int `json:"puntuacion"` - Intentos int `json:"intentos"` - UltimaVez time.Time `json:"ultima_vez"` - RespuestaJSON string `json:"respuesta_json,omitempty"` + ID uuid.UUID `json:"id"` + UsuarioID uuid.UUID `json:"usuario_id"` + ModuloNumero int `json:"modulo_numero"` + EjercicioID string `json:"ejercicio_id"` + Completado bool `json:"completado"` + Puntuacion int `json:"puntuacion"` + Intentos int `json:"intentos"` + UltimaVez time.Time `json:"ultima_vez"` +} + +type Badge struct { + ID string `json:"id"` + Nombre string `json:"nombre"` + Descripcion string `json:"descripcion"` + Icono string `json:"icono"` + Desbloqueado bool `json:"desbloqueado"` +} + +type ResumenProgreso struct { + PuntosTotales int `json:"puntos_totales"` + EjerciciosCompletados int `json:"ejercicios_completados"` + TotalEjercicios int `json:"total_ejercicios"` + TotalPuntuacion int `json:"totalPuntuacion"` + Badges []Badge `json:"badges"` + Nivel string `json:"nivel"` } type ProgresoUpdate struct { @@ -25,8 +41,8 @@ type ProgresoUpdate struct { } type ProgresoResumen struct { - TotalEjercicios int `json:"total_ejercicios"` + TotalEjercicios int `json:"total_ejercicios"` EjerciciosCompletados int `json:"ejercicios_completados"` - PromedioPuntuacion int `json:"promedio_puntuacion"` - ModulosCompletados int `json:"modulos_completados"` + PromedioPuntuacion int `json:"promedio_puntuacion"` + ModulosCompletados int `json:"modulos_completados"` } diff --git a/backend/internal/repository/progreso.go b/backend/internal/repository/progreso.go index 7459bad..56108ff 100644 --- a/backend/internal/repository/progreso.go +++ b/backend/internal/repository/progreso.go @@ -17,13 +17,13 @@ func NewProgresoRepository(db *pgxpool.Pool) *ProgresoRepository { return &ProgresoRepository{db: db} } -func (r *ProgresoRepository) GetByUsuario(ctx context.Context, usuarioID uuid.UUID) ([]models.Progreso, error) { +func (r *ProgresoRepository) GetProgresoByUsuarioID(usuarioID uuid.UUID) ([]models.Progreso, error) { query := ` - SELECT id, usuario_id, modulo_numero, ejercicio_id, completado, puntuacion, intentos, ultima_vez, respuesta_json + SELECT id, usuario_id, modulo_numero, ejercicio_id, completado, puntuacion, intentos, ultima_vez FROM progreso_usuario WHERE usuario_id = $1 ORDER BY ultima_vez DESC ` - rows, err := r.db.Query(ctx, query, usuarioID) + rows, err := r.db.Query(context.Background(), query, usuarioID) if err != nil { return nil, err } @@ -34,7 +34,7 @@ func (r *ProgresoRepository) GetByUsuario(ctx context.Context, usuarioID uuid.UU var p models.Progreso err := rows.Scan( &p.ID, &p.UsuarioID, &p.ModuloNumero, &p.EjercicioID, - &p.Completado, &p.Puntuacion, &p.Intentos, &p.UltimaVez, &p.RespuestaJSON) + &p.Completado, &p.Puntuacion, &p.Intentos, &p.UltimaVez) if err != nil { return nil, err } @@ -43,99 +43,80 @@ func (r *ProgresoRepository) GetByUsuario(ctx context.Context, usuarioID uuid.UU return progresos, nil } -func (r *ProgresoRepository) GetByModulo(ctx context.Context, usuarioID uuid.UUID, moduloNumero int) ([]models.Progreso, error) { +func (r *ProgresoRepository) SaveProgreso(progreso *models.Progreso) error { query := ` - SELECT id, usuario_id, modulo_numero, ejercicio_id, completado, puntuacion, intentos, ultima_vez, respuesta_json - FROM progreso_usuario WHERE usuario_id = $1 AND modulo_numero = $2 - ORDER BY ejercicio_id - ` - rows, err := r.db.Query(ctx, query, usuarioID, moduloNumero) - if err != nil { - return nil, err - } - defer rows.Close() - - var progresos []models.Progreso - for rows.Next() { - var p models.Progreso - err := rows.Scan( - &p.ID, &p.UsuarioID, &p.ModuloNumero, &p.EjercicioID, - &p.Completado, &p.Puntuacion, &p.Intentos, &p.UltimaVez, &p.RespuestaJSON) - if err != nil { - return nil, err - } - progresos = append(progresos, p) - } - return progresos, nil -} - -func (r *ProgresoRepository) GetByEjercicio(ctx context.Context, usuarioID uuid.UUID, ejercicioID int) (*models.Progreso, error) { - query := ` - SELECT id, usuario_id, modulo_numero, ejercicio_id, completado, puntuacion, intentos, ultima_vez, respuesta_json - FROM progreso_usuario WHERE usuario_id = $1 AND ejercicio_id = $2 - ` - var p models.Progreso - err := r.db.QueryRow(ctx, query, usuarioID, ejercicioID).Scan( - &p.ID, &p.UsuarioID, &p.ModuloNumero, &p.EjercicioID, - &p.Completado, &p.Puntuacion, &p.Intentos, &p.UltimaVez, &p.RespuestaJSON) - if err != nil { - return nil, err - } - return &p, nil -} - -func (r *ProgresoRepository) Upsert(ctx context.Context, usuarioID uuid.UUID, ejercicioID int, update *models.ProgresoUpdate) error { - query := ` - INSERT INTO progreso_usuario (id, usuario_id, modulo_numero, ejercicio_id, completado, puntuacion, intentos, ultima_vez, respuesta_json) - VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) + INSERT INTO progreso_usuario (id, usuario_id, modulo_numero, ejercicio_id, completado, puntuacion, intentos, ultima_vez) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8) ON CONFLICT (usuario_id, modulo_numero, ejercicio_id) - DO UPDATE SET completado = $5, puntuacion = $6, intentos = $7, ultima_vez = $8, respuesta_json = $9 + DO UPDATE SET completado = $5, puntuacion = $6, intentos = progreso_usuario.intentos + 1, ultima_vez = $8 ` - moduloNumero, err := r.getModuloByEjercicio(ctx, ejercicioID) - if err != nil { - return err + if progreso.ID == uuid.Nil { + progreso.ID = uuid.New() + } + if progreso.UltimaVez.IsZero() { + progreso.UltimaVez = time.Now() + } + if progreso.Intentos == 0 { + progreso.Intentos = 1 } - existing, _ := r.GetByEjercicio(ctx, usuarioID, ejercicioID) - var intentos int - if existing != nil { - intentos = existing.Intentos + 1 - } else { - intentos = 1 - } - - _, err = r.db.Exec(ctx, query, - uuid.New(), usuarioID, moduloNumero, ejercicioID, - update.Completado, update.Puntuacion, intentos, time.Now(), update.RespuestaJSON) + _, err := r.db.Exec(context.Background(), query, + progreso.ID, progreso.UsuarioID, progreso.ModuloNumero, progreso.EjercicioID, + progreso.Completado, progreso.Puntuacion, progreso.Intentos, progreso.UltimaVez) return err } -func (r *ProgresoRepository) getModuloByEjercicio(ctx context.Context, ejercicioID int) (int, error) { - var moduloNumero int - err := r.db.QueryRow(ctx, "SELECT modulo_numero FROM ejercicios WHERE id = $1", ejercicioID).Scan(&moduloNumero) - return moduloNumero, err -} - -func (r *ProgresoRepository) GetResumen(ctx context.Context, usuarioID uuid.UUID) (*models.ProgresoResumen, error) { +func (r *ProgresoRepository) GetResumen(usuarioID uuid.UUID) (*models.ResumenProgreso, error) { query := ` SELECT - COUNT(DISTINCT ejercicio_id) as total, - COUNT(CASE WHEN completado THEN 1 END) as completados, - COALESCE(AVG(CASE WHEN completado THEN puntuacion END), 0)::int as promedio, - COUNT(DISTINCT CASE WHEN completado THEN modulo_numero END) as modulos + COALESCE(SUM(puntuacion), 0) as puntos_totales, + COUNT(CASE WHEN completado THEN 1 END) as ejercicios_completados, + COUNT(*) as total_ejercicios FROM progreso_usuario WHERE usuario_id = $1 ` - var resumen models.ProgresoResumen - err := r.db.QueryRow(ctx, query, usuarioID).Scan( - &resumen.TotalEjercicios, &resumen.EjerciciosCompletados, - &resumen.PromedioPuntuacion, &resumen.ModulosCompletados) + var resumen models.ResumenProgreso + err := r.db.QueryRow(context.Background(), query, usuarioID).Scan( + &resumen.PuntosTotales, &resumen.EjerciciosCompletados, &resumen.TotalEjercicios) if err != nil { return nil, err } + + // Alias para compatibilidad con frontend + resumen.TotalPuntuacion = resumen.PuntosTotales + + // Calcular nivel basado en puntuación + resumen.Nivel = calcularNivel(resumen.PuntosTotales) + + // Generar badges basados en progreso + resumen.Badges = generarBadges(resumen.PuntosTotales, resumen.EjerciciosCompletados) + return &resumen, nil } -func (r *ProgresoRepository) GetByUsuarioID(ctx context.Context, usuarioID uuid.UUID) ([]models.Progreso, error) { - return r.GetByUsuario(ctx, usuarioID) +func calcularNivel(puntuacion int) string { + if puntuacion >= 2000 { + return "Maestro" + } + if puntuacion >= 1000 { + return "Experto" + } + if puntuacion >= 300 { + return "Aprendiz" + } + return "Novato" +} + +func generarBadges(puntuacion, ejerciciosCompletados int) []models.Badge { + badges := []models.Badge{ + {ID: "primer-ejercicio", Nombre: "Primer Ejercicio", Descripcion: "Completa tu primer ejercicio", Icono: "star", Desbloqueado: ejerciciosCompletados >= 1}, + {ID: "primer-modulo", Nombre: "Primer Módulo", Descripcion: "Completa todas las lecciones de un módulo", Icono: "award", Desbloqueado: ejerciciosCompletados >= 3}, + {ID: "aprendiz", Nombre: "Aprendiz", Descripcion: "Alcanza el nivel Aprendiz", Icono: "book", Desbloqueado: puntuacion >= 300}, + {ID: "experto", Nombre: "Experto", Descripcion: "Alcanza el nivel Experto", Icono: "trophy", Desbloqueado: puntuacion >= 1000}, + {ID: "maestro", Nombre: "Maestro", Descripcion: "Alcanza el nivel Maestro", Icono: "crown", Desbloqueado: puntuacion >= 2000}, + {ID: "puntos-500", Nombre: "500 Puntos", Descripcion: "Acumula 500 puntos", Icono: "target", Desbloqueado: puntuacion >= 500}, + {ID: "puntos-1000", Nombre: "1000 Puntos", Descripcion: "Acumula 1000 puntos", Icono: "zap", Desbloqueado: puntuacion >= 1000}, + {ID: "puntos-2000", Nombre: "2000 Puntos", Descripcion: "Acumula 2000 puntos", Icono: "flame", Desbloqueado: puntuacion >= 2000}, + } + return badges } diff --git a/frontend/package-lock.json b/frontend/package-lock.json index a3a2d8e..5cf14e3 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "dependencies": { "axios": "^1.6.2", + "framer-motion": "^12.34.0", "lucide-react": "^0.294.0", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -1809,6 +1810,33 @@ "url": "https://github.com/sponsors/rawify" } }, + "node_modules/framer-motion": { + "version": "12.34.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.34.0.tgz", + "integrity": "sha512-+/H49owhzkzQyxtn7nZeF4kdH++I2FWrESQ184Zbcw5cEqNHYkE5yxWxcTLSj5lNx3NWdbIRy5FHqUvetD8FWg==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.34.0", + "motion-utils": "^12.29.2", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -2153,6 +2181,21 @@ "node": ">= 0.6" } }, + "node_modules/motion-dom": { + "version": "12.34.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.34.0.tgz", + "integrity": "sha512-Lql3NuEcScRDxTAO6GgUsRHBZOWI/3fnMlkMcH5NftzcN37zJta+bpbMAV9px4Nj057TuvRooMK7QrzMCgtz6Q==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.29.2" + } + }, + "node_modules/motion-utils": { + "version": "12.29.2", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.29.2.tgz", + "integrity": "sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A==", + "license": "MIT" + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -2850,6 +2893,12 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, "node_modules/typescript": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", diff --git a/frontend/package.json b/frontend/package.json index 43e6e7c..76c3e33 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -11,6 +11,7 @@ }, "dependencies": { "axios": "^1.6.2", + "framer-motion": "^12.34.0", "lucide-react": "^0.294.0", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/frontend/public/pdfs/resumen_clase_1.pdf b/frontend/public/pdfs/resumen_clase_1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f68a3dc53f01f57ba33fbb737b1ee2b7c99679ec GIT binary patch literal 161842 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

wV<&nQS>(tvij)did}S7B2#!PLq!kKqA92a4 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±jeTVDEdy= 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

m-8d_HQ!t$%o;6~T+?b}cS$&gfz!)Uy6 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
+ + {!mostrarCompletado ? ( + +
+
+
+

{titulo}

+

{descripcion}

+
+
+
+ + {puntosMaximos} pts máx. +
+ {puntuacionAnterior !== undefined && ( +
+ Mejor puntuación: {puntuacionAnterior} pts + ({intentos} {intentos === 1 ? 'intento' : 'intentos'}) +
+ )} +
+
+
+ + {childrenWithProps} +
+ ) : ( + + + + + + +

+ ¡Ejercicio Completado! +

+ +

+ Has completado el ejercicio. Revisa tu puntuación y decide si quieres intentarlo de nuevo para mejorar tu marca. +

+ +
+
+ +

{puntuacionActual}

+

Puntuación

+
+ +
+ +

{puntosMaximos}

+

Máximo

+
+ +
+ +

+ {Math.round((puntuacionActual / puntosMaximos) * 100)}% +

+

+ {esMejorPuntuacion ? '¡Récord!' : 'Precisión'} +

+
+
+ + {esMejorPuntuacion && ( + +
+ + ¡Nueva mejor puntuación! +{puntuacionActual - (puntuacionAnterior || 0)} pts +
+
+ )} + +
+ + + + + {!esMejorPuntuacion && puntuacionActual < puntosMaximos && ( + + )} +
+
+
+ )} +
+
+ ); +} + +export default EjercicioWrapper; diff --git a/frontend/src/components/exercises/index.ts b/frontend/src/components/exercises/index.ts new file mode 100644 index 0000000..572f765 --- /dev/null +++ b/frontend/src/components/exercises/index.ts @@ -0,0 +1 @@ +export { EjercicioWrapper } from './EjercicioWrapper'; diff --git a/frontend/src/components/exercises/modulo1/FlujoCircular.tsx b/frontend/src/components/exercises/modulo1/FlujoCircular.tsx new file mode 100644 index 0000000..5559c74 --- /dev/null +++ b/frontend/src/components/exercises/modulo1/FlujoCircular.tsx @@ -0,0 +1,431 @@ +import { useState, useEffect } from 'react'; +import { motion } from 'framer-motion'; +import { Card, CardHeader } from '../../ui/Card'; +import { Button } from '../../ui/Button'; +import { CheckCircle, XCircle, Trophy, Users, Building2, Landmark, Globe, RefreshCw } from 'lucide-react'; + +interface FlujoCircularProps { + ejercicioId: string; + onComplete?: (puntuacion: number) => void; +} + +type Agente = 'familias' | 'empresas' | 'estado' | 'exterior'; +type TipoFlujo = 'real' | 'monetario'; + +interface Elemento { + id: string; + texto: string; + tipo: TipoFlujo; + origen: Agente; + destino: Agente; +} + +interface Nivel { + nombre: string; + descripcion: string; + agentes: Agente[]; + elementos: Elemento[]; +} + +const NIVELES: Nivel[] = [ + { + nombre: 'Básico', + descripcion: 'Solo Familias y Empresas', + agentes: ['familias', 'empresas'], + elementos: [ + { id: 'trabajo', texto: '💪 Trabajo', tipo: 'real', origen: 'familias', destino: 'empresas' }, + { id: 'salarios', texto: '💵 Salarios', tipo: 'monetario', origen: 'empresas', destino: 'familias' }, + { id: 'bienes', texto: '📦 Bienes', tipo: 'real', origen: 'empresas', destino: 'familias' }, + { id: 'gasto', texto: '💳 Gasto', tipo: 'monetario', origen: 'familias', destino: 'empresas' }, + ] + }, + { + nombre: 'Intermedio', + descripcion: 'Incluye al Estado', + agentes: ['familias', 'empresas', 'estado'], + elementos: [ + { id: 'trabajo', texto: '💪 Trabajo', tipo: 'real', origen: 'familias', destino: 'empresas' }, + { id: 'tierra', texto: '🌾 Tierra', tipo: 'real', origen: 'familias', destino: 'empresas' }, + { id: 'capital', texto: '💰 Capital', tipo: 'real', origen: 'familias', destino: 'empresas' }, + { id: 'salarios', texto: '💵 Salarios', tipo: 'monetario', origen: 'empresas', destino: 'familias' }, + { id: 'renta', texto: '🏠 Renta', tipo: 'monetario', origen: 'empresas', destino: 'familias' }, + { id: 'intereses', texto: '📈 Intereses', tipo: 'monetario', origen: 'empresas', destino: 'familias' }, + { id: 'bienes', texto: '📦 Bienes', tipo: 'real', origen: 'empresas', destino: 'familias' }, + { id: 'servicios', texto: '🔧 Servicios', tipo: 'real', origen: 'empresas', destino: 'familias' }, + { id: 'gasto', texto: '💳 Gasto', tipo: 'monetario', origen: 'familias', destino: 'empresas' }, + { id: 'impuestos', texto: '📝 Impuestos', tipo: 'monetario', origen: 'familias', destino: 'estado' }, + { id: 'transferencias', texto: '🎁 Transferencias', tipo: 'monetario', origen: 'estado', destino: 'familias' }, + { id: 'gasto-publico', texto: '🏗️ Gasto Público', tipo: 'monetario', origen: 'estado', destino: 'empresas' }, + ] + }, + { + nombre: 'Avanzado', + descripcion: 'Todos los agentes incluyendo Sector Externo', + agentes: ['familias', 'empresas', 'estado', 'exterior'], + elementos: [ + { id: 'trabajo', texto: '💪 Trabajo', tipo: 'real', origen: 'familias', destino: 'empresas' }, + { id: 'tierra', texto: '🌾 Tierra', tipo: 'real', origen: 'familias', destino: 'empresas' }, + { id: 'capital', texto: '💰 Capital', tipo: 'real', origen: 'familias', destino: 'empresas' }, + { id: 'salarios', texto: '💵 Salarios', tipo: 'monetario', origen: 'empresas', destino: 'familias' }, + { id: 'renta', texto: '🏠 Renta', tipo: 'monetario', origen: 'empresas', destino: 'familias' }, + { id: 'intereses', texto: '📈 Intereses', tipo: 'monetario', origen: 'empresas', destino: 'familias' }, + { id: 'bienes', texto: '📦 Bienes', tipo: 'real', origen: 'empresas', destino: 'familias' }, + { id: 'servicios', texto: '🔧 Servicios', tipo: 'real', origen: 'empresas', destino: 'familias' }, + { id: 'gasto', texto: '💳 Gasto', tipo: 'monetario', origen: 'familias', destino: 'empresas' }, + { id: 'impuestos', texto: '📝 Impuestos', tipo: 'monetario', origen: 'familias', destino: 'estado' }, + { id: 'transferencias', texto: '🎁 Transferencias', tipo: 'monetario', origen: 'estado', destino: 'familias' }, + { id: 'gasto-publico', texto: '🏗️ Gasto Público', tipo: 'monetario', origen: 'estado', destino: 'empresas' }, + { id: 'exportaciones', texto: '📤 Exportaciones', tipo: 'real', origen: 'empresas', destino: 'exterior' }, + { id: 'importaciones', texto: '📥 Importaciones', tipo: 'real', origen: 'exterior', destino: 'empresas' }, + { id: 'divisas-ent', texto: '💱 Divisas (Ent.)', tipo: 'monetario', origen: 'exterior', destino: 'empresas' }, + { id: 'divisas-sal', texto: '💱 Divisas (Sal.)', tipo: 'monetario', origen: 'empresas', destino: 'exterior' }, + ] + } +]; + +const AGENTE_CONFIG: Record = { + familias: { icon: , label: 'Familias', color: 'bg-green-100 text-green-700 border-green-300', position: 'left-4 top-1/2 -translate-y-1/2' }, + empresas: { icon: , label: 'Empresas', color: 'bg-blue-100 text-blue-700 border-blue-300', position: 'right-4 top-1/2 -translate-y-1/2' }, + estado: { icon: , label: 'Estado', color: 'bg-orange-100 text-orange-700 border-orange-300', position: 'left-1/2 -translate-x-1/2 top-4' }, + exterior: { icon: , label: 'Sector Externo', color: 'bg-purple-100 text-purple-700 border-purple-300', position: 'left-1/2 -translate-x-1/2 bottom-4' }, +}; + +export function FlujoCircular({ ejercicioId: _ejercicioId, onComplete }: FlujoCircularProps) { + const [nivelActual, setNivelActual] = useState(0); + const [elementosColocados, setElementosColocados] = useState>({}); + const [elementoSeleccionado, setElementoSeleccionado] = useState(null); + const [puntuacion, setPuntuacion] = useState(0); + const [completado, setCompletado] = useState(false); + const [aciertos, setAciertos] = useState(0); + const [errores, setErrores] = useState(0); + + const nivel = NIVELES[nivelActual]; + + useEffect(() => { + const inicial: Record = {}; + nivel.elementos.forEach(el => { + inicial[el.id] = null; + }); + setElementosColocados(inicial); + }, [nivel]); + + const handleElementoClick = (elementoId: string) => { + if (elementosColocados[elementoId]) return; + setElementoSeleccionado(elementoId === elementoSeleccionado ? null : elementoId); + }; + + const handleConexionClick = (origen: Agente, destino: Agente) => { + if (!elementoSeleccionado) return; + + const elemento = nivel.elementos.find(el => el.id === elementoSeleccionado); + if (!elemento) return; + + const esCorrecto = elemento.origen === origen && elemento.destino === destino; + + setElementosColocados(prev => ({ + ...prev, + [elementoSeleccionado]: { origen, destino } + })); + + if (esCorrecto) { + setAciertos(prev => prev + 1); + setPuntuacion(prev => prev + 10); + } else { + setErrores(prev => prev + 1); + setPuntuacion(prev => Math.max(0, prev - 2)); + } + + setElementoSeleccionado(null); + }; + + const verificarCompletitud = () => { + const todosColocados = nivel.elementos.every(el => elementosColocados[el.id] !== null); + if (todosColocados) { + const bonus = 50; + setPuntuacion(prev => prev + bonus); + + if (nivelActual < NIVELES.length - 1) { + setNivelActual(prev => prev + 1); + } else { + setCompletado(true); + if (onComplete) { + onComplete(puntuacion + bonus); + } + } + } + }; + + useEffect(() => { + const todosColocados = nivel.elementos.every(el => elementosColocados[el.id] !== null); + if (todosColocados && !completado) { + setTimeout(verificarCompletitud, 500); + } + }, [elementosColocados]); + + const handleReiniciarNivel = () => { + const inicial: Record = {}; + nivel.elementos.forEach(el => { + inicial[el.id] = null; + }); + setElementosColocados(inicial); + setElementoSeleccionado(null); + setAciertos(0); + setErrores(0); + }; + + const getConexionesPosibles = (): { origen: Agente; destino: Agente; label: string }[] => { + const conexiones: { origen: Agente; destino: Agente; label: string }[] = []; + + if (nivel.agentes.includes('familias') && nivel.agentes.includes('empresas')) { + conexiones.push({ origen: 'familias', destino: 'empresas', label: 'Familias → Empresas' }); + conexiones.push({ origen: 'empresas', destino: 'familias', label: 'Empresas → Familias' }); + } + + if (nivel.agentes.includes('estado')) { + if (nivel.agentes.includes('familias')) { + conexiones.push({ origen: 'familias', destino: 'estado', label: 'Familias → Estado' }); + conexiones.push({ origen: 'estado', destino: 'familias', label: 'Estado → Familias' }); + } + if (nivel.agentes.includes('empresas')) { + conexiones.push({ origen: 'estado', destino: 'empresas', label: 'Estado → Empresas' }); + } + } + + if (nivel.agentes.includes('exterior') && nivel.agentes.includes('empresas')) { + conexiones.push({ origen: 'empresas', destino: 'exterior', label: 'Empresas → Exterior' }); + conexiones.push({ origen: 'exterior', destino: 'empresas', label: 'Exterior → Empresas' }); + } + + return conexiones; + }; + + if (completado) { + return ( + +
+ + + + +

¡Juego Completado!

+

+ Has completado todos los niveles del Flujo Circular +

+ +
+

Puntuación Final

+

{puntuacion} puntos

+
+ +
+
+

{aciertos}

+

Aciertos

+
+
+

{errores}

+

Errores

+
+
+ + +
+
+ ); + } + + return ( + + + + + } + /> + +
+
+ {NIVELES.map((_, idx) => ( +
+ {idx < nivelActual ? : idx + 1} +
+ ))} +
+
+

Puntuación

+

{puntuacion} pts

+
+
+ +
+
+
+ {nivel.agentes.map((agente) => ( + + {AGENTE_CONFIG[agente].icon} + {AGENTE_CONFIG[agente].label} + + ))} + + + {getConexionesPosibles().map((conexion, idx) => ( + + + + ))} + + +
+
+ {getConexionesPosibles().map((conexion, idx) => { + const elementosEnConexion = nivel.elementos.filter(el => + elementosColocados[el.id]?.origen === conexion.origen && + elementosColocados[el.id]?.destino === conexion.destino + ); + + return ( + + ); + })} +
+
+
+
+ +
+

Elementos ({nivel.elementos.length})

+

+ {elementoSeleccionado + ? 'Selecciona una conexión en el diagrama' + : 'Haz clic en un elemento para colocarlo'} +

+ +
+ {nivel.elementos.map((elemento) => { + const colocado = elementosColocados[elemento.id]; + const seleccionado = elementoSeleccionado === elemento.id; + const esCorrecto = colocado && colocado.origen === elemento.origen && colocado.destino === elemento.destino; + + return ( + handleElementoClick(elemento.id)} + disabled={!!colocado} + whileHover={!colocado ? { scale: 1.02 } : {}} + whileTap={!colocado ? { scale: 0.98 } : {}} + className={`w-full p-3 rounded-lg border-2 text-left transition-all ${ + colocado + ? esCorrecto + ? 'border-green-300 bg-green-50' + : 'border-red-300 bg-red-50' + : seleccionado + ? 'border-blue-500 bg-blue-50 shadow-md' + : 'border-gray-200 bg-white hover:border-blue-300' + }`} + > +
+
+ {elemento.texto.split(' ')[0]} + {elemento.texto.split(' ').slice(1).join(' ')} +
+ {colocado && ( + esCorrecto + ? + : + )} +
+
+ + {elemento.tipo === 'real' ? 'Real' : 'Monetario'} + + {colocado && !esCorrecto && ( + + {AGENTE_CONFIG[elemento.origen].label} → {AGENTE_CONFIG[elemento.destino].label} + + )} +
+
+ ); + })} +
+ +
+

Leyenda:

+
+ + + Flujo Real + + + + Flujo Monetario + +
+
+
+
+
+ ); +} + +export default FlujoCircular; diff --git a/frontend/src/components/exercises/modulo1/QuizBienes.tsx b/frontend/src/components/exercises/modulo1/QuizBienes.tsx new file mode 100644 index 0000000..1cb3c5c --- /dev/null +++ b/frontend/src/components/exercises/modulo1/QuizBienes.tsx @@ -0,0 +1,310 @@ +import { useState, useEffect } from 'react'; +import { motion, AnimatePresence } from 'framer-motion'; +import { Card, CardHeader } from '../../ui/Card'; +import { Button } from '../../ui/Button'; +import { CheckCircle, XCircle, ArrowRight, Trophy, BookOpen } from 'lucide-react'; + +interface QuizBienesProps { + ejercicioId: string; + onComplete?: (puntuacion: number) => void; +} + +interface Pregunta { + id: string; + bien: string; + descripcion: string; + opciones: string[]; + respuestaCorrecta: string; + explicacionDetallada: string; +} + +const PREGUNTAS: Pregunta[] = [ + { + id: 'p1', + bien: 'Carne de primera calidad', + descripcion: 'Carne de res premium vendida en supermercados de alta gama', + opciones: ['Bien normal', 'Bien inferior', 'Bien de lujo'], + respuestaCorrecta: 'Bien de lujo', + explicacionDetallada: 'La carne premium es considerada un bien de lujo porque cuando el ingreso aumenta significativamente, las familias aumentan su consumo de este tipo de carne sustituyendo carnes de menor calidad.' + }, + { + id: 'p2', + bien: 'Pan', + descripcion: 'Pan básico de consumo diario', + opciones: ['Bien normal', 'Bien inferior', 'Bien de lujo'], + respuestaCorrecta: 'Bien normal', + explicacionDetallada: 'El pan es un bien normal porque su consumo aumenta moderadamente con el ingreso, aunque llega un punto donde se estabiliza (saturación).' + }, + { + id: 'p3', + bien: 'Transporte público (autobús)', + descripcion: 'Servicio de autobuses urbanos', + opciones: ['Bien normal', 'Bien inferior', 'Bien de lujo'], + respuestaCorrecta: 'Bien inferior', + explicacionDetallada: 'El transporte público es un bien inferior porque cuando los ingresos aumentan, las personas tienden a comprar automóviles o usar taxis/Uber, reduciendo el uso del autobús.' + }, + { + id: 'p4', + bien: 'Fideos instantáneos', + descripcion: 'Comida rápida económica', + opciones: ['Bien normal', 'Bien inferior', 'Bien de lujo'], + respuestaCorrecta: 'Bien inferior', + explicacionDetallada: 'Los fideos instantáneos son claramente un bien inferior. A medida que aumentan los ingresos, las personas prefieren alimentos más nutritivos y de mejor calidad.' + }, + { + id: 'p5', + bien: 'Vacaciones en el extranjero', + descripcion: 'Viajes turísticos internacionales', + opciones: ['Bien normal', 'Bien inferior', 'Bien de lujo'], + respuestaCorrecta: 'Bien de lujo', + explicacionDetallada: 'Las vacaciones internacionales son un bien de lujo porque su consumo aumenta significativamente cuando el ingreso crece, incluso más que proporcionalmente.' + }, + { + id: 'p6', + bien: 'Ropa de marca', + descripcion: 'Vestimenta de diseñador', + opciones: ['Bien normal', 'Bien inferior', 'Bien de lujo'], + respuestaCorrecta: 'Bien de lujo', + explicacionDetallada: 'La ropa de marca es un bien de lujo porque su demanda crece más rápido que el ingreso, especialmente en rangos de ingreso altos.' + }, + { + id: 'p7', + bien: 'Cine', + descripcion: 'Entradas a salas de cine', + opciones: ['Bien normal', 'Bien inferior', 'Bien de lujo'], + respuestaCorrecta: 'Bien normal', + explicacionDetallada: 'El cine es un bien normal. Aunque con el auge del streaming podría debatirse, generalmente el consumo de entretenimiento aumenta con el ingreso de forma moderada.' + }, + { + id: 'p8', + bien: 'Productos de marca blanca', + descripcion: 'Productos genéricos de supermercado', + opciones: ['Bien normal', 'Bien inferior', 'Bien de lujo'], + respuestaCorrecta: 'Bien inferior', + explicacionDetallada: 'Los productos de marca blanca son bienes inferiores porque son sustituidos por marcas reconocidas cuando el consumidor tiene mayores ingresos.' + } +]; + +export function QuizBienes({ ejercicioId: _ejercicioId, onComplete }: QuizBienesProps) { + const [preguntaActual, setPreguntaActual] = useState(0); + const [respuestaSeleccionada, setRespuestaSeleccionada] = useState(null); + const [mostrarRetroalimentacion, setMostrarRetroalimentacion] = useState(false); + const [puntuacion, setPuntuacion] = useState(0); + const [respuestasCorrectas, setRespuestasCorrectas] = useState(0); + const [completado, setCompletado] = useState(false); + const [progreso, setProgreso] = useState(0); + + useEffect(() => { + setProgreso(((preguntaActual + (completado ? 1 : 0)) / PREGUNTAS.length) * 100); + }, [preguntaActual, completado]); + + const handleSeleccionarRespuesta = (opcion: string) => { + if (mostrarRetroalimentacion) return; + setRespuestaSeleccionada(opcion); + }; + + const handleValidar = () => { + if (!respuestaSeleccionada) return; + + const esCorrecta = respuestaSeleccionada === PREGUNTAS[preguntaActual].respuestaCorrecta; + setMostrarRetroalimentacion(true); + + if (esCorrecta) { + setRespuestasCorrectas(prev => prev + 1); + setPuntuacion(prev => prev + 100); + } + }; + + const handleSiguiente = () => { + if (preguntaActual < PREGUNTAS.length - 1) { + setPreguntaActual(prev => prev + 1); + setRespuestaSeleccionada(null); + setMostrarRetroalimentacion(false); + } else { + setCompletado(true); + const puntuacionFinal = puntuacion + (respuestaSeleccionada === PREGUNTAS[preguntaActual].respuestaCorrecta ? 100 : 0); + if (onComplete) { + onComplete(puntuacionFinal); + } + } + }; + + const handleReiniciar = () => { + setPreguntaActual(0); + setRespuestaSeleccionada(null); + setMostrarRetroalimentacion(false); + setPuntuacion(0); + setRespuestasCorrectas(0); + setCompletado(false); + }; + + const pregunta = PREGUNTAS[preguntaActual]; + const esCorrecta = respuestaSeleccionada === pregunta.respuestaCorrecta; + + if (completado) { + return ( + +
+ + + + +

¡Quiz Completado!

+

+ Respondiste correctamente {respuestasCorrectas} de {PREGUNTAS.length} preguntas +

+ +
+

Puntuación Total

+

{puntuacion} puntos

+
+ + +
+
+ ); + } + + return ( + + + +
+
+ Progreso + {Math.round(progreso)}% +
+
+ +
+
+ +
+
+ + Clasifica el siguiente bien: +
+ +

{pregunta.bien}

+

{pregunta.descripcion}

+
+ +
+ {pregunta.opciones.map((opcion, index) => { + const isSelected = respuestaSeleccionada === opcion; + const isCorrect = opcion === pregunta.respuestaCorrecta; + const showCorrect = mostrarRetroalimentacion && isCorrect; + const showIncorrect = mostrarRetroalimentacion && isSelected && !isCorrect; + + return ( + handleSeleccionarRespuesta(opcion)} + disabled={mostrarRetroalimentacion} + whileHover={!mostrarRetroalimentacion ? { scale: 1.02 } : {}} + whileTap={!mostrarRetroalimentacion ? { scale: 0.98 } : {}} + className={`w-full p-4 rounded-lg border-2 text-left transition-all ${ + showCorrect + ? 'border-green-500 bg-green-50' + : showIncorrect + ? 'border-red-500 bg-red-50' + : isSelected + ? 'border-blue-500 bg-blue-50' + : 'border-gray-200 hover:border-blue-300' + }`} + > +
+
+ + {String.fromCharCode(65 + index)} + + {opcion} +
+ {showCorrect && } + {showIncorrect && } +
+
+ ); + })} +
+ + + {mostrarRetroalimentacion && ( + +
+
+ {esCorrecta ? ( + + ) : ( + + )} + + {esCorrecta ? '¡Correcto!' : 'Incorrecto'} + +
+

+ {pregunta.explicacionDetallada} +

+
+
+ )} +
+ +
+
+ Puntuación: {puntuacion} pts +
+ + {!mostrarRetroalimentacion ? ( + + ) : ( + + )} +
+
+ ); +} + +export default QuizBienes; diff --git a/frontend/src/components/exercises/modulo1/SimuladorDisyuntivas.tsx b/frontend/src/components/exercises/modulo1/SimuladorDisyuntivas.tsx new file mode 100644 index 0000000..ee29577 --- /dev/null +++ b/frontend/src/components/exercises/modulo1/SimuladorDisyuntivas.tsx @@ -0,0 +1,248 @@ +import { useState, useCallback } from 'react'; + +interface SimuladorDisyuntivasProps { + ejercicioId: string; + onComplete?: (puntuacion: number) => void; +} + +export function SimuladorDisyuntivas({ ejercicioId: _ejercicioId, onComplete }: SimuladorDisyuntivasProps) { + const [bienX, setBienX] = useState(50); + const [bienY, setBienY] = useState(50); + const [validacion, setValidacion] = useState<'eficiente' | 'ineficiente' | 'inalcanzable' | null>(null); + const [completado, setCompletado] = useState(false); + + const MAX_X = 100; + const MAX_Y = 80; + + const calcularFPP = useCallback((x: number): number => { + const ratio = x / MAX_X; + const y = MAX_Y * Math.pow(1 - ratio, 0.7); + return Math.max(0, Math.min(MAX_Y, y)); + }, []); + + const validarPosicion = useCallback(() => { + const yFPP = calcularFPP(bienX); + const diferencia = Math.abs(bienY - yFPP); + const tolerancia = 3; + + if (bienY > yFPP + tolerancia) { + return 'inalcanzable'; + } else if (diferencia <= tolerancia) { + return 'eficiente'; + } else { + return 'ineficiente'; + } + }, [bienX, bienY, calcularFPP]); + + const handleValidar = () => { + const resultado = validarPosicion(); + setValidacion(resultado); + + if (resultado === 'eficiente' && !completado) { + setCompletado(true); + if (onComplete) { + onComplete(100); + } + } + }; + + const handleReset = () => { + setBienX(50); + setBienY(50); + setValidacion(null); + setCompletado(false); + }; + + // Generar puntos para la curva FPP + const puntosFPP: string[] = []; + for (let x = 0; x <= MAX_X; x += 2) { + const y = calcularFPP(x); + const svgX = 40 + (x / MAX_X) * 260; + const svgY = 200 - (y / MAX_Y) * 180; + puntosFPP.push(`${svgX},${svgY}`); + } + const pathData = puntosFPP.length > 0 + ? `M ${puntosFPP.join(' L ')}` + : ''; + + const colorValidacion = validacion === 'eficiente' + ? 'text-green-600 bg-green-50 border-green-200' + : validacion === 'ineficiente' + ? 'text-yellow-600 bg-yellow-50 border-yellow-200' + : validacion === 'inalcanzable' + ? 'text-red-600 bg-red-50 border-red-200' + : 'text-gray-600 bg-gray-50 border-gray-200'; + + const mensajeValidacion = validacion === 'eficiente' + ? '¡Excelente! Estás sobre la FPP (Asignación eficiente)' + : validacion === 'ineficiente' + ? 'Punto ineficiente: Estás dentro de la FPP, hay recursos sin usar' + : validacion === 'inalcanzable' + ? 'Punto inalcanzable: No tienes suficientes recursos' + : 'Ajusta los sliders para explorar la FPP'; + + const puntoColor = validacion === 'eficiente' + ? '#10b981' + : validacion === 'ineficiente' + ? '#f59e0b' + : validacion === 'inalcanzable' + ? '#ef4444' + : '#6b7280'; + + return ( +
+
+

Simulador de Disyuntivas Económicas

+

Explora la Frontera de Posibilidades de Producción (FPP)

+
+ +
+
+ {/* Slider X */} +
+ + setBienX(Number(e.target.value))} + className="w-full h-2 bg-gray-200 rounded-lg cursor-pointer" + style={{ accentColor: '#2563eb' }} + /> +
+ + {/* Slider Y */} +
+ + setBienY(Number(e.target.value))} + className="w-full h-2 bg-gray-200 rounded-lg cursor-pointer" + style={{ accentColor: '#16a34a' }} + /> +
+ + {/* Mensaje de validación */} +
+ {validacion || 'Selecciona'}: +

{mensajeValidacion}

+
+ + {/* Botones */} +
+ + +
+ + {/* Mensaje de éxito */} + {completado && ( +
+

¡Ejercicio Completado!

+

100 puntos

+
+ )} +
+ + {/* Gráfico SVG */} +
+ + {/* Grid */} + + + + + + + + {/* Ejes */} + + + + {/* Flechas */} + + + + {/* Etiquetas */} + + Alimentos (millones de toneladas) + + + Tecnología (millones de unidades) + + + {/* Marcas X */} + {[0, 25, 50, 75, 100].map((val, i) => ( + + + {val} + + ))} + + {/* Marcas Y */} + {[0, 20, 40, 60, 80].map((val, i) => ( + + + {val} + + ))} + + {/* Curva FPP */} + {pathData && ( + + )} + + {/* Punto actual */} + + + {/* Coordenadas */} + + ({bienX}, {bienY}) + + +
+
+
+ ); +} + +export default SimuladorDisyuntivas; diff --git a/frontend/src/components/exercises/modulo1/index.ts b/frontend/src/components/exercises/modulo1/index.ts new file mode 100644 index 0000000..e5334ca --- /dev/null +++ b/frontend/src/components/exercises/modulo1/index.ts @@ -0,0 +1,3 @@ +export { SimuladorDisyuntivas } from './SimuladorDisyuntivas'; +export { QuizBienes } from './QuizBienes'; +export { FlujoCircular } from './FlujoCircular'; diff --git a/frontend/src/components/exercises/modulo2/ConstructorCurvas.tsx b/frontend/src/components/exercises/modulo2/ConstructorCurvas.tsx new file mode 100644 index 0000000..a6b7d5b --- /dev/null +++ b/frontend/src/components/exercises/modulo2/ConstructorCurvas.tsx @@ -0,0 +1,505 @@ +import React, { useState, useRef, useCallback } from 'react'; +import { motion, AnimatePresence } from 'framer-motion'; +import { LineChart, Check, X, RotateCcw, Trophy, ArrowRight, HelpCircle } from 'lucide-react'; + +interface Punto { + x: number; + y: number; + id: string; +} + +interface ConstructorCurvasProps { + ejercicioId: string; + onComplete?: (puntuacion: number) => void; +} + +type Nivel = 'demanda' | 'oferta' | 'equilibrio'; +type TipoCurva = 'demanda' | 'oferta'; + +interface NivelConfig { + tipo: Nivel; + titulo: string; + descripcion: string; + tipoCurvaEsperada: TipoCurva | 'ambas'; + mensajeExito: string; +} + +const niveles: NivelConfig[] = [ + { + tipo: 'demanda', + titulo: 'Nivel 1: Curva de Demanda', + descripcion: 'La demanda tiene pendiente negativa (cuando el precio sube, la cantidad demandada baja). Coloca al menos 2 puntos y traza la línea.', + tipoCurvaEsperada: 'demanda', + mensajeExito: '¡Correcto! La curva de demanda tiene pendiente negativa.' + }, + { + tipo: 'oferta', + titulo: 'Nivel 2: Curva de Oferta', + descripcion: 'La oferta tiene pendiente positiva (cuando el precio sube, los productores quieren vender más). Coloca al menos 2 puntos.', + tipoCurvaEsperada: 'oferta', + mensajeExito: '¡Correcto! La curva de oferta tiene pendiente positiva.' + }, + { + tipo: 'equilibrio', + titulo: 'Nivel 3: Equilibrio de Mercado', + descripcion: 'Dibuja ambas curvas para encontrar el punto de equilibrio donde se cruzan.', + tipoCurvaEsperada: 'ambas', + mensajeExito: '¡Excelente! Has encontrado el equilibrio de mercado.' + } +]; + +const GRID_SIZE = 300; +const PADDING = 40; +const MAX_PRECIO = 100; +const MAX_CANTIDAD = 100; + +export const ConstructorCurvas: React.FC = ({ onComplete, ejercicioId: _ejercicioId }) => { + const [nivelActual, setNivelActual] = useState(0); + const [puntosDemanda, setPuntosDemanda] = useState([]); + const [puntosOferta, setPuntosOferta] = useState([]); + const [modoActivo, setModoActivo] = useState('demanda'); + const [mensaje, setMensaje] = useState(''); + const [showSuccess, setShowSuccess] = useState(false); + const [score, setScore] = useState(0); + const [_startTime] = useState(Date.now()); + const [, setPuntosDibujados] = useState<{ demanda: boolean; oferta: boolean }>({ demanda: false, oferta: false }); + + const svgRef = useRef(null); + const [draggedPoint, setDraggedPoint] = useState(null); + + const nivel = niveles[nivelActual]; + + const cartesianToSvg = useCallback((x: number, y: number) => { + const svgX = PADDING + (x / MAX_CANTIDAD) * GRID_SIZE; + const svgY = PADDING + GRID_SIZE - (y / MAX_PRECIO) * GRID_SIZE; + return { x: svgX, y: svgY }; + }, []); + + const svgToCartesian = useCallback((svgX: number, svgY: number) => { + const x = ((svgX - PADDING) / GRID_SIZE) * MAX_CANTIDAD; + const y = ((PADDING + GRID_SIZE - svgY) / GRID_SIZE) * MAX_PRECIO; + return { + x: Math.max(0, Math.min(MAX_CANTIDAD, Math.round(x))), + y: Math.max(0, Math.min(MAX_PRECIO, Math.round(y))) + }; + }, []); + + const handleSvgClick = (e: React.MouseEvent) => { + if (draggedPoint || nivelActual === 2) return; + + const rect = svgRef.current?.getBoundingClientRect(); + if (!rect) return; + + const svgX = e.clientX - rect.left; + const svgY = e.clientY - rect.top; + const cartesian = svgToCartesian(svgX, svgY); + + if (nivelActual === 0 && puntosDemanda.length >= 4) { + setMensaje('Máximo 4 puntos para la demanda'); + return; + } + if (nivelActual === 1 && puntosOferta.length >= 4) { + setMensaje('Máximo 4 puntos para la oferta'); + return; + } + + const newPoint: Punto = { + x: cartesian.x, + y: cartesian.y, + id: `point-${Date.now()}-${Math.random()}` + }; + + if (modoActivo === 'demanda') { + setPuntosDemanda(prev => [...prev, newPoint]); + } else { + setPuntosOferta(prev => [...prev, newPoint]); + } + setMensaje(''); + }; + + const handlePointDrag = (pointId: string, _tipo: TipoCurva) => { + setDraggedPoint(pointId); + }; + + const handlePointMove = (e: React.MouseEvent) => { + if (!draggedPoint) return; + + const rect = svgRef.current?.getBoundingClientRect(); + if (!rect) return; + + const svgX = e.clientX - rect.left; + const svgY = e.clientY - rect.top; + const cartesian = svgToCartesian(svgX, svgY); + + const updatePoint = (puntos: Punto[]) => + puntos.map(p => p.id === draggedPoint ? { ...p, x: cartesian.x, y: cartesian.y } : p); + + if (puntosDemanda.some(p => p.id === draggedPoint)) { + setPuntosDemanda(updatePoint); + } else if (puntosOferta.some(p => p.id === draggedPoint)) { + setPuntosOferta(updatePoint); + } + }; + + const handlePointUp = () => { + setDraggedPoint(null); + }; + + const calcularPendiente = (puntos: Punto[]): number | null => { + if (puntos.length < 2) return null; + const sorted = [...puntos].sort((a, b) => a.x - b.x); + const first = sorted[0]; + const last = sorted[sorted.length - 1]; + if (last.x === first.x) return 0; + return (last.y - first.y) / (last.x - first.x); + }; + + const validarCurva = () => { + const puntos = modoActivo === 'demanda' ? puntosDemanda : puntosOferta; + + if (puntos.length < 2) { + setMensaje('Necesitas al menos 2 puntos para trazar una curva'); + return; + } + + const pendiente = calcularPendiente(puntos); + if (pendiente === null) return; + + if (modoActivo === 'demanda') { + if (pendiente >= 0) { + setMensaje('La demanda debe tener pendiente negativa (bajar de izquierda a derecha)'); + return; + } + setPuntosDibujados(prev => ({ ...prev, demanda: true })); + } else { + if (pendiente <= 0) { + setMensaje('La oferta debe tener pendiente positiva (subir de izquierda a derecha)'); + return; + } + setPuntosDibujados(prev => ({ ...prev, oferta: true })); + } + + setMensaje(''); + setShowSuccess(true); + setScore(prev => prev + 33); + + setTimeout(() => { + if (nivelActual < 2) { + setNivelActual(prev => prev + 1); + setShowSuccess(false); + setMensaje(''); + if (nivelActual === 0) setModoActivo('oferta'); + } + }, 2000); + }; + + const validarEquilibrio = () => { + if (puntosDemanda.length < 2 || puntosOferta.length < 2) { + setMensaje('Necesitas trazar ambas curvas con al menos 2 puntos cada una'); + return; + } + + setShowSuccess(true); + setScore(100); + + setTimeout(() => { + if (onComplete) { + onComplete(100); + } + }, 2000); + }; + + const reiniciar = () => { + setPuntosDemanda([]); + setPuntosOferta([]); + setNivelActual(0); + setModoActivo('demanda'); + setMensaje(''); + setShowSuccess(false); + setScore(0); + setPuntosDibujados({ demanda: false, oferta: false }); + }; + + const eliminarPunto = (id: string, tipo: TipoCurva) => { + if (tipo === 'demanda') { + setPuntosDemanda(prev => prev.filter(p => p.id !== id)); + } else { + setPuntosOferta(prev => prev.filter(p => p.id !== id)); + } + }; + + const renderLineaCurva = (puntos: Punto[], color: string) => { + if (puntos.length < 2) return null; + const sorted = [...puntos].sort((a, b) => a.x - b.x); + const points = sorted.map(p => { + const svg = cartesianToSvg(p.x, p.y); + return `${svg.x},${svg.y}`; + }).join(' '); + + return ( + + ); + }; + + return ( +
+
+
+
+ +

{nivel.titulo}

+
+
+ Nivel {nivelActual + 1} de 3 +
+ +
+ +
+
+

{nivel.descripcion}

+
+ + {nivelActual === 2 && ( +
+ + + Nivel Avanzado: Dibuja ambas curvas. La demanda (azul) con pendiente negativa, + y la oferta (verde) con pendiente positiva. + +
+ )} + +
+
+ + {/* Grid */} + {Array.from({ length: 11 }).map((_, i) => ( + + + + + ))} + + {/* Ejes */} + + + + {/* Labels ejes */} + + Cantidad + + + Precio + + + {/* Curvas */} + {(nivelActual === 0 || nivelActual === 2) && renderLineaCurva(puntosDemanda, '#3b82f6')} + {(nivelActual === 1 || nivelActual === 2) && renderLineaCurva(puntosOferta, '#22c55e')} + + {/* Puntos Demanda */} + {(nivelActual === 0 || nivelActual === 2) && puntosDemanda.map(punto => { + const svg = cartesianToSvg(punto.x, punto.y); + return ( + + handlePointDrag(punto.id, 'demanda')} + onClick={(e) => { + e.stopPropagation(); + eliminarPunto(punto.id, 'demanda'); + }} + /> + + ({punto.x}, {punto.y}) + + + ); + })} + + {/* Puntos Oferta */} + {(nivelActual === 1 || nivelActual === 2) && puntosOferta.map(punto => { + const svg = cartesianToSvg(punto.x, punto.y); + return ( + + handlePointDrag(punto.id, 'oferta')} + onClick={(e) => { + e.stopPropagation(); + eliminarPunto(punto.id, 'oferta'); + }} + /> + + ({punto.x}, {punto.y}) + + + ); + })} + +
+ +
+ {nivelActual === 2 && ( +
+ + +
+ )} + +
+

Puntos colocados:

+ {modoActivo === 'demanda' || nivelActual === 2 ? ( +
+ Demanda: + {puntosDemanda.length} puntos +
+ ) : null} + {(modoActivo === 'oferta' || nivelActual === 2) && ( +
+ Oferta: + {puntosOferta.length} puntos +
+ )} +
+ + {mensaje && ( + + +

{mensaje}

+
+ )} + + {nivelActual < 2 ? ( + + ) : ( + + )} + + + {showSuccess && ( + + +

{nivel.mensajeExito}

+ {nivelActual === 2 && ( +
+ Completado + +
+ )} +
+ )} +
+
+
+
+ ); +}; + +export default ConstructorCurvas; diff --git a/frontend/src/components/exercises/modulo2/IdentificarShocks.tsx b/frontend/src/components/exercises/modulo2/IdentificarShocks.tsx new file mode 100644 index 0000000..25292d5 --- /dev/null +++ b/frontend/src/components/exercises/modulo2/IdentificarShocks.tsx @@ -0,0 +1,467 @@ +import React, { useState } from 'react'; +import { motion, AnimatePresence } from 'framer-motion'; +import { Brain, ArrowRight, ArrowLeft, TrendingUp, TrendingDown, CheckCircle2, XCircle, Trophy, RotateCcw, BookOpen } from 'lucide-react'; + +interface IdentificarShocksProps { + ejercicioId: string; + onComplete?: (puntuacion: number) => void; +} + +type DireccionShock = 'oferta-up' | 'oferta-down' | 'demanda-up' | 'demanda-down'; +type CurvaTipo = 'oferta' | 'demanda'; +type Direccion = 'arriba' | 'abajo'; + +interface Escenario { + id: number; + descripcion: string; + respuesta: DireccionShock; + curva: CurvaTipo; + direccion: Direccion; + explicacion: string; + dificultad: 'facil' | 'medio' | 'dificil'; +} + +const escenarios: Escenario[] = [ + { + id: 1, + descripcion: 'Una nueva tecnología permite producir smartphones más rápido y barato.', + respuesta: 'oferta-up', + curva: 'oferta', + direccion: 'arriba', + explicacion: 'La tecnología mejora la productividad, reduciendo costos. Esto aumenta la oferta (la curva se desplaza a la derecha).', + dificultad: 'facil' + }, + { + id: 2, + descripcion: 'Se anuncia que el café causa cáncer y la demanda disminuye drásticamente.', + respuesta: 'demanda-down', + curva: 'demanda', + direccion: 'abajo', + explicacion: 'Las preferencias de los consumidores cambian negativamente. La demanda disminuye (la curva se desplaza a la izquierda).', + dificultad: 'facil' + }, + { + id: 3, + descripcion: 'Una sequía severa destruye el 40% de la cosecha de trigo.', + respuesta: 'oferta-down', + curva: 'oferta', + direccion: 'abajo', + explicacion: 'La sequía reduce la cantidad disponible de trigo. La oferta disminuye (la curva se desplaza a la izquierda).', + dificultad: 'facil' + }, + { + id: 4, + descripcion: 'El ingreso promedio de la población aumenta un 15% (bien normal).', + respuesta: 'demanda-up', + curva: 'demanda', + direccion: 'arriba', + explicacion: 'Para bienes normales, al aumentar el ingreso, aumenta la demanda (la curva se desplaza a la derecha).', + dificultad: 'medio' + }, + { + id: 5, + descripcion: 'El precio del petróleo (insumo) sube un 30%.', + respuesta: 'oferta-down', + curva: 'oferta', + direccion: 'abajo', + explicacion: 'Al subir el costo de los insumos, producir es más caro. La oferta disminuye (la curva se desplaza a la izquierda).', + dificultad: 'medio' + }, + { + id: 6, + descripcion: 'El gobierno subsidia la compra de autos eléctricos con $5,000.', + respuesta: 'demanda-up', + curva: 'demanda', + direccion: 'arriba', + explicacion: 'El subsidio reduce el precio efectivo para consumidores. La demanda aumenta (la curva se desplaza a la derecha).', + dificultad: 'dificil' + } +]; + +interface Opcion { + value: DireccionShock; + label: string; + icon: React.ReactNode; + color: string; +} + +const opciones: Opcion[] = [ + { value: 'oferta-up', label: 'Oferta ↑', icon: , color: 'green' }, + { value: 'oferta-down', label: 'Oferta ↓', icon: , color: 'red' }, + { value: 'demanda-up', label: 'Demanda ↑', icon: , color: 'blue' }, + { value: 'demanda-down', label: 'Demanda ↓', icon: , color: 'orange' }, +]; + +export const IdentificarShocks: React.FC = ({ onComplete, ejercicioId: _ejercicioId }) => { + const [escenarioActual, setEscenarioActual] = useState(0); + const [respuestaSeleccionada, setRespuestaSeleccionada] = useState(null); + const [mostrarResultado, setMostrarResultado] = useState(false); + const [score, setScore] = useState(0); + const [respuestasCorrectas, setRespuestasCorrectas] = useState(0); + const [_startTime] = useState(Date.now()); + const [completado, setCompletado] = useState(false); + + const escenario = escenarios[escenarioActual]; + + const handleSeleccionar = (respuesta: DireccionShock) => { + if (mostrarResultado) return; + setRespuestaSeleccionada(respuesta); + }; + + const handleVerificar = () => { + if (!respuestaSeleccionada) return; + + const esCorrecta = respuestaSeleccionada === escenario.respuesta; + setMostrarResultado(true); + + if (esCorrecta) { + setScore(prev => prev + Math.round(100 / escenarios.length)); + setRespuestasCorrectas(prev => prev + 1); + } + }; + + const handleSiguiente = () => { + if (escenarioActual < escenarios.length - 1) { + setEscenarioActual(prev => prev + 1); + setRespuestaSeleccionada(null); + setMostrarResultado(false); + } else { + setCompletado(true); + if (onComplete) { + onComplete(score); + } + } + }; + + const handleReiniciar = () => { + setEscenarioActual(0); + setRespuestaSeleccionada(null); + setMostrarResultado(false); + setScore(0); + setRespuestasCorrectas(0); + setCompletado(false); + }; + + const getDificultadColor = (dificultad: string) => { + switch (dificultad) { + case 'facil': return 'bg-green-100 text-green-700'; + case 'medio': return 'bg-yellow-100 text-yellow-700'; + case 'dificil': return 'bg-red-100 text-red-700'; + default: return 'bg-gray-100 text-gray-700'; + } + }; + + const renderGraficoShock = () => { + const { curva, direccion } = escenario; + const isOferta = curva === 'oferta'; + const isUp = direccion === 'arriba'; + + return ( + + {/* Grid */} + {Array.from({ length: 6 }).map((_, i) => ( + + + + + ))} + + {/* Ejes */} + + + + {/* Curva original */} + {isOferta ? ( + + ) : ( + + )} + + {isOferta ? 'S₁' : 'D₁'} + + + {/* Curva desplazada */} + + {isOferta ? ( + + ) : ( + + )} + + {isOferta ? 'S₂' : 'D₂'} + + + + {/* Flecha de dirección */} + + + {/* Defs para flechas */} + + + + + + + + + + ); + }; + + if (completado) { + const porcentaje = Math.round((respuestasCorrectas / escenarios.length) * 100); + + return ( + + +

¡Ejercicio Completado!

+

Has identificado shocks del mercado

+ +
+
{porcentaje}%
+

+ {respuestasCorrectas} de {escenarios.length} respuestas correctas +

+
+ + +
+ ); + } + + return ( +
+
+
+
+ +

Identificar Shocks del Mercado

+
+
+ + {escenario.dificultad.toUpperCase()} + + + {escenarioActual + 1} de {escenarios.length} + +
+ +
+
+
+

+ Lee cada escenario e identifica qué curva se desplaza y en qué dirección. +

+
+ +
+
+
+
+ +
+

Escenario {escenario.id}

+

{escenario.descripcion}

+
+
+
+ +
+ {opciones.map((opcion) => { + const isSelected = respuestaSeleccionada === opcion.value; + const isCorrect = mostrarResultado && opcion.value === escenario.respuesta; + const isWrong = mostrarResultado && isSelected && opcion.value !== escenario.respuesta; + + let buttonClass = 'p-4 rounded-lg border-2 transition-all flex flex-col items-center gap-2 '; + + if (isCorrect) { + buttonClass += 'border-green-500 bg-green-50'; + } else if (isWrong) { + buttonClass += 'border-red-500 bg-red-50'; + } else if (isSelected) { + buttonClass += `border-${opcion.color}-500 bg-${opcion.color}-50`; + } else { + buttonClass += 'border-gray-200 hover:border-gray-300 hover:bg-gray-50'; + } + + return ( + handleSeleccionar(opcion.value)} + disabled={mostrarResultado} + whileHover={!mostrarResultado ? { scale: 1.02 } : {}} + whileTap={!mostrarResultado ? { scale: 0.98 } : {}} + className={buttonClass} + > + {opcion.icon} + + {opcion.label} + + {isCorrect && } + {isWrong && } + + ); + })} +
+ + + {mostrarResultado && ( + +
+ {respuestaSeleccionada === escenario.respuesta ? ( + + ) : ( + + )} +
+

+ {respuestaSeleccionada === escenario.respuesta ? '¡Correcto!' : 'Incorrecto'} +

+

{escenario.explicacion}

+
+
+
+ )} +
+ +
+ {!mostrarResultado ? ( + + ) : ( + + )} +
+
+ +
+

Visualización del Shock

+ {renderGraficoShock()} + +
+

Leyenda:

+
+
+
+ Curva de Demanda (D) +
+
+
+ Curva de Oferta (S) +
+
+
+ Curva después del shock +
+
+
+ +
+

+ Tip: Recuerda que: +

+
    +
  • • Factores de oferta: tecnología, insumos, número de vendedores
  • +
  • • Factores de demanda: ingreso, preferencias, precios relacionados
  • +
+
+
+
+ +
+ + +
+ {escenarios.map((_, index) => ( +
+ ))} +
+ + +
+
+ ); +}; + +export default IdentificarShocks; diff --git a/frontend/src/components/exercises/modulo2/SimuladorPrecios.tsx b/frontend/src/components/exercises/modulo2/SimuladorPrecios.tsx new file mode 100644 index 0000000..9c81994 --- /dev/null +++ b/frontend/src/components/exercises/modulo2/SimuladorPrecios.tsx @@ -0,0 +1,454 @@ +import React, { useState, useMemo, useEffect } from 'react'; +import { motion, AnimatePresence } from 'framer-motion'; +import { TrendingUp, TrendingDown, AlertTriangle, Calculator, RotateCcw, Info } from 'lucide-react'; + +interface SimuladorPreciosProps { + ejercicioId: string; + onComplete?: (puntuacion: number) => void; +} + +interface CurvaParams { + pendienteDemanda: number; + interceptoDemanda: number; + pendienteOferta: number; + interceptoOferta: number; +} + +const DEFAULT_PARAMS: CurvaParams = { + pendienteDemanda: -1.5, + interceptoDemanda: 90, + pendienteOferta: 1.2, + interceptoOferta: 10 +}; + +const calcularEquilibrio = (params: CurvaParams) => { + const { pendienteDemanda, interceptoDemanda, pendienteOferta, interceptoOferta } = params; + // Pd = Po => a + b*Q = c + d*Q + const Q = (interceptoOferta - interceptoDemanda) / (pendienteDemanda - pendienteOferta); + const P = interceptoDemanda + pendienteDemanda * Q; + return { Q: Math.max(0, Q), P: Math.max(0, P) }; +}; + +const calcularCantidadEnPrecio = (precio: number, params: CurvaParams) => { + // P = a + b*Q => Q = (P - a) / b + const Qd = (precio - params.interceptoDemanda) / params.pendienteDemanda; + const Qo = (precio - params.interceptoOferta) / params.pendienteOferta; + return { Qd: Math.max(0, Qd), Qo: Math.max(0, Qo) }; +}; + +export const SimuladorPrecios: React.FC = ({ onComplete, ejercicioId: _ejercicioId }) => { + const [params, _setParams] = useState(DEFAULT_PARAMS); + const [precioMaximo, setPrecioMaximo] = useState(null); + const [precioMinimo, setPrecioMinimo] = useState(null); + const [showInfo, setShowInfo] = useState(true); + const [startTime] = useState(Date.now()); + const [hasInteracted, setHasInteracted] = useState(false); + + const equilibrio = useMemo(() => calcularEquilibrio(params), [params]); + + const analisis = useMemo(() => { + if (precioMaximo !== null && precioMaximo < equilibrio.P) { + const { Qd, Qo } = calcularCantidadEnPrecio(precioMaximo, params); + const excesoDemanda = Qd - Qo; + const cantidadTransada = Qo; + + // Pérdida de peso muerto: área del triángulo + const base = equilibrio.Q - cantidadTransada; + const altura = precioMaximo - (params.interceptoOferta + params.pendienteOferta * cantidadTransada); + const deadweightLoss = 0.5 * base * altura; + + return { + tipo: 'precio-maximo' as const, + excesoDemanda: Math.max(0, excesoDemanda), + excesoOferta: 0, + cantidadTransada, + deadweightLoss: Math.max(0, deadweightLoss), + mensaje: 'Precio máximo crea escasez (exceso de demanda)' + }; + } + + if (precioMinimo !== null && precioMinimo > equilibrio.P) { + const { Qd, Qo } = calcularCantidadEnPrecio(precioMinimo, params); + const excesoOferta = Qo - Qd; + const cantidadTransada = Qd; + + const base = equilibrio.Q - cantidadTransada; + const altura = (params.interceptoDemanda + params.pendienteDemanda * cantidadTransada) - precioMinimo; + const deadweightLoss = 0.5 * base * altura; + + return { + tipo: 'precio-minimo' as const, + excesoDemanda: 0, + excesoOferta: Math.max(0, excesoOferta), + cantidadTransada, + deadweightLoss: Math.max(0, deadweightLoss), + mensaje: 'Precio mínimo crea superávit (exceso de oferta)' + }; + } + + return { + tipo: 'equilibrio' as const, + excesoDemanda: 0, + excesoOferta: 0, + cantidadTransada: equilibrio.Q, + deadweightLoss: 0, + mensaje: 'Mercado en equilibrio' + }; + }, [precioMaximo, precioMinimo, equilibrio, params]); + + useEffect(() => { + if (hasInteracted && (precioMaximo !== null || precioMinimo !== null)) { + const timer = setTimeout(() => { + if (onComplete) { + onComplete(100); + } + }, 5000); + return () => clearTimeout(timer); + } + }, [hasInteracted, precioMaximo, precioMinimo, startTime, onComplete]); + + const reset = () => { + setPrecioMaximo(null); + setPrecioMinimo(null); + setHasInteracted(false); + }; + + // Generar puntos para las curvas + const generateCurvePoints = () => { + const points = []; + for (let Q = 0; Q <= 60; Q += 2) { + const Pd = params.interceptoDemanda + params.pendienteDemanda * Q; + const Po = params.interceptoOferta + params.pendienteOferta * Q; + points.push({ Q, Pd: Math.max(0, Pd), Po: Math.max(0, Po) }); + } + return points; + }; + + const curvePoints = generateCurvePoints(); + + // Escalar para SVG + const scaleX = (Q: number) => 50 + (Q / 60) * 400; + const scaleY = (P: number) => 350 - (P / 100) * 300; + + const demandaPath = curvePoints.map((p, i) => + `${i === 0 ? 'M' : 'L'} ${scaleX(p.Q)} ${scaleY(p.Pd)}` + ).join(' '); + + const ofertaPath = curvePoints.map((p, i) => + `${i === 0 ? 'M' : 'L'} ${scaleX(p.Q)} ${scaleY(p.Po)}` + ).join(' '); + + return ( +
+
+

+ + Simulador de Precios Intervenidos +

+

+ Experimenta con precios máximos y mínimos para ver cómo afectan el equilibrio de mercado. +

+
+ + {showInfo && ( + + +
+

Cómo usar:

+
    +
  • • Ajusta los sliders para establecer un precio máximo o mínimo
  • +
  • • Observa cómo cambian las cantidades demandadas y ofrecidas
  • +
  • • Identifica escasez (exceso de demanda) o superávit (exceso de oferta)
  • +
  • • La pérdida de peso muerto representa la ineficiencia creada
  • +
+
+ +
+ )} + +
+
+
+

Gráfico de Mercado

+ +
+ + + {/* Grid */} + {Array.from({ length: 11 }).map((_, i) => ( + + + + + ))} + + {/* Ejes */} + + + + {/* Labels */} + Cantidad + Precio + + {/* Curva de Demanda */} + + D + + {/* Curva de Oferta */} + + S + + {/* Punto de equilibrio */} + + + E + + + {/* Línea de precio máximo */} + {precioMaximo !== null && ( + + + Pmáx + + {/* Zona de escasez */} + {analisis.excesoDemanda > 0 && ( + + )} + + )} + + {/* Línea de precio mínimo */} + {precioMinimo !== null && ( + + + Pmín + + )} + + {/* Indicador de pérdida de peso muerto */} + {analisis.deadweightLoss > 0 && ( + + Pérdida de peso muerto + + )} + +
+ +
+
+

Controles de Precio

+ +
+
+ + { + setPrecioMaximo(Number(e.target.value) || null); + setPrecioMinimo(null); + setHasInteracted(true); + }} + className="w-full accent-red-500" + /> +
+ $0 + + {precioMaximo !== null ? `$${precioMaximo}` : 'Desactivado'} + + ${Math.round(equilibrio.P)} +
+
+ +
+ + { + setPrecioMinimo(Number(e.target.value) || null); + setPrecioMaximo(null); + setHasInteracted(true); + }} + className="w-full accent-amber-500" + /> +
+ ${Math.round(equilibrio.P)} + + {precioMinimo !== null ? `$${precioMinimo}` : 'Desactivado'} + + $100 +
+
+
+
+ + + +
+ {analisis.tipo === 'equilibrio' ? ( + + ) : analisis.tipo === 'precio-maximo' ? ( + + ) : ( + + )} +

+ {analisis.mensaje} +

+
+ +
+
+ Precio de equilibrio: +

${equilibrio.P.toFixed(1)}

+
+
+ Cantidad de equilibrio: +

{equilibrio.Q.toFixed(1)} unidades

+
+ {precioMaximo !== null && ( +
+ Precio máximo: +

${precioMaximo}

+
+ )} + {precioMinimo !== null && ( +
+ Precio mínimo: +

${precioMinimo}

+
+ )} + {analisis.excesoDemanda > 0 && ( +
+ Exceso de demanda (escasez): +

{analisis.excesoDemanda.toFixed(1)} unidades

+
+ )} + {analisis.excesoOferta > 0 && ( +
+ Exceso de oferta (superávit): +

{analisis.excesoOferta.toFixed(1)} unidades

+
+ )} + {analisis.deadweightLoss > 0 && ( +
+ Pérdida de peso muerto: +

${analisis.deadweightLoss.toFixed(1)}

+
+ )} +
+
+
+ +
+

Resultado

+

+ Cantidad transada: {analisis.cantidadTransada.toFixed(1)} unidades +

+

+ {analisis.tipo === 'precio-maximo' + ? 'Con precio máximo, los vendedores quieren vender menos cantidad.' + : analisis.tipo === 'precio-minimo' + ? 'Con precio mínimo, los compradores quieren comprar menos cantidad.' + : 'En equilibrio, la cantidad demandada = cantidad ofrecida.'} +

+
+
+
+
+ ); +}; + +export default SimuladorPrecios; diff --git a/frontend/src/components/exercises/modulo2/index.ts b/frontend/src/components/exercises/modulo2/index.ts new file mode 100644 index 0000000..76cf17d --- /dev/null +++ b/frontend/src/components/exercises/modulo2/index.ts @@ -0,0 +1,3 @@ +export { ConstructorCurvas } from './ConstructorCurvas'; +export { SimuladorPrecios } from './SimuladorPrecios'; +export { IdentificarShocks } from './IdentificarShocks'; diff --git a/frontend/src/components/exercises/modulo3/CalculadoraElasticidad.tsx b/frontend/src/components/exercises/modulo3/CalculadoraElasticidad.tsx new file mode 100644 index 0000000..31449f0 --- /dev/null +++ b/frontend/src/components/exercises/modulo3/CalculadoraElasticidad.tsx @@ -0,0 +1,266 @@ +import { useState, useEffect, useCallback } from 'react'; +import { Button } from '../../ui/Button'; +import { Input } from '../../ui/Input'; +import { Card, CardHeader } from '../../ui/Card'; + +type ElasticidadTipo = 'precio' | 'ingreso' | 'cruzada'; + +interface CalculadoraElasticidadProps { + ejercicioId: string; + onComplete?: (puntuacion: number) => void; +} + +export function CalculadoraElasticidad({ ejercicioId: _ejercicioId, onComplete }: CalculadoraElasticidadProps) { + const [tipo, setTipo] = useState('precio'); + const [p1, setP1] = useState(''); + const [p2, setP2] = useState(''); + const [q1, setQ1] = useState(''); + const [q2, setQ2] = useState(''); + const [error, setError] = useState(''); + + const [resultado, setResultado] = useState<{ + deltaQ: number; + deltaP: number; + qPromedio: number; + pPromedio: number; + porcentajeQ: number; + porcentajeP: number; + elasticidad: number; + interpretacion: string; + } | null>(null); + + const calcular = useCallback(() => { + const numP1 = parseFloat(p1); + const numP2 = parseFloat(p2); + const numQ1 = parseFloat(q1); + const numQ2 = parseFloat(q2); + + if (isNaN(numP1) || isNaN(numP2) || isNaN(numQ1) || isNaN(numQ2)) { + setError('Todos los valores deben ser numéricos'); + setResultado(null); + return; + } + + if (numP1 === numP2 && tipo === 'precio') { + setError('P1 y P2 no pueden ser iguales para calcular elasticidad'); + setResultado(null); + return; + } + + setError(''); + + // Método del punto medio + const deltaQ = numQ2 - numQ1; + const deltaP = numP2 - numP1; + const qPromedio = (numQ1 + numQ2) / 2; + const pPromedio = (numP1 + numP2) / 2; + + const porcentajeQ = (deltaQ / qPromedio) * 100; + const porcentajeP = (deltaP / pPromedio) * 100; + const elasticidad = porcentajeQ / porcentajeP; + + let interpretacion = ''; + const absE = Math.abs(elasticidad); + + if (tipo === 'precio') { + if (absE > 1) interpretacion = 'Demanda ELÁSTICA: |E| > 1. El consumo responde más que proporcionalmente al cambio de precio.'; + else if (absE < 1) interpretacion = 'Demanda INELÁSTICA: |E| < 1. El consumo responde menos que proporcionalmente al cambio de precio.'; + else interpretacion = 'Demanda UNITARIA: |E| = 1. El consumo responde exactamente proporcional al cambio de precio.'; + } else if (tipo === 'ingreso') { + if (elasticidad > 1) interpretacion = 'Bien de LUJO: Ei > 1. El gasto en el bien aumenta más que proporcionalmente al ingreso.'; + else if (elasticidad > 0 && elasticidad < 1) interpretacion = 'Bien NECESARIO: 0 < Ei < 1. El gasto aumenta menos que proporcionalmente al ingreso.'; + else if (elasticidad < 0) interpretacion = 'Bien INFERIOR: Ei < 0. El consumo disminuye cuando aumenta el ingreso.'; + else interpretacion = 'Bien NEUTRO: Ei = 0. El consumo no cambia con el ingreso.'; + } else { + if (elasticidad > 0) interpretacion = 'BIENES SUSTITUTOS: Ecr > 0. El aumento del precio de Y aumenta la demanda de X.'; + else if (elasticidad < 0) interpretacion = 'BIENES COMPLEMENTARIOS: Ecr < 0. El aumento del precio de Y disminuye la demanda de X.'; + else interpretacion = 'BIENES INDEPENDIENTES: Ecr = 0. No existe relación entre los bienes.'; + } + + setResultado({ + deltaQ, + deltaP, + qPromedio, + pPromedio, + porcentajeQ, + porcentajeP, + elasticidad, + interpretacion + }); + + if (onComplete) { + onComplete(100); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [p1, p2, q1, q2, tipo]); + + useEffect(() => { + if (p1 && p2 && q1 && q2) { + calcular(); + } + }, [p1, p2, q1, q2, tipo, calcular]); + + const getLabelPrecio = () => { + if (tipo === 'cruzada') return 'P1/Py1 (Precio del otro bien)'; + return 'P1 (Precio inicial)'; + }; + + const getLabelCantidad = () => { + if (tipo === 'ingreso') return 'Q1 (Cantidad con ingreso I1)'; + return 'Q1 (Cantidad inicial)'; + }; + + const tipoLabels: Record = { + precio: 'Elasticidad Precio de la Demanda', + ingreso: 'Elasticidad Ingreso', + cruzada: 'Elasticidad Cruzada' + }; + + return ( + + + +
+
+ {(['precio', 'ingreso', 'cruzada'] as ElasticidadTipo[]).map((t) => ( + + ))} +
+ +
+

{tipoLabels[tipo]}

+

+ {tipo === 'precio' && 'Mide la sensibilidad de la cantidad demandada ante cambios en el precio del propio bien'} + {tipo === 'ingreso' && 'Mide la sensibilidad de la cantidad demandada ante cambios en el ingreso del consumidor'} + {tipo === 'cruzada' && 'Mide la sensibilidad de la cantidad demandada de X ante cambios en el precio de Y'} +

+
+ +
+ setQ1(e.target.value)} + placeholder="Ej: 100" + /> + setQ2(e.target.value)} + placeholder="Ej: 80" + /> + setP1(e.target.value)} + placeholder="Ej: 10" + /> + setP2(e.target.value)} + placeholder="Ej: 12" + /> +
+ + {error && ( +

{error}

+ )} + + {resultado && ( +
+
+

Desarrollo paso a paso:

+ +
+
+

Paso 1: Calcular cambios

+

+ ΔQ = Q2 - Q1 = {q2} - {q1} = {resultado.deltaQ.toFixed(2)} +

+

+ ΔP = P2 - P1 = {p2} - {p1} = {resultado.deltaP.toFixed(2)} +

+
+ +
+

Paso 2: Calcular promedios

+

+ Q̄ = (Q1 + Q2) / 2 = ({q1} + {q2}) / 2 = {resultado.qPromedio.toFixed(2)} +

+

+ P̄ = (P1 + P2) / 2 = ({p1} + {p2}) / 2 = {resultado.pPromedio.toFixed(2)} +

+
+ +
+

Paso 3: Calcular variaciones porcentuales

+

+ %ΔQ = (ΔQ / Q̄) × 100 = ({resultado.deltaQ.toFixed(2)} / {resultado.qPromedio.toFixed(2)}) × 100 = {resultado.porcentajeQ.toFixed(2)}% +

+

+ %ΔP = (ΔP / P̄) × 100 = ({resultado.deltaP.toFixed(2)} / {resultado.pPromedio.toFixed(2)}) × 100 = {resultado.porcentajeP.toFixed(2)}% +

+
+ +
+

Paso 4: Calcular elasticidad

+

+ E = %ΔQ / %ΔP = {resultado.porcentajeQ.toFixed(2)} / {resultado.porcentajeP.toFixed(2)} = {resultado.elasticidad.toFixed(4)} +

+
+
+
+ +
1 + ? 'bg-green-100 border border-green-300' + : Math.abs(resultado.elasticidad) < 1 + ? 'bg-orange-100 border border-orange-300' + : 'bg-blue-100 border border-blue-300') + : tipo === 'ingreso' + ? (resultado.elasticidad > 1 + ? 'bg-purple-100 border border-purple-300' + : resultado.elasticidad > 0 + ? 'bg-yellow-100 border border-yellow-300' + : 'bg-red-100 border border-red-300') + : (resultado.elasticidad > 0 + ? 'bg-green-100 border border-green-300' + : 'bg-red-100 border border-red-300') + }`}> +

Interpretación:

+

{resultado.interpretacion}

+ {tipo === 'precio' && Math.abs(resultado.elasticidad) > 1 && ( +

+ El ingreso total aumentará si se reduce el precio (efecto cantidad domina). +

+ )} + {tipo === 'precio' && Math.abs(resultado.elasticidad) < 1 && ( +

+ El ingreso total aumentará si se aumenta el precio (efecto precio domina). +

+ )} +
+
+ )} +
+
+ ); +} + +export default CalculadoraElasticidad; diff --git a/frontend/src/components/exercises/modulo3/ClasificadorBienes.tsx b/frontend/src/components/exercises/modulo3/ClasificadorBienes.tsx new file mode 100644 index 0000000..dbd9c88 --- /dev/null +++ b/frontend/src/components/exercises/modulo3/ClasificadorBienes.tsx @@ -0,0 +1,228 @@ +import { useState } from 'react'; +import { Button } from '../../ui/Button'; +import { Card, CardHeader } from '../../ui/Card'; + +interface Bien { + id: string; + nombre: string; + descripcion: string; + elasticidad: number; + categoriaCorrecta: Categoria; +} + +type Categoria = 'lujo' | 'necesario' | 'inferior'; + +interface ClasificadorBienesProps { + ejercicioId: string; + onComplete?: (puntuacion: number) => void; +} + +const bienes: Bien[] = [ + { id: '1', nombre: 'Caviar', descripcion: 'Alimento de lujo', elasticidad: 3.5, categoriaCorrecta: 'lujo' }, + { id: '2', nombre: 'Arroz', descripcion: 'Grano básico de consumo', elasticidad: 0.3, categoriaCorrecta: 'necesario' }, + { id: '3', nombre: 'Viajes en primera clase', descripcion: 'Transporte de lujo', elasticidad: 2.8, categoriaCorrecta: 'lujo' }, + { id: '4', nombre: 'Pasta de dientes', descripcion: 'Higiene personal básica', elasticidad: 0.15, categoriaCorrecta: 'necesario' }, + { id: '5', nombre: 'Autobuses', descripcion: 'Transporte público urbano', elasticidad: -0.5, categoriaCorrecta: 'inferior' }, + { id: '6', nombre: 'Frijoles', descripcion: 'Proteína básica', elasticidad: 0.4, categoriaCorrecta: 'necesario' }, + { id: '7', nombre: 'Yates privados', descripcion: 'Embarcaciones recreativas', elasticidad: 4.2, categoriaCorrecta: 'lujo' }, + { id: '8', nombre: 'Pan de bagazo', descripcion: 'Pan económico de baja calidad', elasticidad: -0.8, categoriaCorrecta: 'inferior' }, + { id: '9', nombre: 'Sal', descripcion: 'Condimento esencial', elasticidad: 0.05, categoriaCorrecta: 'necesario' }, + { id: '10', nombre: 'Joyería fina', descripcion: 'Accesorios de oro/plata', elasticidad: 2.2, categoriaCorrecta: 'lujo' }, + { id: '11', nombre: 'Comida rápida barata', descripcion: 'Hamburguesas de bajo costo', elasticidad: -0.3, categoriaCorrecta: 'inferior' }, + { id: '12', nombre: 'Medicinas genéricas', descripcion: 'Productos farmacéuticos básicos', elasticidad: 0.2, categoriaCorrecta: 'necesario' } +]; + +const categorias: { id: Categoria; nombre: string; descripcion: string; rango: string; color: string }[] = [ + { + id: 'lujo', + nombre: 'Bienes de Lujo', + descripcion: 'El gasto aumenta más que proporcionalmente al ingreso', + rango: 'Ei > 1', + color: 'bg-purple-100 border-purple-300 text-purple-800' + }, + { + id: 'necesario', + nombre: 'Bienes Necesarios', + descripcion: 'El gasto aumenta menos que proporcionalmente al ingreso', + rango: '0 < Ei < 1', + color: 'bg-blue-100 border-blue-300 text-blue-800' + }, + { + id: 'inferior', + nombre: 'Bienes Inferiores', + descripcion: 'El consumo disminuye cuando aumenta el ingreso', + rango: 'Ei < 0', + color: 'bg-red-100 border-red-300 text-red-800' + } +]; + +export function ClasificadorBienes({ ejercicioId: _ejercicioId, onComplete }: ClasificadorBienesProps) { + const [clasificaciones, setClasificaciones] = useState>({}); + const [mostrarResultados, setMostrarResultados] = useState(false); + const [bienesActuales] = useState(() => + [...bienes].sort(() => Math.random() - 0.5).slice(0, 8) + ); + + const seleccionarCategoria = (bienId: string, categoria: Categoria) => { + setClasificaciones(prev => ({ + ...prev, + [bienId]: categoria + })); + }; + + const verificarResultados = () => { + setMostrarResultados(true); + + const correctas = bienesActuales.filter( + bien => clasificaciones[bien.id] === bien.categoriaCorrecta + ).length; + + const score = Math.round((correctas / bienesActuales.length) * 100); + + if (onComplete) { + onComplete(score); + } + + return score; + }; + + const reiniciar = () => { + setClasificaciones({}); + setMostrarResultados(false); + }; + + const getEstadoBien = (bien: Bien) => { + if (!mostrarResultados || !clasificaciones[bien.id]) { + return 'bg-white border-gray-200'; + } + + const esCorrecto = clasificaciones[bien.id] === bien.categoriaCorrecta; + return esCorrecto + ? 'bg-green-50 border-green-400' + : 'bg-red-50 border-red-400'; + }; + + const getIconoEstado = (bien: Bien) => { + if (!mostrarResultados || !clasificaciones[bien.id]) return null; + + const esCorrecto = clasificaciones[bien.id] === bien.categoriaCorrecta; + return esCorrecto ? ( + + ) : ( + + ); + }; + + const puntuacion = mostrarResultados + ? bienesActuales.filter(bien => clasificaciones[bien.id] === bien.categoriaCorrecta).length + : 0; + + return ( + + + +
+
+ {categorias.map((cat) => ( +
+

{cat.nombre}

+

{cat.rango}

+

{cat.descripcion}

+
+ ))} +
+ +
+ {bienesActuales.map((bien) => ( +
+
+
+
+

{bien.nombre}

+ {getIconoEstado(bien)} +
+

{bien.descripcion}

+ {mostrarResultados && ( +

+ Ei = {bien.elasticidad} → {categorias.find(c => c.id === bien.categoriaCorrecta)?.nombre} +

+ )} +
+ +
+ {categorias.map((cat) => ( + + ))} +
+
+
+ ))} +
+ +
+
+ Progreso: {Object.keys(clasificaciones).length} / {bienesActuales.length} +
+ + {!mostrarResultados ? ( + + ) : ( +
+
+

Puntuación

+

+ {puntuacion} / {bienesActuales.length} +

+
+ +
+ )} +
+ + {mostrarResultados && ( +
= bienesActuales.length / 2 + ? 'bg-yellow-100 border border-yellow-300' + : 'bg-red-100 border border-red-300' + }`}> +

+ {puntuacion === bienesActuales.length + ? '¡Perfecto! Has clasificado todos los bienes correctamente.' + : puntuacion >= bienesActuales.length / 2 + ? '¡Buen trabajo! Sigue practicando para mejorar.' + : 'Necesitas más práctica. Revisa las categorías y vuelve a intentar.'} +

+
+ )} +
+
+ ); +} + +export default ClasificadorBienes; diff --git a/frontend/src/components/exercises/modulo3/EjerciciosExamen.tsx b/frontend/src/components/exercises/modulo3/EjerciciosExamen.tsx new file mode 100644 index 0000000..42130f8 --- /dev/null +++ b/frontend/src/components/exercises/modulo3/EjerciciosExamen.tsx @@ -0,0 +1,404 @@ +import { useState } from 'react'; +import { Button } from '../../ui/Button'; +import { Input } from '../../ui/Input'; +import { Card, CardHeader } from '../../ui/Card'; + +interface Problema { + id: number; + titulo: string; + descripcion: string; + datos: { etiqueta: string; valor: string }[]; + preguntas: { + id: string; + texto: string; + tipo: 'numero' | 'seleccion'; + opciones?: string[]; + respuestaCorrecta: number | string; + tolerancia?: number; + solucion: string[]; + }[]; +} + +const problemas: Problema[] = [ + { + id: 1, + titulo: "Elasticidad Precio de la Demanda", + descripcion: "Una tienda de electrónica observa que cuando el precio de un modelo de laptop aumenta de $800 a $900, la cantidad demandada disminuye de 500 a 400 unidades por mes.", + datos: [ + { etiqueta: "P1", valor: "$800" }, + { etiqueta: "P2", valor: "$900" }, + { etiqueta: "Q1", valor: "500 unidades" }, + { etiqueta: "Q2", valor: "400 unidades" } + ], + preguntas: [ + { + id: "p1_a", + texto: "Calcule la elasticidad precio de la demanda usando el método del punto medio.", + tipo: "numero", + respuestaCorrecta: -1.89, + tolerancia: 0.05, + solucion: [ + "Paso 1: ΔQ = 400 - 500 = -100", + "Paso 2: ΔP = 900 - 800 = 100", + "Paso 3: Q̄ = (500 + 400) / 2 = 450", + "Paso 4: P̄ = (800 + 900) / 2 = 850", + "Paso 5: %ΔQ = (-100 / 450) × 100 = -22.22%", + "Paso 6: %ΔP = (100 / 850) × 100 = 11.76%", + "Paso 7: Ed = -22.22% / 11.76% = -1.89" + ] + }, + { + id: "p1_b", + texto: "¿Qué tipo de demanda presenta este producto?", + tipo: "seleccion", + opciones: [ + "Elástica (|Ed| > 1)", + "Inelástica (|Ed| < 1)", + "Unitaria (|Ed| = 1)" + ], + respuestaCorrecta: "Elástica (|Ed| > 1)", + solucion: [ + "Como |Ed| = 1.89 > 1, la demanda es ELÁSTICA.", + "Esto significa que los consumidores son sensibles al cambio de precio.", + "Un aumento de precio del 1% reduce la cantidad demandada en aproximadamente 1.89%" + ] + } + ] + }, + { + id: 2, + titulo: "Elasticidad Ingreso", + descripcion: "En una economía, cuando el ingreso promedio de los hogares aumenta de $2,000 a $2,500 mensuales, el consumo de restaurantes de alta categoría aumenta de 2 a 4 visitas mensuales por hogar.", + datos: [ + { etiqueta: "I1", valor: "$2,000" }, + { etiqueta: "I2", valor: "$2,500" }, + { etiqueta: "Q1", valor: "2 visitas" }, + { etiqueta: "Q2", valor: "4 visitas" } + ], + preguntas: [ + { + id: "p2_a", + texto: "Calcule la elasticidad ingreso.", + tipo: "numero", + respuestaCorrecta: 2.33, + tolerancia: 0.05, + solucion: [ + "Paso 1: ΔQ = 4 - 2 = 2", + "Paso 2: ΔI = 2500 - 2000 = 500", + "Paso 3: Q̄ = (2 + 4) / 2 = 3", + "Paso 4: Ī = (2000 + 2500) / 2 = 2250", + "Paso 5: %ΔQ = (2 / 3) × 100 = 66.67%", + "Paso 6: %ΔI = (500 / 2250) × 100 = 22.22%", + "Paso 7: Ei = 66.67% / 22.22% = 3.00" + ] + }, + { + id: "p2_b", + texto: "¿Qué tipo de bien representa los restaurantes de alta categoría?", + tipo: "seleccion", + opciones: [ + "Bien necesario (0 < Ei < 1)", + "Bien de lujo (Ei > 1)", + "Bien inferior (Ei < 0)" + ], + respuestaCorrecta: "Bien de lujo (Ei > 1)", + solucion: [ + "Como Ei = 3.00 > 1, se trata de un BIEN DE LUJO.", + "El gasto en este bien aumenta más que proporcionalmente al ingreso.", + "Cuando el ingreso crece 10%, el consumo de restaurantes crece 30%" + ] + } + ] + }, + { + id: 3, + titulo: "Elasticidad Cruzada", + descripcion: "Cuando el precio del café aumenta de $4 a $6 por libra, la cantidad demandada de té aumenta de 100 a 150 libras mensuales en el mismo mercado.", + datos: [ + { etiqueta: "Pcafé1", valor: "$4/libra" }, + { etiqueta: "Pcafé2", valor: "$6/libra" }, + { etiqueta: "Qté1", valor: "100 libras" }, + { etiqueta: "Qté2", valor: "150 libras" } + ], + preguntas: [ + { + id: "p3_a", + texto: "Calcule la elasticidad cruzada entre café y té.", + tipo: "numero", + respuestaCorrecta: 1.0, + tolerancia: 0.05, + solucion: [ + "Paso 1: ΔQté = 150 - 100 = 50", + "Paso 2: ΔPcafé = 6 - 4 = 2", + "Paso 3: Qté̄ = (100 + 150) / 2 = 125", + "Paso 4: Pcafé̄ = (4 + 6) / 2 = 5", + "Paso 5: %ΔQté = (50 / 125) × 100 = 40%", + "Paso 6: %ΔPcafé = (2 / 5) × 100 = 40%", + "Paso 7: Ecr = 40% / 40% = 1.0" + ] + }, + { + id: "p3_b", + texto: "¿Qué relación existe entre café y té?", + tipo: "seleccion", + opciones: [ + "Son bienes sustitutos (Ecr > 0)", + "Son bienes complementarios (Ecr < 0)", + "Son bienes independientes (Ecr = 0)" + ], + respuestaCorrecta: "Son bienes sustitutos (Ecr > 0)", + solucion: [ + "Como Ecr = 1.0 > 0, café y té son BIENES SUSTITUTOS.", + "Cuando sube el precio del café, los consumidores compran más té.", + "Los consumidores pueden sustituir uno por otro según los precios" + ] + } + ] + } +]; + +interface Respuesta { + valor: string; + esCorrecta: boolean | null; +} + +interface EjerciciosExamenProps { + ejercicioId: string; + onComplete?: (puntuacion: number) => void; +} + +export function EjerciciosExamen({ ejercicioId: _ejercicioId, onComplete }: EjerciciosExamenProps) { + const [respuestas, setRespuestas] = useState>({}); + const [mostrarSolucion, setMostrarSolucion] = useState>({}); + const [problemaActual, setProblemaActual] = useState(0); + + const handleRespuesta = (preguntaId: string, valor: string) => { + setRespuestas(prev => ({ + ...prev, + [preguntaId]: { valor, esCorrecta: null } + })); + }; + + const verificarRespuesta = (pregunta: Problema['preguntas'][0]) => { + const respuesta = respuestas[pregunta.id]; + if (!respuesta) return; + + let esCorrecta = false; + + if (pregunta.tipo === 'numero') { + const valorNum = parseFloat(respuesta.valor); + const tolerancia = pregunta.tolerancia || 0.05; + esCorrecta = Math.abs(valorNum - (pregunta.respuestaCorrecta as number)) <= tolerancia; + } else { + esCorrecta = respuesta.valor === pregunta.respuestaCorrecta; + } + + setRespuestas(prev => ({ + ...prev, + [pregunta.id]: { ...respuesta, esCorrecta } + })); + }; + + const toggleSolucion = (problemaId: number) => { + setMostrarSolucion(prev => ({ + ...prev, + [problemaId]: !prev[problemaId] + })); + }; + + const calcularPuntuacion = () => { + let correctas = 0; + let total = 0; + + problemas.forEach(problema => { + problema.preguntas.forEach(pregunta => { + total++; + if (respuestas[pregunta.id]?.esCorrecta) { + correctas++; + } + }); + }); + + return Math.round((correctas / total) * 100); + }; + + const finalizarExamen = () => { + const score = calcularPuntuacion(); + if (onComplete) { + onComplete(score); + } + return score; + }; + + const problema = problemas[problemaActual]; + const progreso = ((problemaActual + 1) / problemas.length) * 100; + + return ( + + + +
+
+
+
+
+ +
+
+

{problema.titulo}

+

{problema.descripcion}

+ +
+ {problema.datos.map((dato, idx) => ( +
+ {dato.etiqueta} +

{dato.valor}

+
+ ))} +
+
+ +
+ {problema.preguntas.map((pregunta, idx) => { + const respuesta = respuestas[pregunta.id]; + const estado = respuesta?.esCorrecta; + + return ( +
+
+ + {idx + 1} + +

{pregunta.texto}

+
+ +
+ {pregunta.tipo === 'numero' ? ( +
+ handleRespuesta(pregunta.id, e.target.value)} + className="w-48" + placeholder="Respuesta numérica" + /> + +
+ ) : ( +
+ {pregunta.opciones?.map((opcion) => ( + + ))} + +
+ )} + + {estado !== null && ( +
+ {estado ? '¡Correcto!' : 'Incorrecto. Intenta de nuevo.'} +
+ )} + + + + {mostrarSolucion[parseInt(pregunta.id.split('_')[0])] && ( +
+

Solución paso a paso:

+
    + {pregunta.solucion.map((paso, i) => ( +
  • {paso}
  • + ))} +
+
+ )} +
+
+ ); + })} +
+ +
+ + + {problemaActual < problemas.length - 1 ? ( + + ) : ( + + )} +
+ + {problemaActual === problemas.length - 1 && ( +
+

Puntuación actual: {calcularPuntuacion()}%

+
+ )} +
+ + ); +} + +export default EjerciciosExamen; diff --git a/frontend/src/components/exercises/modulo3/index.ts b/frontend/src/components/exercises/modulo3/index.ts new file mode 100644 index 0000000..5a5ca7b --- /dev/null +++ b/frontend/src/components/exercises/modulo3/index.ts @@ -0,0 +1,3 @@ +export { CalculadoraElasticidad } from './CalculadoraElasticidad'; +export { ClasificadorBienes } from './ClasificadorBienes'; +export { EjerciciosExamen } from './EjerciciosExamen'; diff --git a/frontend/src/components/exercises/modulo4/CalculadoraCostos.tsx b/frontend/src/components/exercises/modulo4/CalculadoraCostos.tsx new file mode 100644 index 0000000..ddf97b4 --- /dev/null +++ b/frontend/src/components/exercises/modulo4/CalculadoraCostos.tsx @@ -0,0 +1,328 @@ +import { useState, useMemo } from 'react'; +import { Card, CardHeader } from '../../ui/Card'; +import { Button } from '../../ui/Button'; +import { CheckCircle, RotateCcw, Calculator } from 'lucide-react'; + +interface FilaCostos { + q: number; + cv: number; +} + +interface FilaCalculada extends FilaCostos { + cf: number; + ct: number; + cfme: number; + cvme: number; + cme: number; + cmg: number | null; +} + +interface CalculadoraCostosProps { + ejercicioId: string; + onComplete?: (puntuacion: number) => void; +} + +export function CalculadoraCostos({ ejercicioId: _ejercicioId, onComplete }: CalculadoraCostosProps) { + const CF_BASE = 200; + + const [filas, setFilas] = useState([ + { q: 0, cv: 0 }, + { q: 1, cv: 50 }, + { q: 2, cv: 90 }, + { q: 3, cv: 120 }, + { q: 4, cv: 160 }, + { q: 5, cv: 220 }, + { q: 6, cv: 300 }, + { q: 7, cv: 400 }, + { q: 8, cv: 520 }, + ]); + + const [validado, setValidado] = useState(false); + const [errores, setErrores] = useState([]); + + const datosCalculados: FilaCalculada[] = useMemo(() => { + return filas.map((fila, index) => { + const ct = CF_BASE + fila.cv; + const cfme = fila.q > 0 ? CF_BASE / fila.q : 0; + const cvme = fila.q > 0 ? fila.cv / fila.q : 0; + const cme = fila.q > 0 ? ct / fila.q : 0; + const cmg = index > 0 ? ct - (CF_BASE + filas[index - 1].cv) : null; + + return { + ...fila, + cf: CF_BASE, + ct, + cfme, + cvme, + cme, + cmg, + }; + }); + }, [filas]); + + const handleCvChange = (index: number, valor: string) => { + const numValor = parseFloat(valor) || 0; + const nuevasFilas = [...filas]; + nuevasFilas[index] = { ...nuevasFilas[index], cv: numValor }; + setFilas(nuevasFilas); + setValidado(false); + }; + + const validarCalculos = () => { + const nuevosErrores: string[] = []; + + datosCalculados.forEach((fila, index) => { + if (fila.ct !== fila.cf + fila.cv) { + nuevosErrores.push(`Fila ${index + 1}: CT no coincide con CF + CV`); + } + if (fila.q > 0 && Math.abs(fila.cme - fila.ct / fila.q) > 0.01) { + nuevosErrores.push(`Fila ${index + 1}: CMe calculado incorrectamente`); + } + }); + + setErrores(nuevosErrores); + setValidado(true); + + if (nuevosErrores.length === 0) { + if (onComplete) { + onComplete(100); + } + } + }; + + const reiniciar = () => { + setFilas([ + { q: 0, cv: 0 }, + { q: 1, cv: 50 }, + { q: 2, cv: 90 }, + { q: 3, cv: 120 }, + { q: 4, cv: 160 }, + { q: 5, cv: 220 }, + { q: 6, cv: 300 }, + { q: 7, cv: 400 }, + { q: 8, cv: 520 }, + ]); + setValidado(false); + setErrores([]); + }; + + const maxCT = Math.max(...datosCalculados.map(d => d.ct)); + const maxCMe = Math.max(...datosCalculados.filter(d => d.q > 0).map(d => d.cme)); + const maxCMg = Math.max(...datosCalculados.filter(d => d.cmg !== null).map(d => d.cmg || 0)); + const escalaCT = maxCT > 0 ? 150 / maxCT : 1; + const escalaCMe = maxCMe > 0 ? 150 / maxCMe : 1; + const escalaCMg = maxCMg > 0 ? 150 / maxCMg : 1; + + return ( +
+ + + +
+ + + + + + + + + + + + + + + {datosCalculados.map((fila, index) => ( + + + + + + + + + + + ))} + +
QCFCVCTCFMeCVMeCMeCMg
{fila.q}{fila.cf} + handleCvChange(index, e.target.value)} + className="w-20 px-2 py-1 border rounded text-sm focus:ring-2 focus:ring-primary focus:border-transparent" + min="0" + disabled={fila.q === 0} + /> + {fila.ct} + {fila.q > 0 ? fila.cfme.toFixed(2) : '-'} + + {fila.q > 0 ? fila.cvme.toFixed(2) : '-'} + + {fila.q > 0 ? fila.cme.toFixed(2) : '-'} + + {fila.cmg !== null ? fila.cmg : '-'} +
+
+ +
+ + +
+ + {validado && errores.length === 0 && ( +
+
+ + ¡Todos los cálculos son correctos! +
+
+ )} + + {validado && errores.length > 0 && ( +
+

Se encontraron errores:

+
    + {errores.map((error, i) => ( +
  • {error}
  • + ))} +
+
+ )} +
+ + + + +
+
+

Costo Total (CT)

+
+ + + + Cantidad (Q) + CT + + {datosCalculados.map((d, i) => ( + + {d.q} + + ))} + + `${30 + i * 40},${140 - d.ct * escalaCT}`).join(' ')} + /> + + {datosCalculados.map((d, i) => ( + + ))} + +
+
+ +
+

Costo Medio (CMe) vs Costo Marginal (CMg)

+
+ + + + Cantidad (Q) + Costo + + {datosCalculados.filter(d => d.q > 0).map((d, i) => ( + + {d.q} + + ))} + + d.q > 0) + .map((d, i) => `${70 + i * 40},${140 - d.cme * escalaCMe}`) + .join(' ')} + /> + + d.cmg !== null) + .map((d, i) => `${70 + i * 40},${140 - (d.cmg || 0) * escalaCMg}`) + .join(' ')} + /> + + {datosCalculados.filter(d => d.q > 0).map((d, i) => ( + + ))} + + {datosCalculados.filter(d => d.cmg !== null).map((d, i) => ( + + ))} + + + + CMe + + CMg + + +
+
+
+
+ + +

Fórmulas utilizadas:

+
    +
  • CT = CF + CV (Costo Total)
  • +
  • CFMe = CF / Q (Costo Fijo Medio)
  • +
  • CVMe = CV / Q (Costo Variable Medio)
  • +
  • CMe = CT / Q (Costo Medio)
  • +
  • CMg = ΔCT / ΔQ (Costo Marginal)
  • +
+
+
+ ); +} + +export default CalculadoraCostos; diff --git a/frontend/src/components/exercises/modulo4/SimuladorProduccion.tsx b/frontend/src/components/exercises/modulo4/SimuladorProduccion.tsx new file mode 100644 index 0000000..4b16807 --- /dev/null +++ b/frontend/src/components/exercises/modulo4/SimuladorProduccion.tsx @@ -0,0 +1,318 @@ +import { useState, useMemo } from 'react'; +import { Card, CardHeader } from '../../ui/Card'; +import { Button } from '../../ui/Button'; +import { Input } from '../../ui/Input'; +import { CheckCircle, Target, TrendingUp, DollarSign } from 'lucide-react'; + +interface FilaProduccion { + q: number; + ct: number; +} + +interface FilaCalculada { + q: number; + precio: number; + it: number; + ct: number; + bt: number; + img: number | null; + cmg: number | null; +} + +interface SimuladorProduccionProps { + ejercicioId: string; + onComplete?: (puntuacion: number) => void; +} + +export function SimuladorProduccion({ ejercicioId: _ejercicioId, onComplete }: SimuladorProduccionProps) { + const [precio, setPrecio] = useState(80); + + const datosBase: FilaProduccion[] = [ + { q: 0, ct: 200 }, + { q: 1, ct: 250 }, + { q: 2, ct: 290 }, + { q: 3, ct: 320 }, + { q: 4, ct: 360 }, + { q: 5, ct: 420 }, + { q: 6, ct: 500 }, + { q: 7, ct: 600 }, + { q: 8, ct: 720 }, + ]; + + const datosCalculados: FilaCalculada[] = useMemo(() => { + return datosBase.map((fila, index) => { + const it = precio * fila.q; + const bt = it - fila.ct; + const img = index > 0 ? precio : null; + const cmg = index > 0 ? fila.ct - datosBase[index - 1].ct : null; + + return { + q: fila.q, + precio, + it, + ct: fila.ct, + bt, + img, + cmg, + }; + }); + }, [precio]); + + const qOptima = useMemo(() => { + let maxBT = -Infinity; + let qOpt = 0; + + datosCalculados.forEach((fila) => { + if (fila.bt > maxBT) { + maxBT = fila.bt; + qOpt = fila.q; + } + }); + + return qOpt; + }, [datosCalculados]); + + const verificacionIMgCMg = useMemo(() => { + const filasValidas = datosCalculados.filter(f => f.img !== null && f.cmg !== null); + const filaOptima = filasValidas.find(f => f.q === qOptima); + + if (!filaOptima) return null; + + return { + img: filaOptima.img, + cmg: filaOptima.cmg, + diferencia: Math.abs((filaOptima.img || 0) - (filaOptima.cmg || 0)), + cumple: Math.abs((filaOptima.img || 0) - (filaOptima.cmg || 0)) < 5, + }; + }, [datosCalculados, qOptima]); + + const maxValor = Math.max( + ...datosCalculados.map(d => Math.max(d.it, d.ct, d.bt > 0 ? d.bt : 0)) + ); + const escala = maxValor > 0 ? 140 / maxValor : 1; + + const handleCompletar = () => { + if (onComplete) { + onComplete(100); + } + return 100; + }; + + return ( +
+ + + +
+ +
+ + setPrecio(parseFloat(e.target.value) || 0)} + className="w-32" + min="0" + /> + + Ajusta el precio para ver cómo cambia la decisión óptima + +
+
+ +
+ + + + + + + + + + + + + + {datosCalculados.map((fila) => ( + + + + + + + + + + ))} + +
QPrecio (P)IT = P × QCTBT = IT - CTIMgCMg
{fila.q}{fila.precio}{fila.it}{fila.ct}= 0 ? 'text-success' : 'text-error'}`}> + {fila.bt} + + {fila.img !== null ? fila.img : '-'} + + {fila.cmg !== null ? fila.cmg : '-'} +
+
+ +
+
+ +
+

+ Cantidad Óptima: Q = {qOptima} +

+

+ Beneficio Máximo: BT = {datosCalculados.find(d => d.q === qOptima)?.bt} + {' '}(${precio} × {qOptima} - {datosCalculados.find(d => d.q === qOptima)?.ct}) +

+
+
+
+ + {verificacionIMgCMg && ( +
+
+ {verificacionIMgCMg.cumple ? ( + + ) : ( + + )} + + Verificación IMg ≈ CMg: + +
+

+ IMg = {verificacionIMgCMg.img}, CMg = {verificacionIMgCMg.cmg} + {' '}(Diferencia: {verificacionIMgCMg.diferencia.toFixed(1)}) +

+

+ {verificacionIMgCMg.cumple + ? '✓ La condición de optimalidad se cumple: IMg ≈ CMg' + : 'La diferencia es significativa, pero el beneficio sigue siendo máximo en Q = ' + qOptima} +

+
+ )} +
+ + + + +
+ + + + Cantidad (Q) + $ + + {datosCalculados.map((d, i) => ( + + {d.q} + + ))} + + `${80 + i * 45},${190 - d.it * escala}`).join(' ')} + /> + + `${80 + i * 45},${190 - d.ct * escala}`).join(' ')} + /> + + {datosCalculados.map((d, i) => ( + + + + + ))} + + d.q === qOptima) * 45}, ${ + 190 - (datosCalculados.find(d => d.q === qOptima)?.it || 0) * escala - 20 + })`}> + + + Óptimo Q={qOptima} + + + + + + IT (Ingreso Total) + + CT (Costo Total) + + +
+
+ + +

+ + Conceptos Clave +

+
+
+

Ingreso Total (IT)

+

IT = P × Q

+
+
+

Beneficio Total (BT)

+

BT = IT - CT

+
+
+

Ingreso Marginal (IMg)

+

IMg = ΔIT / ΔQ = P (en competencia perfecta)

+
+
+

Condición de Optimalidad

+

IMg = CMg (producir hasta que el ingreso marginal iguale al costo marginal)

+
+
+
+ +
+ +
+
+ ); +} + +export default SimuladorProduccion; diff --git a/frontend/src/components/exercises/modulo4/VisualizadorExcedentes.tsx b/frontend/src/components/exercises/modulo4/VisualizadorExcedentes.tsx new file mode 100644 index 0000000..d38145f --- /dev/null +++ b/frontend/src/components/exercises/modulo4/VisualizadorExcedentes.tsx @@ -0,0 +1,344 @@ +import { useState, useMemo } from 'react'; +import { Card, CardHeader } from '../../ui/Card'; +import { Button } from '../../ui/Button'; +import { Input } from '../../ui/Input'; +import { CheckCircle, Info, TrendingUp } from 'lucide-react'; + +interface VisualizadorExcedentesProps { + ejercicioId: string; + onComplete?: (puntuacion: number) => void; +} + +export function VisualizadorExcedentes({ ejercicioId: _ejercicioId, onComplete }: VisualizadorExcedentesProps) { + const [precio, setPrecio] = useState(50); + + const demandaParams = { a: 100, b: 1 }; + const ofertaParams = { c: 10, d: 0.8 }; + + const puntoEquilibrio = useMemo(() => { + const { a, b } = demandaParams; + const { c, d } = ofertaParams; + const pEq = (a - c) / (b + d); + const qEq = a - b * pEq; + return { pEq, qEq }; + }, []); + + const datosCurvas = useMemo(() => { + const puntos = []; + const { a, b } = demandaParams; + const { c, d } = ofertaParams; + + for (let q = 0; q <= 100; q += 5) { + const pDemanda = (a - q) / b; + const pOferta = q > 0 ? (q - c) / d : 0; + puntos.push({ q, pDemanda: Math.max(0, pDemanda), pOferta: Math.max(0, pOferta) }); + } + + return puntos; + }, []); + + const excedentes = useMemo(() => { + const { a } = demandaParams; + const { c } = ofertaParams; + + const qAlPrecio = Math.max(0, a - demandaParams.b * precio); + const qOfrecida = Math.max(0, c + ofertaParams.d * precio); + + const excedenteConsumidor = 0.5 * qAlPrecio * (a - precio); + const excedenteProductor = 0.5 * qOfrecida * (precio - c); + + return { + ec: excedenteConsumidor, + ep: excedenteProductor, + total: excedenteConsumidor + excedenteProductor, + qAlPrecio, + qOfrecida, + }; + }, [precio]); + + const excedentesEquilibrio = useMemo(() => { + const { pEq, qEq } = puntoEquilibrio; + const { a } = demandaParams; + const { c } = ofertaParams; + + const ec = 0.5 * qEq * (a - pEq); + const ep = 0.5 * qEq * (pEq - c); + + return { ec, ep, total: ec + ep }; + }, [puntoEquilibrio]); + + const maxP = 100; + const maxQ = 100; + const escalaX = 350 / maxQ; + const escalaY = 180 / maxP; + + const handleCompletar = () => { + if (onComplete) { + onComplete(100); + } + return 100; + }; + + return ( +
+ + + +
+ +
+ setPrecio(parseFloat(e.target.value))} + className="flex-1" + /> + ${precio} +
+
+ $20 + Precio de equilibrio: ${puntoEquilibrio.pEq.toFixed(1)} + $90 +
+
+ +
+ + + + + Cantidad (Q) + Precio (P) + + {[0, 25, 50, 75, 100].map((q) => ( + + + + {q} + + + ))} + + {[0, 25, 50, 75, 100].map((p) => ( + + + + {p} + + + ))} + + + + P = {precio} + + + {precio > puntoEquilibrio.pEq && ( + + )} + + {precio < puntoEquilibrio.pEq && ( + + )} + + {Math.abs(precio - puntoEquilibrio.pEq) < 2 && ( + <> + + + + )} + + `${50 + d.q * escalaX},${200 - d.pDemanda * escalaY}`).join(' ')} + /> + + d.pOferta >= 0).map(d => `${50 + d.q * escalaX},${200 - d.pOferta * escalaY}`).join(' ')} + /> + + + + E + + + + + Demanda + + Oferta + + EC + + EP + + +
+
+ +
+ +
+
+

Excedente del Consumidor

+
+

${excedentes.ec.toFixed(0)}

+

+ Área bajo la curva de demanda y sobre el precio +

+ + + +
+
+

Excedente del Productor

+
+

${excedentes.ep.toFixed(0)}

+

+ Área sobre la curva de oferta y bajo el precio +

+ + + +
+ +

Excedente Total

+
+

${excedentes.total.toFixed(0)}

+

+ EC + EP = Bienestar social total +

+
+
+ + +
+ +
+

En el Equilibrio de Mercado:

+
+
+ Precio: + ${puntoEquilibrio.pEq.toFixed(1)} +
+
+ Cantidad: + {puntoEquilibrio.qEq.toFixed(1)} +
+
+ Excedente Total: + ${excedentesEquilibrio.total.toFixed(0)} +
+
+

+ El equilibrio de mercado maximiza el bienestar social (excedente total). + Cualquier desviación del precio de equilibrio genera pérdida de eficiencia. +

+
+
+
+ +
+ +
+
+ ); +} + +export default VisualizadorExcedentes; diff --git a/frontend/src/components/exercises/modulo4/index.ts b/frontend/src/components/exercises/modulo4/index.ts new file mode 100644 index 0000000..50633ca --- /dev/null +++ b/frontend/src/components/exercises/modulo4/index.ts @@ -0,0 +1,3 @@ +export { CalculadoraCostos } from './CalculadoraCostos'; +export { SimuladorProduccion } from './SimuladorProduccion'; +export { VisualizadorExcedentes } from './VisualizadorExcedentes'; diff --git a/frontend/src/components/progress/Badges.tsx b/frontend/src/components/progress/Badges.tsx new file mode 100644 index 0000000..1e6e709 --- /dev/null +++ b/frontend/src/components/progress/Badges.tsx @@ -0,0 +1,225 @@ +import { motion } from 'framer-motion'; +import { + Footprints, + BookOpen, + Scale, + StretchHorizontal, + Factory, + GraduationCap, + Target, + Award, + Lock, + Unlock, + Trophy +} from 'lucide-react'; +import type { Badge } from '../../types'; + +const ICON_MAP: Record> = { + Footprints, + BookOpen, + Scale, + StretchHorizontal, + Factory, + GraduationCap, + Target, + Award, +}; + +interface BadgeCardProps { + badge: Badge; + size?: 'sm' | 'md' | 'lg'; +} + +export function BadgeCard({ badge, size = 'md' }: BadgeCardProps) { + const Icon = ICON_MAP[badge.icono] || Trophy; + + const sizeClasses = { + sm: { + container: 'p-3', + icon: 20, + title: 'text-xs', + desc: 'text-[10px]', + }, + md: { + container: 'p-4', + icon: 28, + title: 'text-sm', + desc: 'text-xs', + }, + lg: { + container: 'p-5', + icon: 36, + title: 'text-base', + desc: 'text-sm', + }, + }; + + if (badge.desbloqueado) { + return ( + +
+
+ + + + + + +
+ +

+ {badge.titulo} +

+

+ {badge.descripcion} +

+ + {badge.fechaDesbloqueo && ( +

+ Desbloqueado: {new Date(badge.fechaDesbloqueo).toLocaleDateString()} +

+ )} +
+
+ ); + } + + return ( +
+
+
+
+ +
+
+ +
+
+ +

+ {badge.titulo} +

+ +

+ {badge.descripcion} +

+
+
+ ); +} + +interface BadgesGridProps { + badges: Badge[]; + columns?: 2 | 3 | 4; + size?: 'sm' | 'md' | 'lg'; +} + +export function BadgesGrid({ badges, columns = 4, size = 'md' }: BadgesGridProps) { + const columnClasses = { + 2: 'grid-cols-2', + 3: 'grid-cols-2 md:grid-cols-3', + 4: 'grid-cols-2 md:grid-cols-3 lg:grid-cols-4', + }; + + return ( +
+ {badges.map((badge, index) => ( + + + + ))} +
+ ); +} + +interface BadgesSectionProps { + badgesDesbloqueados: Badge[]; + badgesBloqueados: Badge[]; +} + +export function BadgesSection({ badgesDesbloqueados, badgesBloqueados }: BadgesSectionProps) { + const totalBadges = badgesDesbloqueados.length + badgesBloqueados.length; + const porcentaje = totalBadges > 0 ? Math.round((badgesDesbloqueados.length / totalBadges) * 100) : 0; + + return ( +
+ {/* Resumen */} +
+
+
+
+ +
+
+

Logros

+

+ {badgesDesbloqueados.length} de {totalBadges} desbloqueados +

+
+
+ + {porcentaje}% + +
+
+ +
+
+ + {/* Badges Desbloqueados */} + {badgesDesbloqueados.length > 0 && ( +
+

+ + Desbloqueados ({badgesDesbloqueados.length}) +

+ +
+ )} + + {/* Badges Bloqueados */} + {badgesBloqueados.length > 0 && ( +
+

+ + Por desbloquear ({badgesBloqueados.length}) +

+ +
+ )} +
+ ); +} + +export default BadgesGrid; diff --git a/frontend/src/components/progress/ProgressBar.tsx b/frontend/src/components/progress/ProgressBar.tsx new file mode 100644 index 0000000..165f706 --- /dev/null +++ b/frontend/src/components/progress/ProgressBar.tsx @@ -0,0 +1,81 @@ +import { motion } from 'framer-motion'; + +interface ProgressBarProps { + porcentaje: number; + moduloNumero: number; + showLabel?: boolean; + size?: 'sm' | 'md' | 'lg'; +} + +export function ProgressBar({ + porcentaje, + moduloNumero, + showLabel = true, + size = 'md' +}: ProgressBarProps) { + // Determinar color según progreso + const getColor = () => { + if (porcentaje < 30) return 'bg-red-500'; + if (porcentaje < 70) return 'bg-yellow-500'; + return 'bg-green-500'; + }; + + // Determinar color del borde/fondo según progreso + const getBgColor = () => { + if (porcentaje < 30) return 'bg-red-100'; + if (porcentaje < 70) return 'bg-yellow-100'; + return 'bg-green-100'; + }; + + const getTextColor = () => { + if (porcentaje < 30) return 'text-red-700'; + if (porcentaje < 70) return 'text-yellow-700'; + return 'text-green-700'; + }; + + const sizeClasses = { + sm: 'h-2', + md: 'h-4', + lg: 'h-6', + }; + + return ( +
+ {showLabel && ( +
+ + Módulo {moduloNumero} + + + {porcentaje}% + +
+ )} + +
+ +
+ + {porcentaje === 100 && ( + + ¡Módulo completado! + + )} +
+ ); +} + +export default ProgressBar; diff --git a/frontend/src/components/progress/ScoreDisplay.tsx b/frontend/src/components/progress/ScoreDisplay.tsx new file mode 100644 index 0000000..c1fe10b --- /dev/null +++ b/frontend/src/components/progress/ScoreDisplay.tsx @@ -0,0 +1,212 @@ +import { useState, useEffect } from 'react'; +import { motion, AnimatePresence } from 'framer-motion'; +import { Star } from 'lucide-react'; +import type { NivelUsuario } from '../../types'; + +interface ScoreDisplayProps { + puntos: number; + animar?: boolean; + showNivel?: boolean; + size?: 'sm' | 'md' | 'lg'; +} + +const NIVELES_CONFIG: Record = { + Novato: { + color: 'text-gray-600', + bgColor: 'bg-gray-100', + icon: '🌱' + }, + Aprendiz: { + color: 'text-blue-600', + bgColor: 'bg-blue-100', + icon: '📚' + }, + Experto: { + color: 'text-purple-600', + bgColor: 'bg-purple-100', + icon: '🏆' + }, + Maestro: { + color: 'text-yellow-600', + bgColor: 'bg-yellow-100', + icon: '👑' + }, +}; + +function calcularNivel(puntuacion: number): NivelUsuario { + if (puntuacion >= 2000) return 'Maestro'; + if (puntuacion >= 1000) return 'Experto'; + if (puntuacion >= 300) return 'Aprendiz'; + return 'Novato'; +} + +function calcularProgresoNivel(puntuacion: number): { actual: number; siguiente: number; porcentaje: number } { + if (puntuacion >= 2000) { + return { actual: 2000, siguiente: 2000, porcentaje: 100 }; + } else if (puntuacion >= 1000) { + return { actual: puntuacion, siguiente: 2000, porcentaje: ((puntuacion - 1000) / 1000) * 100 }; + } else if (puntuacion >= 300) { + return { actual: puntuacion, siguiente: 1000, porcentaje: ((puntuacion - 300) / 700) * 100 }; + } else { + return { actual: puntuacion, siguiente: 300, porcentaje: (puntuacion / 300) * 100 }; + } +} + +export function ScoreDisplay({ + puntos, + animar = false, + showNivel = true, + size = 'md' +}: ScoreDisplayProps) { + const [puntosAnimados, setPuntosAnimados] = useState(0); + const [puntosPrevios, setPuntosPrevios] = useState(puntos); + const [cambioReciente, setCambioReciente] = useState(0); + + const nivel = calcularNivel(puntos); + const configNivel = NIVELES_CONFIG[nivel]; + const progresoNivel = calcularProgresoNivel(puntos); + + useEffect(() => { + if (animar && puntos !== puntosPrevios) { + const diferencia = puntos - puntosPrevios; + setCambioReciente(diferencia); + + // Animar contador + const duracion = 1500; + const pasos = 60; + let pasoActual = 0; + + const intervalo = setInterval(() => { + pasoActual++; + const progreso = pasoActual / pasos; + // Función de easing + const easeOutQuart = 1 - Math.pow(1 - progreso, 4); + + setPuntosAnimados(Math.round(puntosPrevios + (diferencia * easeOutQuart))); + + if (pasoActual >= pasos) { + clearInterval(intervalo); + setPuntosAnimados(puntos); + setPuntosPrevios(puntos); + + // Ocultar el cambio después de 3 segundos + setTimeout(() => setCambioReciente(0), 3000); + } + }, duracion / pasos); + + return () => clearInterval(intervalo); + } else { + setPuntosAnimados(puntos); + setPuntosPrevios(puntos); + } + }, [puntos, animar, puntosPrevios]); + + const sizeClasses = { + sm: { + container: 'p-2', + puntos: 'text-xl', + label: 'text-xs', + icon: 16, + }, + md: { + container: 'p-4', + puntos: 'text-3xl', + label: 'text-sm', + icon: 24, + }, + lg: { + container: 'p-6', + puntos: 'text-5xl', + label: 'text-base', + icon: 32, + }, + }; + + return ( +
+
+
+
+ +
+
+

Puntuación Total

+
+ + {puntosAnimados.toLocaleString()} + + pts + + + {cambioReciente !== 0 && ( + 0 ? 'text-green-600' : 'text-red-600'}`} + > + {cambioReciente > 0 ? '+' : ''}{cambioReciente} + + )} + +
+
+
+ + {showNivel && ( +
+ + {configNivel.icon} + {nivel} + +
+ )} +
+ + {showNivel && progresoNivel.siguiente > progresoNivel.actual && ( +
+
+ Progreso hacia {calcularNivel(progresoNivel.siguiente)} + {Math.round(progresoNivel.porcentaje)}% +
+
+ +
+

+ {progresoNivel.siguiente - progresoNivel.actual} puntos para el siguiente nivel +

+
+ )} + + {progresoNivel.porcentaje === 100 && nivel === 'Maestro' && ( + +

+ 🎉 ¡Has alcanzado el nivel máximo! +

+
+ )} +
+ ); +} + +export default ScoreDisplay; diff --git a/frontend/src/components/progress/index.ts b/frontend/src/components/progress/index.ts new file mode 100644 index 0000000..6e3a0b2 --- /dev/null +++ b/frontend/src/components/progress/index.ts @@ -0,0 +1,3 @@ +export { ProgressBar } from './ProgressBar'; +export { ScoreDisplay } from './ScoreDisplay'; +export { BadgesGrid, BadgesSection, BadgeCard } from './Badges'; diff --git a/frontend/src/components/ui/Card.tsx b/frontend/src/components/ui/Card.tsx index 26d9546..73773dd 100644 --- a/frontend/src/components/ui/Card.tsx +++ b/frontend/src/components/ui/Card.tsx @@ -3,11 +3,17 @@ import { ReactNode } from 'react'; interface CardProps { children: ReactNode; className?: string; + onClick?: () => void; } -export function Card({ children, className = '' }: CardProps) { +export function Card({ children, className = '', onClick }: CardProps) { return ( -
+
{children}
); diff --git a/frontend/src/components/ui/Loader.tsx b/frontend/src/components/ui/Loader.tsx new file mode 100644 index 0000000..c0d9683 --- /dev/null +++ b/frontend/src/components/ui/Loader.tsx @@ -0,0 +1,20 @@ +import { Loader2 } from 'lucide-react'; + +interface LoaderProps { + size?: 'sm' | 'md' | 'lg'; + className?: string; +} + +const sizeClasses = { + sm: 'w-4 h-4', + md: 'w-8 h-8', + lg: 'w-12 h-12', +}; + +export function Loader({ size = 'md', className = '' }: LoaderProps) { + return ( + + ); +} diff --git a/frontend/src/content/modulo1/agentes.ts b/frontend/src/content/modulo1/agentes.ts new file mode 100644 index 0000000..1e23b49 --- /dev/null +++ b/frontend/src/content/modulo1/agentes.ts @@ -0,0 +1,141 @@ +import type { ModuloContenido } from './introduccion'; + +export const agentes: ModuloContenido = { + titulo: 'Agentes Económicos', + contenido: [ + { + titulo: 'Las Familias o Hogares', + contenido: `Las familias constituyen la unidad básica de consumo en la economía. Sus funciones principales son: + +**Como consumidores:** +- Adquieren bienes y servicios para satisfacer sus necesidades +- Toman decisiones sobre qué comprar, cuánto y a qué precio +- Maximizan su utilidad (satisfacción) dado su presupuesto + +**Como oferentes de factores productivos:** +- Proporcionan trabajo a cambio de salarios +- Ofrecen capital (ahorros) a cambio de intereses +- Entregan tierra/naturaleza a cambio de renta +- Aportan habilidades empresariales a cambio de beneficios + +Las decisiones de las familias están influenciadas por sus ingresos, preferencias, precios y expectativas futuras.` + }, + { + titulo: 'Las Empresas', + contenido: `Las empresas son las unidades productivas que transforman insumos en bienes y servicios. Sus características principales: + +**Funciones:** +- Compran factores de producción (trabajo, capital, materias primas) +- Organizan el proceso productivo +- Venden bienes y servicios en los mercados + +**Objetivo principal:** +Maximizar beneficios (diferencia entre ingresos y costos) + +**Clasificación por tamaño:** +- Microempresas: menos de 10 trabajadores +- Pequeñas empresas: 10-50 trabajadores +- Medianas empresas: 50-250 trabajadores +- Grandes empresas: más de 250 trabajadores + +**Clasificación por sector:** +- Sector primario: extracción de recursos naturales +- Sector secundario: industria y manufactura +- Sector terciario: servicios` + }, + { + titulo: 'El Estado o Gobierno', + contenido: `El Estado interviene en la economía para corregir fallas del mercado, redistribuir ingresos y estabilizar la economía: + +**Funciones económicas:** + +1. **Función rectora o reguladora:** + - Establece normas y leyes (ley de competencia, protección al consumidor) + - Regula sectores estratégicos + - Protege la propiedad intelectual + +2. **Función productiva:** + - Produce bienes y servicios públicos (educación, salud, defensa) + - Gestiona empresas públicas + +3. **Función redistributiva:** + - Recauda impuestos + - Transfiere recursos a quienes más lo necesitan + - Proporciona seguridad social + +4. **Función estabilizadora:** + - Política fiscal (gasto e impuestos) + - Política monetaria (a través del banco central) + - Control de inflación y desempleo` + }, + { + titulo: 'El Sector Externo', + contenido: `El sector externo comprende todas las transacciones económicas con el resto del mundo: + +**Intercambios principales:** +- **Exportaciones:** Bienes y servicios vendidos al exterior (generan entrada de divisas) +- **Importaciones:** Bienes y servicios comprados del exterior (generan salida de divisas) + +**Agentes del sector externo:** +- Empresas multinacionales +- Inversionistas extranjeros +- Turistas +- Organismos internacionales (FMI, Banco Mundial) + +**Impacto económico:** +- Aporta divisas necesarias para importaciones +- Genera competencia para empresas locales +- Transfiere tecnología y conocimiento +- Crea empleo (zonas francas, exportaciones) + +**Balanza comercial:** +- Superávit: Exportaciones > Importaciones +- Déficit: Importaciones > Exportaciones` + }, + { + titulo: 'El Flujo Circular de la Renta', + contenido: `El flujo circular de la renta es un modelo que muestra cómo interactúan los agentes económicos y cómo circulan bienes, servicios y dinero en la economía. + +**Flujos reales (bienes y servicios):** +1. Familias → Empresas: Factores de producción (trabajo, capital, tierra) +2. Empresas → Familias: Bienes y servicios para consumo + +**Flujos monetarios (dinero):** +1. Empresas → Familias: Pagos por factores (salarios, rentas, intereses, beneficios) +2. Familias → Empresas: Gasto en consumo + +**Inclusión del Estado:** +- El Estado recauda impuestos de familias y empresas +- El Estado gasta en bienes públicos y transferencias + +**Inclusión del sector externo:** +- Exportaciones: Dinero entra al país +- Importaciones: Dinero sale del país + +**Identidad macroeconómica básica:** +Ingreso = Producción = Gasto` + } + ], + ejercicios: [ + { + id: 'flujo-circular-juego', + tipo: 'juego', + titulo: 'Juego del Flujo Circular', + descripcion: 'Arrastra cada elemento a su lugar correcto en el diagrama del flujo circular de la renta', + config: { + agentes: ['Familias', 'Empresas', 'Estado', 'Sector Externo'], + flujos: [ + { origen: 'Familias', destino: 'Empresas', tipo: 'factor', nombre: 'Trabajo' }, + { origen: 'Empresas', destino: 'Familias', tipo: 'monetario', nombre: 'Salarios' }, + { origen: 'Empresas', destino: 'Familias', tipo: 'real', nombre: 'Bienes' }, + { origen: 'Familias', destino: 'Empresas', tipo: 'monetario', nombre: 'Consumo' }, + { origen: 'Familias', destino: 'Estado', tipo: 'monetario', nombre: 'Impuestos' }, + { origen: 'Estado', destino: 'Familias', tipo: 'monetario', nombre: 'Transferencias' } + ], + dificultad: 'intermedio' + } + } + ] +}; + +export default agentes; diff --git a/frontend/src/content/modulo1/ejercicios.ts b/frontend/src/content/modulo1/ejercicios.ts new file mode 100644 index 0000000..b8e4f9c --- /dev/null +++ b/frontend/src/content/modulo1/ejercicios.ts @@ -0,0 +1,404 @@ +import type { Ejercicio } from './introduccion'; + +export interface EjercicioDetallado extends Ejercicio { + instrucciones: string; + pistas?: string[]; + solucion?: string; + dificultad: 'facil' | 'medio' | 'dificil'; + duracionEstimada: number; // en minutos + objetivosAprendizaje: string[]; +} + +export interface ModuloEjercicios { + titulo: string; + descripcion: string; + ejercicios: EjercicioDetallado[]; +} + +export const ejercicios: ModuloEjercicios = { + titulo: 'Ejercicios Prácticos - Módulo 1', + descripcion: 'Pon a prueba tus conocimientos con estos ejercicios interactivos sobre fundamentos de economía', + ejercicios: [ + { + id: 'simulador-disyuntivas', + tipo: 'slider', + titulo: 'Simulador de Disyuntivas Económicas', + descripcion: 'Explora cómo una economía debe elegir entre producir diferentes bienes con recursos limitados', + instrucciones: `En este ejercicio, juegas el rol de un planificador económico que debe decidir cómo asignar los recursos de una economía entre dos bienes: Alimentos y Tecnología. + +1. Usa los sliders para ajustar la producción de cada bien +2. Observa cómo la frontera de posibilidades de producción (FPP) muestra tus opciones +3. Identifica los costos de oportunidad de cada decisión +4. Experimenta con diferentes combinaciones y encuentra la asignación más eficiente + +Recuerda: No puedes estar fuera de la frontera sin más recursos, y estar dentro significa ineficiencia.`, + dificultad: 'medio', + duracionEstimada: 15, + objetivosAprendizaje: [ + 'Comprender el concepto de escasez y elección', + 'Visualizar la frontera de posibilidades de producción', + 'Calcular costos de oportunidad', + 'Identificar puntos eficientes, ineficientes e inalcanzables' + ], + config: { + escenario: { + titulo: 'Economía Agrícola-Tecnológica', + descripcion: 'Una economía con recursos limitados debe decidir entre producir alimentos (bien de primera necesidad) o bienes tecnológicos (computadoras, smartphones)', + bienA: { + nombre: 'Alimentos', + unidad: 'millones de toneladas', + maxProduccion: 100, + color: '#4CAF50' + }, + bienB: { + nombre: 'Tecnología', + unidad: 'millones de unidades', + maxProduccion: 80, + color: '#2196F3' + } + }, + parametros: { + mostrarFPP: true, + mostrarCostoOportunidad: true, + mostrarPuntoActual: true, + tipoCurva: 'concava', // refleja costos crecientes + puntosDesplazamiento: [ + { causa: 'Mejora tecnológica en agricultura', efecto: 'fpp-externo-alimentos' }, + { causa: 'Innovación tecnológica general', efecto: 'fpp-externo-ambos' } + ] + }, + preguntasReflexion: [ + '¿Qué representa la pendiente de la FPP?', + '¿Por qué la curva es cóncava y no una línea recta?', + '¿Qué pasaría si la economía está en un punto dentro de la FPP?', + '¿Cómo afectaría un terremoto a la FPP?' + ] + }, + pistas: [ + 'El costo de oportunidad es lo que sacrificas de un bien para obtener más del otro', + 'La FPP es cóncava porque los recursos no son perfectamente sustituibles entre sectores', + 'Un punto sobre la FPP es eficiente; dentro es ineficiente; fuera es inalcanzable' + ], + solucion: `La FPP muestra que: +1. Existe un trade-off: más alimentos significan menos tecnología y viceversa +2. Los costos de oportunidad crecen conforme nos especializamos en un bien +3. La eficiencia requiere estar sobre la frontera +4. El crecimiento económico desplaza la FPP hacia afuera` + }, + { + id: 'quiz-clasificacion-bienes', + tipo: 'quiz', + titulo: 'Quiz: Clasificación de Bienes y Servicios', + descripcion: 'Aprende a clasificar bienes según el comportamiento de la demanda ante cambios en el ingreso', + instrucciones: `Clasifica cada bien en la categoría correcta según cómo responde su demanda ante cambios en el ingreso de los consumidores: + +- **Bien Normal**: La demanda aumenta cuando aumenta el ingreso (ej: ropa de calidad, restaurantes) +- **Bien Inferior**: La demanda disminuye cuando aumenta el ingreso (ej: fideos instantáneos, transporte público) +- **Bien de Lujo**: La demanda aumenta más que proporcionalmente al ingreso (ej: joyas, autos deportivos) + +Lee cuidadosamente cada escenario y selecciona la respuesta correcta.`, + dificultad: 'facil', + duracionEstimada: 10, + objetivosAprendizaje: [ + 'Distinguir entre bienes normales, inferiores y de lujo', + 'Comprender la elasticidad ingreso de la demanda', + 'Analizar patrones de consumo según nivel de ingresos' + ], + config: { + modo: 'clasificacion-multiple', + preguntas: [ + { + id: 'p1', + bien: 'Carne de primera calidad', + descripcion: 'Carne de res premium vendida en supermercados de alta gama', + opciones: ['Bien normal', 'Bien inferior', 'Bien de lujo'], + respuestaCorrecta: 'Bien de lujo', + explicacionDetallada: 'La carne premium es considerada un bien de lujo porque cuando el ingreso aumenta significativamente, las familias aumentan su consumo de este tipo de carne sustituyendo carnes de menor calidad.', + categoriaElasticidad: 'Elasticidad ingreso > 1' + }, + { + id: 'p2', + bien: 'Pan', + descripcion: 'Pan básico de consumo diario', + opciones: ['Bien normal', 'Bien inferior', 'Bien de lujo'], + respuestaCorrecta: 'Bien normal', + explicacionDetallada: 'El pan es un bien normal porque su consumo aumenta moderadamente con el ingreso, aunque llega un punto donde se estabiliza (saturación).', + categoriaElasticidad: '0 < Elasticidad ingreso < 1' + }, + { + id: 'p3', + bien: 'Transporte público (autobús)', + descripcion: 'Servicio de autobuses urbanos', + opciones: ['Bien normal', 'Bien inferior', 'Bien de lujo'], + respuestaCorrecta: 'Bien inferior', + explicacionDetallada: 'El transporte público es un bien inferior porque cuando los ingresos aumentan, las personas tienden a comprar automóviles o usar taxis/Uber, reduciendo el uso del autobús.', + categoriaElasticidad: 'Elasticidad ingreso < 0' + }, + { + id: 'p4', + bien: 'Fideos instantáneos', + descripcion: 'Comida rápida económica', + opciones: ['Bien normal', 'Bien inferior', 'Bien de lujo'], + respuestaCorrecta: 'Bien inferior', + explicacionDetallada: 'Los fideos instantáneos son claramente un bien inferior. A medida que aumentan los ingresos, las personas prefieren alimentos más nutritivos y de mejor calidad.', + categoriaElasticidad: 'Elasticidad ingreso < 0' + }, + { + id: 'p5', + bien: 'Vacaciones en el extranjero', + descripcion: 'Viajes turísticos internacionales', + opciones: ['Bien normal', 'Bien inferior', 'Bien de lujo'], + respuestaCorrecta: 'Bien de lujo', + explicacionDetallada: 'Las vacaciones internacionales son un bien de lujo porque su consumo aumenta significativamente cuando el ingreso crece, incluso más que proporcionalmente.', + categoriaElasticidad: 'Elasticidad ingreso > 1' + }, + { + id: 'p6', + bien: 'Ropa de marca', + descripcion: 'Vestimenta de diseñador', + opciones: ['Bien normal', 'Bien inferior', 'Bien de lujo'], + respuestaCorrecta: 'Bien de lujo', + explicacionDetallada: 'La ropa de marca es un bien de lujo porque su demanda crece más rápido que el ingreso, especialmente en rangos de ingreso altos.', + categoriaElasticidad: 'Elasticidad ingreso > 1' + }, + { + id: 'p7', + bien: 'Cine', + descripcion: 'Entradas a salas de cine', + opciones: ['Bien normal', 'Bien inferior', 'Bien de lujo'], + respuestaCorrecta: 'Bien normal', + explicacionDetallada: 'El cine es un bien normal. Aunque con el auge del streaming podría debatirse, generalmente el consumo de entretenimiento aumenta con el ingreso de forma moderada.', + categoriaElasticidad: '0 < Elasticidad ingreso < 1' + }, + { + id: 'p8', + bien: 'Productos de marca blanca', + descripcion: 'Productos genéricos de supermercado', + opciones: ['Bien normal', 'Bien inferior', 'Bien de lujo'], + respuestaCorrecta: 'Bien inferior', + explicacionDetallada: 'Los productos de marca blanca son bienes inferiores porque son sustituidos por marcas reconocidas cuando el consumidor tiene mayores ingresos.', + categoriaElasticidad: 'Elasticidad ingreso < 0' + } + ], + configuracionVisual: { + mostrarBarraProgreso: true, + mostrarPuntaje: true, + retroalimentacionInmediata: true, + tiempoLimite: 600, // segundos + permitirReintentar: true + }, + nivelesDificultad: { + facil: ['p2', 'p4', 'p7'], + medio: ['p3', 'p5', 'p8'], + dificil: ['p1', 'p6'] + } + }, + pistas: [ + 'Pregúntate: ¿Qué compraría una persona si ganara el doble de dinero?', + 'Los bienes de lujo son aquellos que dejarías de comprar primero si perdieras tu empleo', + 'Un bien inferior no significa que sea de mala calidad, sino que tiene sustitutos mejores cuando aumenta el ingreso' + ], + solucion: `Clasificación según elasticidad-ingreso: +- Bien Inferior: Elasticidad < 0 (ej: transporte público, fideos) +- Bien Normal: 0 < Elasticidad < 1 (ej: pan, cine) +- Bien de Lujo: Elasticidad > 1 (ej: carne premium, vacaciones)` + }, + { + id: 'juego-flujo-circular', + tipo: 'juego', + titulo: 'Juego: El Flujo Circular de la Renta', + descripcion: 'Coloca cada elemento en su lugar correcto dentro del modelo del flujo circular', + instrucciones: `Completa el diagrama del flujo circular de la renta arrastrando cada elemento a su posición correcta. + +El flujo circular muestra cómo interactúan los agentes económicos: + +**Agentes principales:** +1. **Familias/Hogares**: Ofrecen factores productivos (trabajo, capital) y consumen bienes +2. **Empresas**: Producen bienes/servicios y demandan factores productivos +3. **Estado**: Recauda impuestos y realiza gastos públicos +4. **Sector Externo**: Intercambia bienes y servicios con el exterior + +**Tipos de flujos:** +- **Flujos reales** (flechas azules): Bienes, servicios, factores productivos +- **Flujos monetarios** (flechas verdes): Dinero, pagos, transferencias + +Instrucciones: +1. Observa los elementos en la parte inferior +2. Arrastra cada uno al círculo correspondiente o a las flechas correctas +3. Asegúrate de distinguir entre flujos reales y monetarios +4. Completa todos los elementos para ganar`, + dificultad: 'dificil', + duracionEstimada: 20, + objetivosAprendizaje: [ + 'Comprender la interdependencia entre agentes económicos', + 'Diferenciar entre flujos reales y monetarios', + 'Identificar los pagos correspondientes a cada factor productivo', + 'Entender el papel del Estado y el sector externo' + ], + config: { + tipoJuego: 'drag-and-drop', + diagrama: { + agentes: [ + { + id: 'familias', + nombre: 'FAMILIAS', + posicion: 'izquierda', + icono: '👨‍👩‍👧‍👦', + color: '#4CAF50' + }, + { + id: 'empresas', + nombre: 'EMPRESAS', + posicion: 'derecha', + icono: '🏭', + color: '#2196F3' + }, + { + id: 'estado', + nombre: 'ESTADO', + posicion: 'arriba', + icono: '🏛️', + color: '#FF9800' + }, + { + id: 'sector-externo', + nombre: 'SECTOR EXTERNO', + posicion: 'abajo', + icono: '🌍', + color: '#9C27B0' + } + ], + flujos: [ + // Flujo real superior (Familias → Empresas) + { + id: 'flujo1', + origen: 'familias', + destino: 'empresas', + tipo: 'real', + elementosCorrectos: ['trabajo', 'tierra', 'capital'] + }, + // Flujo monetario superior (Empresas → Familias) + { + id: 'flujo2', + origen: 'empresas', + destino: 'familias', + tipo: 'monetario', + elementosCorrectos: ['salarios', 'renta', 'intereses'] + }, + // Flujo real inferior (Empresas → Familias) + { + id: 'flujo3', + origen: 'empresas', + destino: 'familias', + tipo: 'real', + elementosCorrectos: ['bienes', 'servicios'] + }, + // Flujo monetario inferior (Familias → Empresas) + { + id: 'flujo4', + origen: 'familias', + destino: 'empresas', + tipo: 'monetario', + elementosCorrectos: ['gasto', 'consumo'] + }, + // Flujos del Estado + { + id: 'flujo5', + origen: 'familias', + destino: 'estado', + tipo: 'monetario', + elementosCorrectos: ['impuestos', 'impuestos-directos'] + }, + { + id: 'flujo6', + origen: 'estado', + destino: 'familias', + tipo: 'monetario', + elementosCorrectos: ['transferencias', 'subsidios'] + }, + { + id: 'flujo7', + origen: 'estado', + destino: 'empresas', + tipo: 'monetario', + elementosCorrectos: ['gasto-publico', 'compras-estado'] + } + ], + elementosArrastrables: [ + { id: 'trabajo', texto: '💪 Trabajo', tipo: 'real', categoria: 'factor' }, + { id: 'tierra', texto: '🌾 Tierra', tipo: 'real', categoria: 'factor' }, + { id: 'capital', texto: '💰 Capital', tipo: 'real', categoria: 'factor' }, + { id: 'salarios', texto: '💵 Salarios', tipo: 'monetario', categoria: 'pago' }, + { id: 'renta', texto: '🏠 Renta', tipo: 'monetario', categoria: 'pago' }, + { id: 'intereses', texto: '📈 Intereses', tipo: 'monetario', categoria: 'pago' }, + { id: 'bienes', texto: '📦 Bienes', tipo: 'real', categoria: 'producto' }, + { id: 'servicios', texto: '🔧 Servicios', tipo: 'real', categoria: 'producto' }, + { id: 'gasto', texto: '💳 Gasto', tipo: 'monetario', categoria: 'pago' }, + { id: 'consumo', texto: '🛒 Consumo', tipo: 'monetario', categoria: 'pago' }, + { id: 'impuestos', texto: '📝 Impuestos', tipo: 'monetario', categoria: 'pago-estado' }, + { id: 'impuestos-directos', texto: '📋 Imp. Directos', tipo: 'monetario', categoria: 'pago-estado' }, + { id: 'transferencias', texto: '🎁 Transferencias', tipo: 'monetario', categoria: 'transferencia' }, + { id: 'subsidios', texto: '💸 Subsidios', tipo: 'monetario', categoria: 'transferencia' }, + { id: 'gasto-publico', texto: '🏗️ Gasto Público', tipo: 'monetario', categoria: 'gobierno' }, + { id: 'compras-estado', texto: '🛍️ Compras Estado', tipo: 'monetario', categoria: 'gobierno' } + ] + }, + niveles: [ + { + nombre: 'Básico', + descripcion: 'Solo Familias y Empresas', + agentesActivos: ['familias', 'empresas'], + elementosDisponibles: ['trabajo', 'salarios', 'bienes', 'gasto', 'servicios', 'consumo'], + ayudaMaxima: true + }, + { + nombre: 'Intermedio', + descripcion: 'Incluye al Estado', + agentesActivos: ['familias', 'empresas', 'estado'], + elementosDisponibles: ['trabajo', 'tierra', 'capital', 'salarios', 'renta', 'intereses', 'bienes', 'servicios', 'gasto', 'consumo', 'impuestos', 'transferencias', 'gasto-publico'], + ayudaMaxima: false + }, + { + nombre: 'Avanzado', + descripcion: 'Todos los agentes incluyendo Sector Externo', + agentesActivos: ['familias', 'empresas', 'estado', 'sector-externo'], + elementosDisponibles: 'todos', + incluirExportacionesImportaciones: true, + ayudaMaxima: false + } + ], + sistemaPuntuacion: { + acierto: 10, + error: -2, + bonusCompletitud: 50, + tiempoBonus: true + } + }, + pistas: [ + 'Las familias venden sus factores productivos (trabajo, tierra, capital) a las empresas', + 'Las empresas pagan salarios por trabajo, renta por tierra e intereses por capital', + 'Las familias gastan dinero para comprar bienes y servicios de las empresas', + 'El Estado recauda impuestos y redistribuye mediante transferencias y gasto público', + 'Distingue flujos reales (cosas físicas) de flujos monetarios (dinero)' + ], + solucion: `El flujo circular completo: + +**Flujos reales:** +- Familias → Empresas: Trabajo, tierra, capital (factores productivos) +- Empresas → Familias: Bienes y servicios + +**Flujos monetarios:** +- Empresas → Familias: Salarios, renta, intereses (pagos por factores) +- Familias → Empresas: Gasto de consumo +- Familias → Estado: Impuestos +- Estado → Familias/Empresas: Transferencias y gasto público` + } + ] +}; + +// Exportar también los ejercicios individuales para facilitar importaciones selectivas +export const ejercicioDisyuntivas = ejercicios.ejercicios[0]; +export const ejercicioClasificacion = ejercicios.ejercicios[1]; +export const ejercicioFlujoCircular = ejercicios.ejercicios[2]; + +export default ejercicios; diff --git a/frontend/src/content/modulo1/factores.ts b/frontend/src/content/modulo1/factores.ts new file mode 100644 index 0000000..30f9cac --- /dev/null +++ b/frontend/src/content/modulo1/factores.ts @@ -0,0 +1,192 @@ +import type { ModuloContenido } from './introduccion'; + +export const factores: ModuloContenido = { + titulo: 'Factores de Producción', + contenido: [ + { + titulo: 'La Tierra (Recursos Naturales)', + contenido: `La tierra como factor de producción incluye todos los recursos naturales proporcionados por la naturaleza: + +**Características:** +- Tierra en sentido estricto (superficie territorial) +- Recursos minerales (petróleo, gas, minerales metálicos) +- Recursos hídricos (ríos, lagos, aguas subterráneas) +- Recursos forestales (madera, productos forestales) +- Recursos marinos (pesca) +- Recursos energéticos naturales (radiación solar, eólica) + +**Remuneración:** +El factor tierra recibe la **renta** o **renta de la tierra** como pago por su uso. + +**Importancia económica:** +- Los recursos naturales son la base de muchas industrias +- Países ricos en recursos naturales tienen ventajas comparativas +- La explotación sostenible garantiza recursos para futuras generaciones +- El agotamiento de recursos no renovables crea presión sobre la economía` + }, + { + titulo: 'El Trabajo (Factor Humano)', + contenido: `El trabajo es el esfuerzo humano (físico y mental) aplicado a la producción de bienes y servicios: + +**Clasificación del trabajo:** + +**Por cualificación:** +- Trabajo no calificado: no requiere formación especial +- Trabajo semi-calificado: requiere entrenamiento básico +- Trabajo calificado: requiere educación especializada +- Trabajo altamente calificado: profesionales, técnicos especializados + +**Por sector:** +- Trabajo primario: agricultura, pesca, minería +- Trabajo secundario: industria, manufactura, construcción +- Trabajo terciario: servicios, comercio, administración + +**Remuneración:** +El trabajo recibe el **salario** como pago (puede ser por hora, pieza o mensualidad). + +**Características del mercado laboral:** +- Oferta de trabajo: personas dispuestas a trabajar +- Demanda de trabajo: empresas que necesitan contratar +- Desempleo: diferencia entre oferta y demanda efectiva` + }, + { + titulo: 'El Capital', + contenido: `El capital son los bienes de producción creados por el ser humano para producir otros bienes y servicios: + +**Tipos de capital:** + +**1. Capital físico o tangible:** +- Maquinaria y equipos +- Edificios e instalaciones +- Herramientas y vehículos +- Infraestructura (carreteras, puertos, redes) + +**2. Capital financiero:** +- Dinero disponible para inversión +- Créditos y préstamos +- Acciones y bonos + +**3. Capital humano:** +- Educación y formación de los trabajadores +- Experiencia y habilidades +- Salud de la población + +**Formación de capital:** +El capital se forma mediante el **ahorro** e **inversión**. El ahorro diferido del consumo actual permite invertir en bienes de capital que aumentarán la producción futura. + +**Remuneración:** +El capital recibe el **interés** como pago por su uso. + +**Importancia:** +El capital aumenta la productividad del trabajo, permitiendo producir más con menos esfuerzo.` + }, + { + titulo: 'Tecnología y Emprendimiento', + contenido: `Además de los tres factores clásicos, la economía moderna reconoce dos factores adicionales fundamentales: + +**Tecnología:** +Es el conocimiento aplicado a la producción. No es solo máquinas, sino el "saber hacer": + +- Procesos productivos más eficientes +- Innovaciones en productos y servicios +- Software y sistemas de información +- Metodologías de organización + +**Impacto de la tecnología:** +- Aumenta la productividad total de los factores +- Reduce costos de producción +- Crea nuevos productos y mercados +- Transforma industrias enteras (disrupción digital) + +**Emprendimiento:** +Es la capacidad de organizar y coordinar los otros factores de producción para crear valor: + +**Funciones del empresario:** +- Identificar oportunidades de negocio +- Asumir riesgos económicos +- Innovar (nuevos productos, métodos, mercados) +- Tomar decisiones estratégicas +- Organizar los factores productivos + +**Remuneración:** +El empresario recibe los **beneficios** (o pérdidas) como resultado de su actividad. + +**Diferencia entre empresario y capitalista:** +- El capitalista aporta capital y recibe intereses +- El empresario organiza la producción y recibe beneficios (que incluyen compensación por su trabajo, riesgo asumido y habilidad empresarial)` + }, + { + titulo: 'Productividad y Eficiencia', + contenido: `La combinación de factores de producción debe hacerse buscando la máxima eficiencia: + +**Productividad:** +Relación entre la producción obtenida y los recursos utilizados: + +Productividad = Producción / Factores utilizados + +**Tipos de productividad:** +- Productividad del trabajo: producción por hora trabajada +- Productividad del capital: producción por unidad de capital +- Productividad total de los factores: eficiencia global + +**Eficiencia técnica vs económica:** + +**Eficiencia técnica:** +Producir la máxima cantidad posible con los recursos disponibles (no desperdiciar inputs). + +**Eficiencia económica:** +Producir al menor costo posible, considerando los precios de los factores. + +**Retornos a escala:** +- Crecientes: duplicar factores más que duplica la producción +- Constantes: duplicar factores duplica exactamente la producción +- Decrecientes: duplicar factores aumenta menos que el doble la producción` + } + ], + ejercicios: [ + { + id: 'quiz-bienes', + tipo: 'quiz', + titulo: 'Quiz de Clasificación de Bienes', + descripcion: 'Clasifica los siguientes bies según su tipo: normal, inferior o de lujo', + config: { + preguntas: [ + { + bien: 'Un automóvil de lujo', + opciones: ['Bien normal', 'Bien inferior', 'Bien de lujo'], + respuestaCorrecta: 'Bien de lujo', + explicacion: 'Los automóviles de lujo aumentan su demanda cuando aumenta el ingreso más que proporcionalmente' + }, + { + bien: 'Transporte público', + opciones: ['Bien normal', 'Bien inferior', 'Bien de lujo'], + respuestaCorrecta: 'Bien inferior', + explicacion: 'Cuando los ingresos aumentan, las personas tienden a sustituir el transporte público por automóviles privados' + }, + { + bien: 'Pan', + opciones: ['Bien normal', 'Bien inferior', 'Bien de lujo'], + respuestaCorrecta: 'Bien normal', + explicacion: 'El pan es un bien básico cuya demanda aumenta moderadamente con el ingreso' + }, + { + bien: 'Un yate', + opciones: ['Bien normal', 'Bien inferior', 'Bien de lujo'], + respuestaCorrecta: 'Bien de lujo', + explicacion: 'Los yates son bienes exclusivos que solo son accesibles con altos ingresos' + }, + { + bien: 'Productos de marca genérica', + opciones: ['Bien normal', 'Bien inferior', 'Bien de lujo'], + respuestaCorrecta: 'Bien inferior', + explicacion: 'Las marcas genéricas son sustituidas por marcas premium cuando aumentan los ingresos' + } + ], + tiempoLimite: 300, + mostrarRetroalimentacion: true + } + } + ] +}; + +export default factores; diff --git a/frontend/src/content/modulo1/index.ts b/frontend/src/content/modulo1/index.ts new file mode 100644 index 0000000..095135f --- /dev/null +++ b/frontend/src/content/modulo1/index.ts @@ -0,0 +1,65 @@ +/** + * Módulo 1: Fundamentos de Economía + * + * Este módulo cubre los conceptos básicos de economía, incluyendo: + * - Definición y ramas de la economía + * - Agentes económicos y su interacción + * - Factores de producción + * - Frontera de posibilidades de producción + * - Flujo circular de la renta + */ + +// Importar valores para uso local +import { introduccion } from './introduccion'; +import modulo1Introduccion from './introduccion'; +import { agentes } from './agentes'; +import modulo1Agentes from './agentes'; +import { factores } from './factores'; +import modulo1Factores from './factores'; +import { + ejercicios, + ejercicioDisyuntivas, + ejercicioClasificacion, + ejercicioFlujoCircular +} from './ejercicios'; +import modulo1Ejercicios from './ejercicios'; + +// Importar tipos para reexportar +import type { + EjercicioDetallado, + ModuloEjercicios +} from './ejercicios'; + +// Reexportar tipos +export type { + EjercicioDetallado, + ModuloEjercicios +}; + +// Exportar todo el módulo como un objeto consolidado +export const modulo1 = { + id: 'modulo-1', + titulo: 'Fundamentos de Economía', + descripcion: 'Introducción a los conceptos básicos de economía, agentes económicos, factores de producción y análisis de disyuntivas.', + duracionEstimada: '4-5 horas', + temas: [ + introduccion, + agentes, + factores + ], + ejercicios: ejercicios.ejercicios +}; + +// Reexportar contenidos para compatibilidad +export { introduccion, modulo1Introduccion }; +export { agentes, modulo1Agentes }; +export { factores, modulo1Factores }; +export { + ejercicios, + ejercicioDisyuntivas, + ejercicioClasificacion, + ejercicioFlujoCircular, + modulo1Ejercicios +}; + +export default modulo1; diff --git a/frontend/src/content/modulo1/introduccion.ts b/frontend/src/content/modulo1/introduccion.ts new file mode 100644 index 0000000..4b6ee29 --- /dev/null +++ b/frontend/src/content/modulo1/introduccion.ts @@ -0,0 +1,81 @@ +export interface Seccion { + titulo: string; + contenido: string; +} + +export interface Ejercicio { + id: string; + tipo: 'slider' | 'quiz' | 'juego'; + titulo: string; + descripcion: string; + config: Record; +} + +export interface ModuloContenido { + titulo: string; + contenido: Seccion[]; + ejercicios: Ejercicio[]; +} + +export const introduccion: ModuloContenido = { + titulo: 'Introducción a la Economía', + contenido: [ + { + titulo: '¿Qué es la Economía?', + contenido: `La economía es la ciencia social que estudia cómo los individuos, empresas y gobiernos toman decisiones sobre la asignación de recursos escasos para satisfacer necesidades ilimitadas. El término proviene del griego "oikonomia" (gestión del hogar). + +Los recursos disponibles (tierra, trabajo, capital) son limitados, mientras que las necesidades humanas son infinitas. Esta tensión entre lo que queremos y lo que podemos obtener constituye el problema fundamental de la economía.` + }, + { + titulo: 'Microeconomía vs Macroeconomía', + contenido: `La economía se divide en dos grandes ramas: + +**Microeconomía**: Estudia el comportamiento de agentes económicos individuales (hogares, empresas, mercados específicos). Analiza decisiones como: ¿Cuánto producirá una empresa? ¿Qué cantidad comprará un consumidor? ¿Cómo se determina el precio de un bien? + +**Macroeconomía**: Examina el funcionamiento de la economía en su conjunto. Estudia variables agregadas como el Producto Interno Bruto (PIB), la inflación, el desempleo y el crecimiento económico. Busca entender los ciclos económicos y las políticas para estabilizar la economía.` + }, + { + titulo: 'Las Tres Preguntas Fundamentales', + contenido: `Toda sociedad debe responder tres preguntas económicas básicas: + +1. **¿Qué producir?**: Determinar qué bienes y servicios se fabricarán dados los recursos limitados. ¿Más comida o más ropa? ¿Más hospitales o más escuelas? + +2. **¿Cómo producir?**: Elegir la combinación de factores de producción más eficiente. ¿Usar más trabajo manual o más maquinaria? ¿Tecnología intensiva o labor intensiva? + +3. **¿Para quién producir?**: Distribuir los bienes y servicios entre la población. ¿Quién recibe qué? ¿Basado en la capacidad de pago o en la necesidad?` + }, + { + titulo: 'La Frontera de Posibilidades de Producción (FPP)', + contenido: `La Frontera de Posibilidades de Producción (o Curva de Transformación) representa gráficamente las combinaciones máximas de dos bienes que una economía puede producir utilizando todos sus recursos y tecnología disponibles de manera eficiente. + +**Características importantes:** +- **Pendiente negativa**: Para producir más de un bien, debemos sacrificar algo del otro (costo de oportunidad) +- **Forma cóncava**: Los costos de oportunidad crecientes reflejan que los recursos no son perfectamente adaptables +- **Puntos sobre la curva**: Producción eficiente (todos los recursos utilizados) +- **Puntos dentro de la curva**: Ineficiencia o desempleo de recursos +- **Puntos fuera de la curva**: Inalcanzables con los recursos actuales + +**Desplazamientos de la FPP:** +- Hacia afuera: Crecimiento económico (más recursos o mejor tecnología) +- Hacia adentro: Destrucción de recursos o regresión tecnológica` + } + ], + ejercicios: [ + { + id: 'fpp-simulador', + tipo: 'slider', + titulo: 'Simulador de Disyuntivas', + descripcion: 'Ajusta los sliders para ver cómo la producción de dos bienes compite por recursos limitados', + config: { + bienes: [ + { nombre: 'Bien de Consumo', max: 100 }, + { nombre: 'Bien de Capital', max: 100 } + ], + mostrarCostoOportunidad: true, + mostrarFPP: true + } + } + ] +}; + +export default introduccion; diff --git a/frontend/src/content/modulo2/demanda.ts b/frontend/src/content/modulo2/demanda.ts new file mode 100644 index 0000000..6ab499c --- /dev/null +++ b/frontend/src/content/modulo2/demanda.ts @@ -0,0 +1,369 @@ +/** + * Módulo 2: Ley de la Demanda + * + * Este módulo cubre los fundamentos de la demanda en economía, + * incluyendo la ley de la demanda, factores determinantes y + * tipos de curvas de demanda. + */ + +// ============================================ +// TIPOS Y ENUMERACIONES +// ============================================ + +export type TipoBien = 'normal' | 'inferior' | 'lujo' | 'necesidad'; + +export type TipoRelacionPrecio = 'sustituto' | 'complementario' | 'independiente'; + +export enum DireccionDesplazamiento { + IZQUIERDA = 'izquierda', // Disminución de demanda + DERECHA = 'derecha', // Aumento de demanda + NINGUNO = 'ninguno' // Sin cambio +} + +// ============================================ +// INTERFACES +// ============================================ + +export interface PuntoDemanda { + precio: number; + cantidad: number; +} + +export interface CurvaDemanda { + id: string; + nombre: string; + puntos: PuntoDemanda[]; + descripcion: string; +} + +export interface FactorDesplazamiento { + nombre: string; + descripcion: string; + direccion: DireccionDesplazamiento; + ejemplo: string; + icono: string; +} + +export interface EjemploDemanda { + titulo: string; + bien: string; + escenario: string; + explicacion: string; + graficoData: PuntoDemanda[]; +} + +// ============================================ +// CONTENIDO TEÓRICO +// ============================================ + +export const definicionDemanda = { + titulo: 'Definición de Demanda', + definicion: 'La demanda es la cantidad de un bien o servicio que los consumidores están dispuestos y pueden comprar a diferentes precios durante un período específico, manteniendo constantes otros factores (ceteris paribus).', + + elementosClave: [ + { + elemento: 'Disposición a comprar', + descripcion: 'El consumidor debe querer adquirir el bien (preferencia)' + }, + { + elemento: 'Capacidad de compra', + descripcion: 'El consumidor debe tener los recursos necesarios (ingreso)' + }, + { + elemento: 'Precios variables', + descripcion: 'Se analiza la relación a diferentes niveles de precio' + }, + { + elemento: 'Período de tiempo', + descripcion: 'La demanda siempre se refiere a un período específico' + } + ], + + diferenciaDeseo: { + deseo: 'Quiero un auto de lujo (sin capacidad de compra)', + demanda: 'Puedo y quiero comprar 2 litros de leche semanales a $2 cada uno' + } +}; + +export const leyDemanda = { + titulo: 'Ley de la Demanda', + + enunciado: 'Existe una relación inversa entre el precio de un bien y la cantidad demandada: cuando el precio aumenta, la cantidad demandada disminuye, y viceversa.', + + explicacion: 'Esta relación inversa ocurre por dos efectos principales:', + + efectos: [ + { + nombre: 'Efecto Sustitución', + descripcion: 'Cuando el precio de un bien aumenta, los consumidores sustituyen hacia bienes alternativos más baratos que satisfacen necesidades similares.', + ejemplo: 'Si el precio de la carne de res sube, los consumidores compran más pollo o pescado.' + }, + { + nombre: 'Efecto Ingreso', + descripcion: 'Cuando el precio aumenta, el poder adquisitivo real del consumidor disminuye, permitiéndole comprar menos cantidad del bien.', + ejemplo: 'Si el precio de la gasolina sube, con el mismo presupuesto puedo comprar menos litros.' + } + ], + + representacionMatematica: { + funcion: 'Qd = f(P)', + donde: { + Qd: 'Cantidad demandada', + P: 'Precio del bien', + f: 'Función decreciente (pendiente negativa)' + }, + ejemploLineal: 'Qd = 100 - 2P', + interpretacion: 'Por cada aumento de $1 en el precio, la cantidad demandada disminuye en 2 unidades.' + } +}; + +// ============================================ +// FACTORES QUE DESPLAZAN LA CURVA DE DEMANDA +// ============================================ + +export const factoresDesplazamiento: FactorDesplazamiento[] = [ + { + nombre: 'Ingreso del consumidor', + descripcion: 'Cambios en el ingreso disponible de los consumidores', + direccion: DireccionDesplazamiento.DERECHA, + ejemplo: 'Un aumento de sueldo permite comprar más restaurantes (bien normal) o menos fideos instantáneos (bien inferior)', + icono: '💰' + }, + { + nombre: 'Gustos y preferencias', + descripcion: 'Cambios en los gustos de los consumidores por modas, publicidad o información', + direccion: DireccionDesplazamiento.DERECHA, + ejemplo: 'Una campaña de salud que promueve el consumo de agua aumenta la demanda de botellas', + icono: '❤️' + }, + { + nombre: 'Precio de bienes relacionados', + descripcion: 'Cambios en el precio de sustitutos o complementarios', + direccion: DireccionDesplazamiento.DERECHA, + ejemplo: 'Si sube el precio del café, aumenta la demanda de té (sustituto)', + icono: '🔗' + }, + { + nombre: 'Expectativas futuras', + descripcion: 'Expectativas sobre precios, ingresos o disponibilidad futura', + direccion: DireccionDesplazamiento.DERECHA, + ejemplo: 'Si se espera que suba el precio de la vivienda, la demanda actual aumenta', + icono: '🔮' + }, + { + nombre: 'Número de compradores', + descripcion: 'Cambios en la población o demografía del mercado', + direccion: DireccionDesplazamiento.DERECHA, + ejemplo: 'Llegada de turistas aumenta la demanda de hospedaje en temporada alta', + icono: '👥' + } +]; + +export const tiposBienesDemanda = { + bienNormal: { + nombre: 'Bien Normal', + definicion: 'Demanda aumenta cuando aumenta el ingreso', + relacionIngreso: 'Directa', + ejemplos: ['Ropa de marca', 'Restaurantes', 'Viajes', 'Electrónicos'], + elasticidadIngreso: 'E_Y > 0' + }, + + bienInferior: { + nombre: 'Bien Inferior', + definicion: 'Demanda disminuye cuando aumenta el ingreso', + relacionIngreso: 'Inversa', + ejemplos: ['Fideos instantáneos', 'Transporte público', 'Marcas genéricas', 'Comida rápida económica'], + elasticidadIngreso: 'E_Y < 0' + }, + + bienLujo: { + nombre: 'Bien de Lujo', + definicion: 'Demanda aumenta proporcionalmente más que el ingreso', + relacionIngreso: 'Directa (elástica)', + ejemplos: ['Yates', 'Joyería', 'Autos deportivos', 'Viajes en primera clase'], + elasticidadIngreso: 'E_Y > 1' + }, + + bienNecesidad: { + nombre: 'Bien de Necesidad', + definicion: 'Demanda aumenta menos proporcionalmente que el ingreso', + relacionIngreso: 'Directa (inelástica)', + ejemplos: ['Sal', 'Agua', 'Pan básico', 'Medicinas esenciales'], + elasticidadIngreso: '0 < E_Y < 1' + } +}; + +export const bienesRelacionados = { + sustitutos: { + nombre: 'Bienes Sustitutos', + definicion: 'Bienes que pueden reemplazarse mutuamente para satisfacer la misma necesidad', + relacionPrecio: 'Directa: si sube el precio de A, aumenta la demanda de B', + coeficiente: 'E_AB > 0', + ejemplos: [ + { bienA: 'Coca-Cola', bienB: 'Pepsi' }, + { bienA: 'Mantequilla', bienB: 'Margarina' }, + { bienA: 'Carne de res', bienB: 'Pollo' } + ] + }, + + complementarios: { + nombre: 'Bienes Complementarios', + definicion: 'Bienes que se consumen juntos para mayor satisfacción', + relacionPrecio: 'Inversa: si sube el precio de A, disminuye la demanda de B', + coeficiente: 'E_AB < 0', + ejemplos: [ + { bienA: 'Autos', bienB: 'Gasolina' }, + { bienA: 'Café', bienB: 'Azúcar' }, + { bienA: 'Impresora', bienB: 'Tinta' } + ] + } +}; + +// ============================================ +// CURVAS DE DEMANDA +// ============================================ + +export const curvaDemandaIndividual: CurvaDemanda = { + id: 'demanda-individual', + nombre: 'Curva de Demanda Individual', + descripcion: 'Muestra la relación entre precio y cantidad demandada por un solo consumidor', + puntos: [ + { precio: 10, cantidad: 1 }, + { precio: 8, cantidad: 3 }, + { precio: 6, cantidad: 5 }, + { precio: 4, cantidad: 7 }, + { precio: 2, cantidad: 9 } + ] +}; + +export const curvaDemandaMercado: CurvaDemanda = { + id: 'demanda-mercado', + nombre: 'Curva de Demanda de Mercado', + descripcion: 'Suma horizontal de todas las demandas individuales en el mercado', + puntos: [ + { precio: 10, cantidad: 100 }, + { precio: 8, cantidad: 300 }, + { precio: 6, cantidad: 500 }, + { precio: 4, cantidad: 700 }, + { precio: 2, cantidad: 900 } + ] +}; + +// ============================================ +// EJEMPLOS PRÁCTICOS +// ============================================ + +export const ejemplosDemanda: EjemploDemanda[] = [ + { + titulo: 'Demanda de Entradas de Cine', + bien: 'Entradas de cine', + escenario: 'El cine reduce sus precios de $12 a $8 durante los martes', + explicacion: 'Según la ley de la demanda, al disminuir el precio, más personas asistirán al cine. La cantidad demandada aumenta moviéndonos a lo largo de la curva.', + graficoData: [ + { precio: 12, cantidad: 100 }, + { precio: 10, cantidad: 150 }, + { precio: 8, cantidad: 220 }, + { precio: 6, cantidad: 300 }, + { precio: 4, cantidad: 400 } + ] + }, + { + titulo: 'Efecto de Ingreso en Restaurant', + bien: 'Comida en restaurantes', + escenario: 'Los habitantes de una ciudad reciben un aumento salarial del 20%', + explicacion: 'Los restaurantes son un bien normal. Al aumentar el ingreso, la demanda se desplaza a la derecha: a cada precio, se demanda más cantidad.', + graficoData: [ + { precio: 50, cantidad: 200 }, + { precio: 40, cantidad: 300 }, + { precio: 30, cantidad: 450 }, + { precio: 20, cantidad: 600 }, + { precio: 10, cantidad: 800 } + ] + }, + { + titulo: 'Sustitutos: Café vs Té', + bien: 'Té', + escenario: 'Una sequía en Brasil aumenta el precio del café en un 50%', + explicacion: 'Como café y té son sustitutos, al subir el precio del café, la demanda de té se desplaza a la derecha. Más consumidores optarán por té.', + graficoData: [ + { precio: 5, cantidad: 100 }, + { precio: 4, cantidad: 180 }, + { precio: 3, cantidad: 280 }, + { precio: 2, cantidad: 400 }, + { precio: 1, cantidad: 550 } + ] + } +]; + +// ============================================ +// MOVIMIENTO VS DESPLAZAMIENTO +// ============================================ + +export const diferenciaMovimientoDesplazamiento = { + titulo: 'Movimiento a lo largo vs Desplazamiento de la curva', + + movimiento: { + nombre: 'Movimiento a lo largo de la curva', + causa: 'Cambio en el precio del propio bien', + efecto: 'Cambio en la cantidad demandada (no en la demanda)', + direccion: 'Subida o bajada por la misma curva', + ejemplo: 'El precio del pan sube de $2 a $3 → compramos menos pan' + }, + + desplazamiento: { + nombre: 'Desplazamiento de la curva', + causa: 'Cambio en factores distintos al precio (ingreso, gustos, precios relacionados)', + efecto: 'Cambio en la demanda (toda la curva se mueve)', + direccionDerecha: 'Aumento de demanda (más cantidad a cada precio)', + direccionIzquierda: 'Disminución de demanda (menos cantidad a cada precio)', + ejemplo: 'Aumento de ingreso → compramos más restaurantes a todos los precios' + }, + + tablaComparativa: [ + { concepto: 'Causa', movimiento: 'Precio del bien cambia', desplazamiento: 'Otros factores cambian' }, + { concepto: 'Gráfico', movimiento: 'Nos movemos sobre la curva', desplazamiento: 'Curva se desplaza' }, + { concepto: 'Terminología', movimiento: 'Cambio en cantidad demandada', desplazamiento: 'Cambio en demanda' }, + { concepto: 'Ejemplo', movimiento: 'Precio de manzanas ↓', desplazamiento: 'Ingreso ↑ (bien normal)' } + ] +}; + +// ============================================ +// RESUMEN Y PUNTOS CLAVE +// ============================================ + +export const resumenDemanda = { + titulo: 'Resumen: Demanda', + + puntosClave: [ + 'La demanda requiere disposición Y capacidad de comprar', + 'La ley de la demanda establece relación inversa precio-cantidad', + 'La curva de demanda tiene pendiente negativa', + 'El desplazamiento de la curva es causado por factores no-precio', + 'Los bienes normales tienen demanda directa con el ingreso', + 'Los bienes inferiores tienen demanda inversa con el ingreso', + 'Sustitutos: precio de A ↑ → demanda de B ↑', + 'Complementarios: precio de A ↑ → demanda de B ↓' + ], + + formulaRecordatorio: { + leyDemanda: 'P ↑ → Qd ↓ (ceteris paribus)', + demandaMercado: 'Qd_mercado = Σ Qd_individuales', + elasticidadPrecio: 'Ed = (%ΔQd) / (%ΔP) < 0' + } +}; + +// Exportación por defecto para facilitar importaciones +export default { + definicion: definicionDemanda, + ley: leyDemanda, + factores: factoresDesplazamiento, + tiposBienes: tiposBienesDemanda, + bienesRelacionados, + curvas: { + individual: curvaDemandaIndividual, + mercado: curvaDemandaMercado + }, + ejemplos: ejemplosDemanda, + diferencia: diferenciaMovimientoDesplazamiento, + resumen: resumenDemanda +}; diff --git a/frontend/src/content/modulo2/ejercicios.ts b/frontend/src/content/modulo2/ejercicios.ts new file mode 100644 index 0000000..1e06202 --- /dev/null +++ b/frontend/src/content/modulo2/ejercicios.ts @@ -0,0 +1,855 @@ +/** + * Módulo 2: Ejercicios Interactivos + * + * Este módulo contiene la estructura de ejercicios para practicar + * los conceptos de oferta, demanda y equilibrio. + */ + +import type { PuntoMercado } from './equilibrio'; + +// ============================================ +// TIPOS Y ENUMERACIONES +// ============================================ + +export enum TipoEjercicio { + CONSTRUCTOR_CURVAS = 'constructor_curvas', + SIMULADOR_PRECIOS = 'simulador_precios', + IDENTIFICAR_SHOCKS = 'identificar_shocks' +} + +export enum Dificultad { + FACIL = 'facil', + MEDIO = 'medio', + DIFICIL = 'dificil' +} + +export enum TipoRespuesta { + MULTIPLE_CHOICE = 'multiple_choice', + ARRASTRAR_SOLTAR = 'arrastrar_soltar', + GRAFICO_INTERACTIVO = 'grafico_interactivo', + NUMERICO = 'numerico', + SELECCIONAR = 'seleccionar' +} + +export enum TipoShock { + DEMANDA_AUMENTA = 'demanda_aumenta', + DEMANDA_DISMINUYE = 'demanda_disminuye', + OFERTA_AUMENTA = 'oferta_aumenta', + OFERTA_DISMINUYE = 'oferta_disminuye', + AMBAS_OFERTA_DEMANDA = 'ambas_oferta_demanda' +} + +// ============================================ +// INTERFACES +// ============================================ + +export interface PuntoGrafico { + x: number; + y: number; + etiqueta?: string; + tipo: 'demanda' | 'oferta' | 'equilibrio' | 'interseccion'; +} + +export interface CurvaEjercicio { + id: string; + tipo: 'demanda' | 'oferta'; + puntos: PuntoGrafico[]; + color: string; + etiqueta: string; + editable: boolean; +} + +export interface OpcionRespuesta { + id: string; + texto: string; + correcta: boolean; + retroalimentacion?: string; +} + +export interface Pregunta { + id: string; + enunciado: string; + tipo: TipoRespuesta; + opciones?: OpcionRespuesta[]; + respuestaCorrecta?: number | string | string[]; + ayuda?: string; + puntos: number; +} + +export interface NivelEjercicio { + id: string; + nombre: string; + dificultad: Dificultad; + descripcion: string; + completado: boolean; + desbloqueado: boolean; +} + +export interface Ejercicio { + id: string; + tipo: TipoEjercicio; + titulo: string; + descripcion: string; + instrucciones: string[]; + dificultad: Dificultad; + niveles: NivelEjercicio[]; + preguntas?: Pregunta[]; + configuracionGrafico?: ConfiguracionGrafico; + datosSimulacion?: DatosSimulacion; + escenariosShock?: EscenarioShock[]; +} + +export interface ConfiguracionGrafico { + ancho: number; + alto: number; + escalaX: { min: number; max: number; etiqueta: string }; + escalaY: { min: number; max: number; etiqueta: string }; + curvasIniciales: CurvaEjercicio[]; + puntosObjetivo: PuntoGrafico[]; + toleranciaError: number; +} + +export interface DatosSimulacion { + funcionDemanda: string; + funcionOferta: string; + precioEquilibrio: number; + cantidadEquilibrio: number; + rangoPrecios: { min: number; max: number }; + controlesPrecio: { + precioMaximo: number | null; + precioMinimo: number | null; + }; +} + +export interface EscenarioShock { + id: string; + titulo: string; + descripcion: string; + mercado: string; + evento: string; + tipoShock: TipoShock; + magnitud: 'pequeña' | 'media' | 'grande'; + graficoInicial: { + demanda: PuntoMercado[]; + oferta: PuntoMercado[]; + }; + graficoFinal: { + demanda: PuntoMercado[]; + oferta: PuntoMercado[]; + }; + resultadoEsperado: { + precioCambio: 'sube' | 'baja' | 'igual'; + cantidadCambio: 'sube' | 'baja' | 'igual' | 'indeterminado'; + explicacion: string; + }; + opciones: OpcionRespuesta[]; +} + +export interface ProgresoEjercicio { + ejercicioId: string; + completado: boolean; + puntuacion: number; + tiempoSegundos: number; + intentos: number; + nivelesCompletados: string[]; +} + +// ============================================ +// EJERCICIO 1: CONSTRUCTOR DE CURVAS +// ============================================ + +export const constructorCurvas: Ejercicio = { + id: 'ejercicio-1-constructor-curvas', + tipo: TipoEjercicio.CONSTRUCTOR_CURVAS, + titulo: 'Constructor de Curvas de Oferta y Demanda', + descripcion: 'Construye curvas de oferta y demanda arrastrando puntos para entender sus pendientes y movimientos.', + instrucciones: [ + 'Observa los puntos dados en el gráfico', + 'Arrastra cada punto para formar una curva de demanda con pendiente negativa', + 'Arrastra los puntos de oferta para formar una curva con pendiente positiva', + 'Encuentra el punto de equilibrio donde se intersecan ambas curvas', + 'Verifica tu respuesta con el botón "Comprobar"' + ], + dificultad: Dificultad.FACIL, + + niveles: [ + { + id: 'nivel-1-basico', + nombre: 'Nivel 1: Trazado Básico', + dificultad: Dificultad.FACIL, + descripcion: 'Traza una curva de demanda simple con 3 puntos', + completado: false, + desbloqueado: true + }, + { + id: 'nivel-2-oferta-demanda', + nombre: 'Nivel 2: Ambas Curvas', + dificultad: Dificultad.FACIL, + descripcion: 'Traza curvas de oferta y demanda y encuentra el equilibrio', + completado: false, + desbloqueado: false + }, + { + id: 'nivel-3-desplazamientos', + nombre: 'Nivel 3: Desplazamientos', + dificultad: Dificultad.MEDIO, + descripcion: 'Muestra cómo cambian las curvas ante diferentes shocks', + completado: false, + desbloqueado: false + }, + { + id: 'nivel-4-precision', + nombre: 'Nivel 4: Precisión', + dificultad: Dificultad.DIFICIL, + descripcion: 'Traza curvas con tolerancia mínima de error', + completado: false, + desbloqueado: false + } + ], + + configuracionGrafico: { + ancho: 600, + alto: 400, + escalaX: { min: 0, max: 100, etiqueta: 'Cantidad (Q)' }, + escalaY: { min: 0, max: 50, etiqueta: 'Precio (P)' }, + toleranciaError: 5, + + curvasIniciales: [ + { + id: 'demanda-nivel-1', + tipo: 'demanda', + etiqueta: 'Demanda', + color: '#e74c3c', + editable: true, + puntos: [ + { x: 20, y: 40, tipo: 'demanda', etiqueta: 'A' }, + { x: 50, y: 25, tipo: 'demanda', etiqueta: 'B' }, + { x: 80, y: 10, tipo: 'demanda', etiqueta: 'C' } + ] + }, + { + id: 'oferta-nivel-2', + tipo: 'oferta', + etiqueta: 'Oferta', + color: '#27ae60', + editable: true, + puntos: [ + { x: 20, y: 10, tipo: 'oferta', etiqueta: 'D' }, + { x: 50, y: 25, tipo: 'oferta', etiqueta: 'E' }, + { x: 80, y: 40, tipo: 'oferta', etiqueta: 'F' } + ] + } + ], + + puntosObjetivo: [ + { x: 50, y: 25, tipo: 'equilibrio', etiqueta: 'E*' } + ] + }, + + preguntas: [ + { + id: 'pregunta-1-pendiente', + enunciado: '¿Qué tipo de pendiente tiene la curva de demanda?', + tipo: TipoRespuesta.MULTIPLE_CHOICE, + puntos: 10, + ayuda: 'Recuerda la ley de la demanda: cuando el precio sube, la cantidad demandada baja.', + opciones: [ + { id: 'a', texto: 'Pendiente positiva (sube de izquierda a derecha)', correcta: false, retroalimentacion: 'Incorrecto. La demanda tiene pendiente negativa.' }, + { id: 'b', texto: 'Pendiente negativa (baja de izquierda a derecha)', correcta: true, retroalimentacion: '¡Correcto! La curva de demanda tiene pendiente negativa por la ley de la demanda.' }, + { id: 'c', texto: 'Pendiente cero (línea horizontal)', correcta: false, retroalimentacion: 'Incorrecto. Eso sería oferta perfectamente elástica.' }, + { id: 'd', texto: 'Pendiente infinita (línea vertical)', correcta: false, retroalimentacion: 'Incorrecto. Eso sería oferta perfectamente inelástica.' } + ] + }, + { + id: 'pregunta-2-equilibrio', + enunciado: '¿Dónde ocurre el equilibrio de mercado?', + tipo: TipoRespuesta.MULTIPLE_CHOICE, + puntos: 15, + ayuda: 'El equilibrio es donde las decisiones de compradores y vendedores coinciden.', + opciones: [ + { id: 'a', texto: 'Donde la demanda es máxima', correcta: false }, + { id: 'b', texto: 'Donde la oferta es máxima', correcta: false }, + { id: 'c', texto: 'En la intersección de oferta y demanda', correcta: true, retroalimentacion: '¡Correcto! El equilibrio ocurre donde Qd = Qs.' }, + { id: 'd', texto: 'En el origen (0,0)', correcta: false } + ] + } + ] +}; + +// ============================================ +// EJERCICIO 2: SIMULADOR DE PRECIOS INTERVENIDOS +// ============================================ + +export const simuladorPrecios: Ejercicio = { + id: 'ejercicio-2-simulador-precios', + tipo: TipoEjercicio.SIMULADOR_PRECIOS, + titulo: 'Simulador de Precios Intervenidos', + descripcion: 'Ajusta precios máximos y mínimos para observar sus efectos en el mercado: escasez, superávit, y pérdida de bienestar.', + instrucciones: [ + 'Observa el equilibrio inicial del mercado', + 'Usa los controles deslizantes para establecer un precio máximo o mínimo', + 'Observa cómo cambian las cantidades demandadas y ofrecidas', + 'Identifica si se genera escasez o superávit', + 'Analiza el área de pérdida de bienestar (triángulo)', + 'Responde las preguntas sobre cada escenario' + ], + dificultad: Dificultad.MEDIO, + + niveles: [ + { + id: 'nivel-1-techo', + nombre: 'Nivel 1: Precio Máximo', + dificultad: Dificultad.FACIL, + descripcion: 'Establece un precio máximo y observa la escasez generada', + completado: false, + desbloqueado: true + }, + { + id: 'nivel-2-piso', + nombre: 'Nivel 2: Precio Mínimo', + dificultad: Dificultad.FACIL, + descripcion: 'Establece un precio mínimo y observa el superávit', + completado: false, + desbloqueado: false + }, + { + id: 'nivel-3-ambos', + nombre: 'Nivel 3: Combinado', + dificultad: Dificultad.MEDIO, + descripcion: 'Analiza escenarios con precios mínimos y máximos simultáneos', + completado: false, + desbloqueado: false + }, + { + id: 'nivel-4-calculo', + nombre: 'Nivel 4: Cálculo de Pérdida', + dificultad: Dificultad.DIFICIL, + descripcion: 'Calcula numéricamente la pérdida de bienestar', + completado: false, + desbloqueado: false + } + ], + + datosSimulacion: { + funcionDemanda: 'Qd = 100 - 2P', + funcionOferta: 'Qs = 20 + 2P', + precioEquilibrio: 20, + cantidadEquilibrio: 60, + rangoPrecios: { min: 0, max: 50 }, + controlesPrecio: { + precioMaximo: 15, + precioMinimo: 25 + } + }, + + preguntas: [ + { + id: 'sim-pregunta-1', + enunciado: 'Si estableces un precio máximo de $15 (debajo del equilibrio de $20), ¿qué ocurre?', + tipo: TipoRespuesta.MULTIPLE_CHOICE, + puntos: 20, + opciones: [ + { + id: 'a', + texto: 'Se genera un exceso de oferta (superávit)', + correcta: false, + retroalimentacion: 'Incorrecto. Un precio máximo por debajo del equilibrio genera escasez, no superávit.' + }, + { + id: 'b', + texto: 'Se genera un exceso de demanda (escasez)', + correcta: true, + retroalimentacion: '¡Correcto! A $15, Qd = 70 y Qs = 50, hay escasez de 20 unidades.' + }, + { + id: 'c', + texto: 'El mercado permanece en equilibrio', + correcta: false, + retroalimentacion: 'Incorrecto. El precio controlado impide alcanzar el equilibrio.' + }, + { + id: 'd', + texto: 'La cantidad transada aumenta', + correcta: false, + retroalimentacion: 'Incorrecto. La cantidad transada disminuye al nivel de la oferta (50).' + } + ] + }, + { + id: 'sim-pregunta-2', + enunciado: '¿Cuál es la cantidad transada con un precio máximo de $15?', + tipo: TipoRespuesta.NUMERICO, + puntos: 25, + respuestaCorrecta: 50, + ayuda: 'Con precio máximo, la cantidad transada es el menor entre cantidad demandada y cantidad ofrecida.' + }, + { + id: 'sim-pregunta-3', + enunciado: 'Si el gobierno establece un precio mínimo de $25, ¿qué cantidad demandarán los consumidores?', + tipo: TipoRespuesta.NUMERICO, + puntos: 25, + respuestaCorrecta: 50, + ayuda: 'Usa la función de demanda: Qd = 100 - 2P. Sustituye P = 25.' + }, + { + id: 'sim-pregunta-4', + enunciado: 'Selecciona todos los efectos de un precio máximo efectivo:', + tipo: TipoRespuesta.SELECCIONAR, + puntos: 30, + opciones: [ + { id: 'a', texto: 'Escasez del bien', correcta: true }, + { id: 'b', texto: 'Colas y listas de espera', correcta: true }, + { id: 'c', texto: 'Aumento de calidad', correcta: false }, + { id: 'd', texto: 'Mercados negros', correcta: true }, + { id: 'e', texto: 'Reducción de oferta', correcta: true }, + { id: 'f', texto: 'Mayor bienestar total', correcta: false } + ] + } + ] +}; + +// ============================================ +// EJERCICIO 3: IDENTIFICAR SHOCKS +// ============================================ + +export const identificarShocks: Ejercicio = { + id: 'ejercicio-3-identificar-shocks', + tipo: TipoEjercicio.IDENTIFICAR_SHOCKS, + titulo: 'Identificador de Shocks del Mercado', + descripcion: 'Analiza escenarios económicos reales e identifica si afectan la oferta, la demanda, ambas, y cómo cambian precio y cantidad de equilibrio.', + instrucciones: [ + 'Lee el escenario presentado cuidadosamente', + 'Identifica qué factor económico ha cambiado', + 'Determina si afecta a la oferta, demanda, o ambas', + 'Predice la dirección del cambio (aumenta/disminuye)', + 'Indica cómo cambiarán el precio y la cantidad de equilibrio', + 'Verifica tu respuesta y lee la explicación' + ], + dificultad: Dificultad.MEDIO, + + niveles: [ + { + id: 'nivel-1-shocks-simples', + nombre: 'Nivel 1: Shocks Simples', + dificultad: Dificultad.FACIL, + descripcion: 'Identifica cambios solo en oferta o solo en demanda', + completado: false, + desbloqueado: true + }, + { + id: 'nivel-2-magnitud', + nombre: 'Nivel 2: Magnitud de Cambios', + dificultad: Dificultad.MEDIO, + descripcion: 'Determina qué curva se desplaza más y efecto neto', + completado: false, + desbloqueado: false + }, + { + id: 'nivel-3-escenarios-reales', + nombre: 'Nivel 3: Escenarios Reales', + dificultad: Dificultad.MEDIO, + descripcion: 'Analiza noticias económicas reales', + completado: false, + desbloqueado: false + }, + { + id: 'nivel-4-complejos', + nombre: 'Nivel 4: Casos Complejos', + dificultad: Dificultad.DIFICIL, + descripcion: 'Escenarios donde oferta y demanda cambian simultáneamente', + completado: false, + desbloqueado: false + } + ], + + escenariosShock: [ + // Nivel 1 - Simples + { + id: 'shock-1-cafe', + titulo: 'Café y Clima', + descripcion: 'Una sequía severa afecta las principales zonas cafetaleras de Brasil.', + mercado: 'Café', + evento: 'Sequía en Brasil', + tipoShock: TipoShock.OFERTA_DISMINUYE, + magnitud: 'grande', + graficoInicial: { + demanda: [ + { precio: 10, cantidad: 100 }, + { precio: 8, cantidad: 120 }, + { precio: 6, cantidad: 140 } + ], + oferta: [ + { precio: 6, cantidad: 100 }, + { precio: 8, cantidad: 120 }, + { precio: 10, cantidad: 140 } + ] + }, + graficoFinal: { + demanda: [ + { precio: 10, cantidad: 100 }, + { precio: 8, cantidad: 120 }, + { precio: 6, cantidad: 140 } + ], + oferta: [ + { precio: 8, cantidad: 80 }, + { precio: 10, cantidad: 100 }, + { precio: 12, cantidad: 120 } + ] + }, + resultadoEsperado: { + precioCambio: 'sube', + cantidadCambio: 'baja', + explicacion: 'La sequía reduce la cosecha, desplazando la oferta a la izquierda. Menor cantidad disponible a cada precio.' + }, + opciones: [ + { id: 'a', texto: 'Demanda aumenta → P sube, Q sube', correcta: false }, + { id: 'b', texto: 'Oferta disminuye → P sube, Q baja', correcta: true }, + { id: 'c', texto: 'Oferta aumenta → P baja, Q sube', correcta: false }, + { id: 'd', texto: 'Demanda disminuye → P baja, Q baja', correcta: false } + ] + }, + { + id: 'shock-2-ingreso', + titulo: 'Restaurant y Bonos', + descripcion: 'El gobierno entrega bonos de $500 a todos los ciudadanos.', + mercado: 'Comida en restaurantes', + evento: 'Aumento de ingreso', + tipoShock: TipoShock.DEMANDA_AUMENTA, + magnitud: 'media', + graficoInicial: { + demanda: [ + { precio: 20, cantidad: 100 }, + { precio: 16, cantidad: 140 }, + { precio: 12, cantidad: 180 } + ], + oferta: [ + { precio: 12, cantidad: 100 }, + { precio: 16, cantidad: 140 }, + { precio: 20, cantidad: 180 } + ] + }, + graficoFinal: { + demanda: [ + { precio: 24, cantidad: 100 }, + { precio: 20, cantidad: 140 }, + { precio: 16, cantidad: 180 } + ], + oferta: [ + { precio: 12, cantidad: 100 }, + { precio: 16, cantidad: 140 }, + { precio: 20, cantidad: 180 } + ] + }, + resultadoEsperado: { + precioCambio: 'sube', + cantidadCambio: 'sube', + explicacion: 'Los restaurantes son un bien normal. Al aumentar el ingreso, la demanda se desplaza a la derecha.' + }, + opciones: [ + { id: 'a', texto: 'Demanda aumenta → P sube, Q sube', correcta: true }, + { id: 'b', texto: 'Demanda disminuye → P baja, Q baja', correcta: false }, + { id: 'c', texto: 'Oferta aumenta → P baja, Q sube', correcta: false }, + { id: 'd', texto: 'Oferta disminuye → P sube, Q baja', correcta: false } + ] + }, + // Nivel 2 - Magnitud + { + id: 'shock-3-tecnologia', + titulo: 'Autos Eléctricos', + descripcion: 'Nueva tecnología de baterías reduce costos de producción en 40%.', + mercado: 'Autos eléctricos', + evento: 'Avance tecnológico', + tipoShock: TipoShock.OFERTA_AUMENTA, + magnitud: 'grande', + graficoInicial: { + demanda: [ + { precio: 50000, cantidad: 10000 }, + { precio: 40000, cantidad: 20000 } + ], + oferta: [ + { precio: 30000, cantidad: 10000 }, + { precio: 40000, cantidad: 20000 } + ] + }, + graficoFinal: { + demanda: [ + { precio: 50000, cantidad: 10000 }, + { precio: 40000, cantidad: 20000 } + ], + oferta: [ + { precio: 20000, cantidad: 10000 }, + { precio: 28000, cantidad: 20000 } + ] + }, + resultadoEsperado: { + precioCambio: 'baja', + cantidadCambio: 'sube', + explicacion: 'La tecnología mejora la productividad, aumentando oferta. Precios más bajos y mayor cantidad.' + }, + opciones: [ + { id: 'a', texto: 'Oferta aumenta significativamente → P baja mucho, Q sube mucho', correcta: true }, + { id: 'b', texto: 'Oferta disminuye → P sube, Q baja', correcta: false }, + { id: 'c', texto: 'Demanda aumenta → P sube, Q sube', correcta: false }, + { id: 'd', texto: 'Demanda disminuye → P baja, Q baja', correcta: false } + ] + }, + // Nivel 3 - Escenarios reales + { + id: 'shock-4-petroleo', + titulo: 'Crisis del Petróleo', + descripcion: 'Conflicto en Medio Oriente reduce exportaciones de petróleo. Simultáneamente, países invierten en energías renovables.', + mercado: 'Petróleo', + evento: 'Reducción oferta + cambio gustos', + tipoShock: TipoShock.AMBAS_OFERTA_DEMANDA, + magnitud: 'media', + graficoInicial: { + demanda: [ + { precio: 100, cantidad: 80 }, + { precio: 80, cantidad: 100 } + ], + oferta: [ + { precio: 60, cantidad: 80 }, + { precio: 80, cantidad: 100 } + ] + }, + graficoFinal: { + demanda: [ + { precio: 100, cantidad: 70 }, + { precio: 80, cantidad: 90 } + ], + oferta: [ + { precio: 70, cantidad: 70 }, + { precio: 90, cantidad: 90 } + ] + }, + resultadoEsperado: { + precioCambio: 'sube', + cantidadCambio: 'baja', + explicacion: 'Oferta disminuye (conflicto) y demanda disminuye (alternativas). El precio sube (oferta cae más), cantidad cae (ambas).' + }, + opciones: [ + { id: 'a', texto: 'Oferta ↓ y Demanda ↓ → P indeterminado, Q baja', correcta: false }, + { id: 'b', texto: 'Oferta ↓ más que Demanda ↓ → P sube, Q baja', correcta: true }, + { id: 'c', texto: 'Oferta ↑ y Demanda ↑ → P indeterminado, Q sube', correcta: false }, + { id: 'd', texto: 'Solo oferta ↓ → P sube, Q baja', correcta: false } + ] + }, + { + id: 'shock-5-casa', + titulo: 'Mercado Inmobiliario', + descripcion: 'Tasas de interés bajan a mínimos históricos. Al mismo tiempo, regulaciones ambientales dificultan nueva construcción.', + mercado: 'Vivienda', + evento: 'Crédito barato + regulaciones', + tipoShock: TipoShock.AMBAS_OFERTA_DEMANDA, + magnitud: 'media', + graficoInicial: { + demanda: [ + { precio: 300000, cantidad: 1000 }, + { precio: 250000, cantidad: 1500 } + ], + oferta: [ + { precio: 200000, cantidad: 1000 }, + { precio: 250000, cantidad: 1500 } + ] + }, + graficoFinal: { + demanda: [ + { precio: 350000, cantidad: 1000 }, + { precio: 300000, cantidad: 1500 } + ], + oferta: [ + { precio: 250000, cantidad: 800 }, + { precio: 300000, cantidad: 1200 } + ] + }, + resultadoEsperado: { + precioCambio: 'sube', + cantidadCambio: 'indeterminado', + explicacion: 'Demanda aumenta (crédito barato) y oferta disminuye (regulaciones). El precio definitivamente sube, pero el efecto en cantidad depende de qué cambio sea mayor.' + }, + opciones: [ + { id: 'a', texto: 'Demanda ↑ y Oferta ↓ → P sube, Q indeterminado', correcta: true }, + { id: 'b', texto: 'Demanda ↓ y Oferta ↑ → P baja, Q indeterminado', correcta: false }, + { id: 'c', texto: 'Demanda ↑ y Oferta ↑ → P indeterminado, Q sube', correcta: false }, + { id: 'd', texto: 'Demanda ↓ y Oferta ↓ → P indeterminado, Q baja', correcta: false } + ] + }, + // Nivel 4 - Complejos + { + id: 'shock-6-pandemia', + titulo: 'Efecto Pandemia', + descripcion: 'Durante COVID-19: cierres de fábricas reducen producción de laptops, pero trabajo remoto aumenta demanda dramáticamente.', + mercado: 'Laptops', + evento: 'Pandemia', + tipoShock: TipoShock.AMBAS_OFERTA_DEMANDA, + magnitud: 'grande', + graficoInicial: { + demanda: [ + { precio: 800, cantidad: 50000 }, + { precio: 600, cantidad: 80000 } + ], + oferta: [ + { precio: 400, cantidad: 50000 }, + { precio: 600, cantidad: 80000 } + ] + }, + graficoFinal: { + demanda: [ + { precio: 1200, cantidad: 80000 }, + { precio: 1000, cantidad: 110000 } + ], + oferta: [ + { precio: 600, cantidad: 40000 }, + { precio: 800, cantidad: 60000 } + ] + }, + resultadoEsperado: { + precioCambio: 'sube', + cantidadCambio: 'indeterminado', + explicacion: 'Oferta disminuyó (cierres) pero demanda aumentó mucho más (trabajo remoto). Precios subieron significativamente. La cantidad pudo subir o bajar según magnitudes relativas.' + }, + opciones: [ + { id: 'a', texto: 'Demanda ↑↑↑ más que Oferta ↓ → P sube mucho, Q probablemente sube', correcta: true }, + { id: 'b', texto: 'Demanda y Oferta disminuyen → P indeterminado, Q baja', correcta: false }, + { id: 'c', texto: 'Solo demanda aumenta → P sube, Q sube', correcta: false }, + { id: 'd', texto: 'Solo oferta disminuye → P sube, Q baja', correcta: false } + ] + } + ] +}; + +// ============================================ +// FUNCIÓN AUXILIAR: CALCULAR RESULTADO +// ============================================ + +export function calcularResultadoShock( + shockOferta: 'aumenta' | 'disminuye' | 'sin_cambio', + shockDemanda: 'aumenta' | 'disminuye' | 'sin_cambio', + _magnitudOferta: 'mayor' | 'menor' | 'igual', + _magnitudDemanda: 'mayor' | 'menor' | 'igual' +): { precio: 'sube' | 'baja' | 'igual' | 'indeterminado'; cantidad: 'sube' | 'baja' | 'igual' | 'indeterminado' } { + // Lógica simplificada para determinar resultado + let precio: 'sube' | 'baja' | 'igual' | 'indeterminado' = 'igual'; + let cantidad: 'sube' | 'baja' | 'igual' | 'indeterminado' = 'igual'; + + // Análisis de precio + if (shockOferta === 'aumenta' && shockDemanda === 'aumenta') { + precio = 'indeterminado'; + } else if (shockOferta === 'disminuye' && shockDemanda === 'disminuye') { + precio = 'indeterminado'; + } else if (shockOferta === 'aumenta' && shockDemanda === 'disminuye') { + precio = 'baja'; + } else if (shockOferta === 'disminuye' && shockDemanda === 'aumenta') { + precio = 'sube'; + } else if (shockDemanda === 'aumenta') { + precio = 'sube'; + } else if (shockDemanda === 'disminuye') { + precio = 'baja'; + } else if (shockOferta === 'aumenta') { + precio = 'baja'; + } else if (shockOferta === 'disminuye') { + precio = 'sube'; + } + + // Análisis de cantidad + if (shockOferta === 'aumenta' && shockDemanda === 'disminuye') { + cantidad = 'indeterminado'; + } else if (shockOferta === 'disminuye' && shockDemanda === 'aumenta') { + cantidad = 'indeterminado'; + } else if (shockOferta === 'aumenta' && shockDemanda === 'aumenta') { + cantidad = 'sube'; + } else if (shockOferta === 'disminuye' && shockDemanda === 'disminuye') { + cantidad = 'baja'; + } else if (shockOferta === 'aumenta') { + cantidad = 'sube'; + } else if (shockOferta === 'disminuye') { + cantidad = 'baja'; + } else if (shockDemanda === 'aumenta') { + cantidad = 'sube'; + } else if (shockDemanda === 'disminuye') { + cantidad = 'baja'; + } + + return { precio, cantidad }; +} + +// ============================================ +// DATOS DE PROGRESO EJEMPLO +// ============================================ + +export const progresoInicial: ProgresoEjercicio[] = [ + { + ejercicioId: 'ejercicio-1-constructor-curvas', + completado: false, + puntuacion: 0, + tiempoSegundos: 0, + intentos: 0, + nivelesCompletados: [] + }, + { + ejercicioId: 'ejercicio-2-simulador-precios', + completado: false, + puntuacion: 0, + tiempoSegundos: 0, + intentos: 0, + nivelesCompletados: [] + }, + { + ejercicioId: 'ejercicio-3-identificar-shocks', + completado: false, + puntuacion: 0, + tiempoSegundos: 0, + intentos: 0, + nivelesCompletados: [] + } +]; + +// ============================================ +// RESUMEN DE EJERCICIOS +// ============================================ + +export const resumenEjercicios = { + titulo: 'Ejercicios del Módulo 2', + descripcion: 'Practica los conceptos de oferta, demanda y equilibrio con estos ejercicios interactivos.', + + ejercicios: [ + { + id: 'ejercicio-1', + nombre: 'Constructor de Curvas', + habilidades: ['Trazar curvas', 'Identificar pendientes', 'Encontrar equilibrio'], + tiempoEstimado: '10-15 minutos' + }, + { + id: 'ejercicio-2', + nombre: 'Simulador de Precios', + habilidades: ['Controles de precio', 'Calcular desequilibrios', 'Pérdida de bienestar'], + tiempoEstimado: '15-20 minutos' + }, + { + id: 'ejercicio-3', + nombre: 'Identificar Shocks', + habilidades: ['Análisis de escenarios', 'Desplazamientos de curvas', 'Predicción de cambios'], + tiempoEstimado: '20-25 minutos' + } + ], + + consejos: [ + 'Comienza con el Ejercicio 1 si eres principiante', + 'Revisa la teoría antes de intentar los ejercicios', + 'Usa papel y lápiz para hacer cálculos', + 'No te preocupes por errores, son parte del aprendizaje', + 'Repite los ejercicios hasta dominarlos' + ] +}; + +// Exportación por defecto +export default { + constructorCurvas, + simuladorPrecios, + identificarShocks, + progresoInicial, + resumen: resumenEjercicios, + utilidades: { + calcularResultadoShock + } +}; diff --git a/frontend/src/content/modulo2/equilibrio.ts b/frontend/src/content/modulo2/equilibrio.ts new file mode 100644 index 0000000..9fa66b1 --- /dev/null +++ b/frontend/src/content/modulo2/equilibrio.ts @@ -0,0 +1,608 @@ +/** + * Módulo 2: Equilibrio de Mercado + * + * Este módulo cubre el concepto de equilibrio, desequilibrios, + * y controles de precios en los mercados. + */ + +// ============================================ +// TIPOS Y ENUMERACIONES +// ============================================ + +export enum TipoDesequilibrio { + EXCESO_OFERTA = 'exceso_oferta', // Superávit + EXCESO_DEMANDA = 'exceso_demanda', // Escasez + EQUILIBRIO = 'equilibrio' +} + +export enum TipoControlPrecio { + PRECIO_MAXIMO = 'precio_maximo', // Techo + PRECIO_MINIMO = 'precio_minimo', // Piso + NINGUNO = 'ninguno' +} + +export enum EfectoControlPrecio { + ESCASEZ = 'escasez', + SUPERAVIT = 'superavit', + MERCADO_NEGRO = 'mercado_negro', + DESEMPLEO = 'desempleo', + RACIONAMIENTO = 'racionamiento', + NINGUNO = 'ninguno' +} + +// ============================================ +// INTERFACES +// ============================================ + +export interface PuntoMercado { + precio: number; + cantidad: number; +} + +export interface EquilibrioMercado { + precioEquilibrio: number; + cantidadEquilibrio: number; + punto: PuntoMercado; + excedenteConsumidor: number; + excedenteProductor: number; + bienestarTotal: number; +} + +export interface CurvaMercado { + demanda: PuntoMercado[]; + oferta: PuntoMercado[]; +} + +export interface Desequilibrio { + tipo: TipoDesequilibrio; + precioActual: number; + cantidadDemandada: number; + cantidadOfrecida: number; + diferencia: number; + magnitud: number; + presionPrecio: 'subir' | 'bajar' | 'ninguna'; +} + +export interface ControlPrecio { + tipo: TipoControlPrecio; + nivel: number; + precioEquilibrio: number; + efectivo: boolean; + efectos: EfectoControlPrecio[]; + cantidadTransada: number; + perdidaBienestar: number; +} + +export interface EjemploEquilibrio { + titulo: string; + mercado: string; + descripcion: string; + datos: CurvaMercado; + equilibrio: EquilibrioMercado; + escenarios: EscenarioDesequilibrio[]; +} + +export interface EscenarioDesequilibrio { + nombre: string; + precio: number; + tipo: TipoDesequilibrio; + explicacion: string; + resultado: string; +} + +export interface HistoriaPrecio { + periodo: string; + descripcion: string; + precioControl: number; + precioEquilibrio: number; + consecuencias: string[]; + lecciones: string; +} + +// ============================================ +// CONTENIDO TEÓRICO +// ============================================ + +export const definicionEquilibrio = { + titulo: 'Equilibrio de Mercado', + + definicion: 'El equilibrio de mercado es una situación en la que la cantidad demandada de un bien es igual a la cantidad ofrecida. En este punto, no hay tendencia al cambio: ni compradores ni vendedores tienen incentivo para alterar sus decisiones.', + + caracteristicas: [ + { + caracteristica: 'Cantidad demandada = Cantidad ofrecida', + explicacion: 'No hay exceso de oferta ni de demanda' + }, + { + caracteristica: 'Precio estable', + explicacion: 'No hay presiones para que el precio suba o baje' + }, + { + caracteristica: 'Eficiencia', + explicacion: 'Se maximiza el bienestar social (excedente total)' + }, + { + caracteristica: 'Voluntad de intercambio', + explicacion: 'Todos los intercambios mutuamente beneficiosos ocurren' + } + ], + + mecanismoAjuste: { + titulo: 'Mecanismo de Ajuste al Equilibrio', + proceso: [ + { + paso: 1, + situacion: 'Precio por encima del equilibrio', + resultado: 'Exceso de oferta (superávit)', + ajuste: 'Vendedores compiten reduciendo precios para vender excedentes' + }, + { + paso: 2, + situacion: 'Precio por debajo del equilibrio', + resultado: 'Exceso de demanda (escasez)', + ajuste: 'Compradores compiten ofreciendo precios más altos' + }, + { + paso: 3, + situacion: 'Precio de equilibrio', + resultado: 'Cantidad demandada = Cantidad ofrecida', + ajuste: 'No hay presiones adicionales; mercado está en equilibrio' + } + ] + }, + + representacionMatematica: { + condicion: 'Qd = Qs', + ejemplo: { + demanda: 'Qd = 100 - 2P', + oferta: 'Qs = 20 + 3P', + resolucion: [ + '100 - 2P = 20 + 3P', + '80 = 5P', + 'P* = 16 (precio de equilibrio)', + 'Q* = 100 - 2(16) = 68 (cantidad de equilibrio)' + ] + } + } +}; + +// ============================================ +// EXCEDENTES DEL CONSUMIDOR Y PRODUCTOR +// ============================================ + +export const excedentesMercado = { + titulo: 'Bienestar en el Equilibrio', + + excedenteConsumidor: { + nombre: 'Excedente del Consumidor (EC)', + definicion: 'Diferencia entre lo que los consumidores están dispuestos a pagar y lo que realmente pagan', + formula: 'EC = Valoración - Precio pagado', + calculo: 'Área bajo la curva de demanda y arriba del precio de equilibrio', + interpretacion: 'Beneficio neto que obtienen los consumidores del intercambio', + ejemplo: 'Dispuesto a pagar $50, pago $30 → Excedente = $20' + }, + + excedenteProductor: { + nombre: 'Excedente del Productor (EP)', + definicion: 'Diferencia entre el precio que reciben los productores y el costo mínimo al que estarían dispuestos a vender', + formula: 'EP = Precio recibido - Costo de producción', + calculo: 'Área arriba de la curva de oferta y debajo del precio de equilibrio', + interpretacion: 'Beneficio neto que obtienen los productores del intercambio', + ejemplo: 'Dispuesto a vender a $20, recibo $30 → Excedente = $10' + }, + + bienestarTotal: { + nombre: 'Bienestar Total (Excedente Total)', + definicion: 'Suma de excedentes del consumidor y del productor', + formula: 'BT = EC + EP', + propiedad: 'En equilibrio competitivo, el bienestar total se maximiza', + perdida: 'Cualquier desviación del equilibrio genera pérdida de bienestar' + } +}; + +// ============================================ +// DESEQUILIBRIOS DE MERCADO +// ============================================ + +export const excesoOferta: Desequilibrio = { + tipo: TipoDesequilibrio.EXCESO_OFERTA, + precioActual: 25, + cantidadDemandada: 40, + cantidadOfrecida: 80, + diferencia: 40, + magnitud: 40, + presionPrecio: 'bajar' +}; + +export const excesoDemanda: Desequilibrio = { + tipo: TipoDesequilibrio.EXCESO_DEMANDA, + precioActual: 10, + cantidadDemandada: 90, + cantidadOfrecida: 30, + diferencia: 60, + magnitud: 60, + presionPrecio: 'subir' +}; + +export const tiposDesequilibrio = { + excesoOferta: { + nombre: 'Exceso de Oferta (Superávit)', + definicion: 'Cantidad ofrecida > Cantidad demandada', + causas: [ + 'Precio por encima del equilibrio', + 'Aumento repentino de producción', + 'Caída inesperada de la demanda' + ], + consecuencias: [ + 'Acumulación de inventarios', + 'Presión a la baja en precios', + 'Posibles quiebras si persiste', + 'Competencia agresiva entre vendedores' + ], + ejemplos: [ + 'Viviendas sin vender después de una burbuja', + 'Excedentes agrícolas después de buenas cosechas', + 'Autos en concesionarias durante recesión' + ], + grafico: { + descripcion: 'A P > P*, Qs > Qd', + areaSuperavit: 'Distancia horizontal entre curvas al precio dado' + } + }, + + excesoDemanda: { + nombre: 'Exceso de Demanda (Escasez)', + definicion: 'Cantidad demandada > Cantidad ofrecida', + causas: [ + 'Precio por debajo del equilibrio', + 'Aumento repentino de la demanda', + 'Caída inesperada de la oferta' + ], + consecuencias: [ + 'Colas y listas de espera', + 'Presión al alza en precios', + 'Racionamiento de productos', + 'Mercados negros', + 'Malestar social' + ], + ejemplos: [ + 'Gasolina en crisis (colas en bomba)', + 'Entradas para conciertos populares', + 'Vivienda asequible en ciudades caras', + 'Productos básicos con precios controlados' + ], + grafico: { + descripcion: 'A P < P*, Qd > Qs', + areaEscasez: 'Distancia horizontal entre curvas al precio dado' + } + } +}; + +// ============================================ +// CONTROLES DE PRECIO +// ============================================ + +export const controlesPrecio = { + titulo: 'Controles de Precio', + + introduccion: 'Los gobiernos a veces intervienen estableciendo precios máximos o mínimos que difieren del precio de equilibrio de mercado.', + + precioMaximo: { + nombre: 'Precio Máximo (Techo)', + definicion: 'Precio legal más alto al que se puede vender un bien', + condicionEfectivo: 'Debe estar DEBAJO del precio de equilibrio', + efectos: { + cuandoEsEfectivo: [ + 'Escasez persistente (Qd > Qs)', + 'Racionamiento del bien', + 'Colas y esperas', + 'Mercados negros', + 'Reducción de calidad', + 'Pérdida de bienestar' + ], + cuandoNoEsEfectivo: [ + 'Precio máximo > precio de equilibrio', + 'Mercado opera normalmente', + 'Sin efectos sobre cantidad transada' + ] + }, + ejemplos: [ + { caso: 'Alquileres', ubicacion: 'Nueva York, San Francisco', resultado: 'Escasez de vivienda, subarriendos' }, + { caso: 'Gasolina', ubicacion: 'Estados Unidos 1970s', resultado: 'Largas colas, mercado negro' }, + { caso: 'Productos básicos', ubicacion: 'Venezuela', resultado: 'Desabastecimiento, contrabando' } + ] + }, + + precioMinimo: { + nombre: 'Precio Mínimo (Piso)', + definicion: 'Precio legal más bajo al que se puede vender un bien', + condicionEfectivo: 'Debe estar ARRIBA del precio de equilibrio', + efectos: { + cuandoEsEfectivo: [ + 'Superávit persistente (Qs > Qd)', + 'Acumulación de inventarios', + 'Desperdicio de recursos', + 'Mercados negros (venta a precio menor)', + 'Pérdida de bienestar' + ], + cuandoNoEsEfectivo: [ + 'Precio mínimo < precio de equilibrio', + 'Mercado opera normalmente', + 'Sin efectos sobre cantidad transada' + ] + }, + ejemplos: [ + { caso: 'Salario mínimo', ubicacion: 'Mayoría de países', resultado: 'Desempleo potencial en trabajadores no calificados' }, + { caso: 'Precios agrícolas', ubicacion: 'Unión Europea', resultado: 'Superávits, gasto gubernamental' }, + { caso: 'Alcohol/tabaco', ubicacion: 'Políticas de salud', resultado: 'Menor consumo, contrabando' } + ] + } +}; + +// ============================================ +// EJEMPLOS DE CONTROLES HISTÓRICOS +// ============================================ + +export const historiasControlesPrecio: HistoriaPrecio[] = [ + { + periodo: '1971-1974', + descripcion: 'Control de precios de gasolina en EE.UU.', + precioControl: 0.36, + precioEquilibrio: 0.55, + consecuencias: [ + 'Largas colas en gasolineras (hasta 4 horas)', + 'Racionamiento por día par/impar', + 'Mercado negro de gasolina', + 'Violencia en gasolineras', + 'Desabastecimiento regional' + ], + lecciones: 'Los controles de precios generan escasez cuando están por debajo del equilibrio' + }, + { + periodo: '1946-1947', + descripcion: 'Control de alquileres en Nueva York', + precioControl: 75, + precioEquilibrio: 100, + consecuencias: [ + 'Reducción de mantenimiento de edificios', + 'Conversión de apartamentos a condominios', + 'Mercado negro (pagos bajo mesa)', + 'Escasez crónica de vivienda', + 'Subarriendos a precios más altos' + ], + lecciones: 'Precios máximos reducen la calidad y cantidad de oferta a largo plazo' + }, + { + periodo: 'Actual', + descripcion: 'Salario mínimo en diferentes países', + precioControl: 15, + precioEquilibrio: 12, + consecuencias: [ + 'Reducción de contratación de jóvenes', + 'Automatización de trabajos (kioscos)', + 'Reducción de horas trabajadas', + 'Beneficio para trabajadores que mantienen empleo', + 'Posible aumento de precios' + ], + lecciones: 'Los precios mínimos crean desempleo cuando están por encima del equilibrio, pero benefician a quienes mantienen el empleo' + } +]; + +// ============================================ +// EJEMPLOS PRÁCTICOS DE EQUILIBRIO +// ============================================ + +export const ejemplosEquilibrio: EjemploEquilibrio[] = [ + { + titulo: 'Mercado de Manzanas', + mercado: 'Manzanas', + descripcion: 'Análisis del equilibrio en un mercado agrícola simple', + datos: { + demanda: [ + { precio: 1, cantidad: 90 }, + { precio: 2, cantidad: 80 }, + { precio: 3, cantidad: 70 }, + { precio: 4, cantidad: 60 }, + { precio: 5, cantidad: 50 } + ], + oferta: [ + { precio: 1, cantidad: 10 }, + { precio: 2, cantidad: 30 }, + { precio: 3, cantidad: 50 }, + { precio: 4, cantidad: 70 }, + { precio: 5, cantidad: 90 } + ] + }, + equilibrio: { + precioEquilibrio: 3.5, + cantidadEquilibrio: 60, + punto: { precio: 3.5, cantidad: 60 }, + excedenteConsumidor: 45, + excedenteProductor: 45, + bienestarTotal: 90 + }, + escenarios: [ + { + nombre: 'Precio por encima del equilibrio', + precio: 5, + tipo: TipoDesequilibrio.EXCESO_OFERTA, + explicacion: 'A $5, los productores ofrecen 90 unidades pero solo se demandan 50', + resultado: 'Superávit de 40 unidades. Presión a la baja en precios.' + }, + { + nombre: 'Precio por debajo del equilibrio', + precio: 2, + tipo: TipoDesequilibrio.EXCESO_DEMANDA, + explicacion: 'A $2, se demandan 80 unidades pero solo se ofrecen 30', + resultado: 'Escasez de 50 unidades. Colas y presión al alza.' + } + ] + }, + { + titulo: 'Mercado Laboral: Desempleo', + mercado: 'Trabajo no calificado', + descripcion: 'Efecto del salario mínimo en el empleo', + datos: { + demanda: [ + { precio: 4, cantidad: 100 }, + { precio: 6, cantidad: 80 }, + { precio: 8, cantidad: 60 }, + { precio: 10, cantidad: 40 }, + { precio: 12, cantidad: 20 } + ], + oferta: [ + { precio: 4, cantidad: 20 }, + { precio: 6, cantidad: 40 }, + { precio: 8, cantidad: 60 }, + { precio: 10, cantidad: 80 }, + { precio: 12, cantidad: 100 } + ] + }, + equilibrio: { + precioEquilibrio: 8, + cantidadEquilibrio: 60, + punto: { precio: 8, cantidad: 60 }, + excedenteConsumidor: 180, + excedenteProductor: 180, + bienestarTotal: 360 + }, + escenarios: [ + { + nombre: 'Salario mínimo efectivo', + precio: 12, + tipo: TipoDesequilibrio.EXCESO_OFERTA, + explicacion: 'Salario mínimo de $12 está por encima del equilibrio de $8', + resultado: '100 personas buscan trabajo, pero solo 20 empleos. Desempleo de 80 personas.' + } + ] + } +]; + +// ============================================ +// TABLA COMPARATIVA: CONTROLES DE PRECIO +// ============================================ + +export const tablaComparativaControles = { + titulo: 'Comparación de Controles de Precio', + + filas: [ + { + caracteristica: 'Nombre', + precioMaximo: 'Techo, Precio Máximo', + precioMinimo: 'Piso, Precio Mínimo' + }, + { + caracteristica: 'Ubicación', + precioMaximo: 'Debajo del equilibrio', + precioMinimo: 'Arriba del equilibrio' + }, + { + caracteristica: 'Desequilibrio', + precioMaximo: 'Exceso de demanda (escasez)', + precioMinimo: 'Exceso de oferta (superávit)' + }, + { + caracteristica: 'Cantidad transada', + precioMaximo: 'Determinada por oferta (Qs)', + precioMinimo: 'Determinada por demanda (Qd)' + }, + { + caracteristica: 'Efectos secundarios', + precioMaximo: 'Colas, mercado negro, baja calidad', + precioMinimo: 'Inventarios, desperdicio, mercado negro' + }, + { + caracteristica: 'Ejemplo común', + precioMaximo: 'Alquileres, gasolina', + precioMinimo: 'Salarios mínimos, precios agrícolas' + } + ] +}; + +// ============================================ +// PÉRDIDA DE BIENESTAR (DEADWEIGHT LOSS) +// ============================================ + +export const perdidaBienestar = { + titulo: 'Pérdida de Eficiencia por Controles', + + definicion: 'La pérdida de peso muerto (deadweight loss) es la reducción en el bienestar total que ocurre cuando el mercado no alcanza el equilibrio. Representa transacciones mutuamente beneficiosas que no ocurren.', + + calculoPrecioMaximo: { + pasos: [ + 'En equilibrio: BT = EC + EP', + 'Con precio máximo: BT_control = EC_nuevo + EP_nuevo', + 'Pérdida = BT_equilibrio - BT_control', + 'Representada por el triángulo entre cantidad transada y cantidad de equilibrio' + ], + areas: [ + 'Pérdida de excedente del consumidor (transacciones perdidas)', + 'Pérdida de excedente del productor (transacciones perdidas)', + 'Área total: triángulo entre curvas de oferta y demanda' + ] + }, + + calculoPrecioMinimo: { + pasos: [ + 'En equilibrio: BT = EC + EP', + 'Con precio mínimo: BT_control = EC_nuevo + EP_nuevo', + 'Pérdida = BT_equilibrio - BT_control', + 'Representada por el triángulo entre cantidad demandada y cantidad de equilibrio' + ], + areas: [ + 'Pérdida por producción ineficiente (costos > beneficios)', + 'Pérdida por consumo perdido (beneficios > costos)', + 'Área total: triángulo entre curvas de oferta y demanda' + ] + } +}; + +// ============================================ +// RESUMEN +// ============================================ + +export const resumenEquilibrio = { + titulo: 'Resumen: Equilibrio de Mercado', + + puntosClave: [ + 'Equilibrio: Qd = Qs, sin tendencia al cambio', + 'Precio de equilibrio estable sin presiones', + 'Exceso de oferta: P > P* → presión a la baja', + 'Exceso de demanda: P < P* → presión al alza', + 'Precio máximo efectivo: P_max < P* → escasez', + 'Precio mínimo efectivo: P_min > P* → superávit', + 'Controles de precio generan pérdida de bienestar', + 'Mercados tienden al equilibrio mediante ajustes de precio' + ], + + formulasRecordatorio: { + condicionEquilibrio: 'Qd = Qs', + excesoOferta: 'Qs - Qd > 0 cuando P > P*', + excesoDemanda: 'Qd - Qs > 0 cuando P < P*', + bienestarTotal: 'BT = EC + EP', + perdidaBienestar: 'DWL = BT_equilibrio - BT_control' + }, + + mapaConceptual: { + centro: 'Equilibrio', + ramas: [ + { nombre: 'Condición', elementos: ['Qd = Qs', 'P estable', 'Eficiencia máxima'] }, + { nombre: 'Desequilibrios', elementos: ['Exceso oferta (superávit)', 'Exceso demanda (escasez)'] }, + { nombre: 'Controles', elementos: ['Precio máximo → escasez', 'Precio mínimo → superávit'] }, + { nombre: 'Bienestar', elementos: ['Excedente consumidor', 'Excedente productor', 'Pérdida peso muerto'] } + ] + } +}; + +// Exportación por defecto +export default { + definicion: definicionEquilibrio, + excedentes: excedentesMercado, + desequilibrios: tiposDesequilibrio, + controles: controlesPrecio, + historias: historiasControlesPrecio, + ejemplos: ejemplosEquilibrio, + comparativa: tablaComparativaControles, + perdidaBienestar, + resumen: resumenEquilibrio +}; diff --git a/frontend/src/content/modulo2/oferta.ts b/frontend/src/content/modulo2/oferta.ts new file mode 100644 index 0000000..7e67074 --- /dev/null +++ b/frontend/src/content/modulo2/oferta.ts @@ -0,0 +1,487 @@ +/** + * Módulo 2: Ley de la Oferta + * + * Este módulo cubre los fundamentos de la oferta en economía, + * incluyendo la ley de la oferta, factores determinantes y + * comportamiento de los productores. + */ + +// ============================================ +// TIPOS Y ENUMERACIONES +// ============================================ + +export enum DireccionDesplazamientoOferta { + IZQUIERDA = 'izquierda', // Disminución de oferta + DERECHA = 'derecha', // Aumento de oferta + NINGUNO = 'ninguno' // Sin cambio +} + +export enum HorizonteTemporal { + CORTO_PLAZO = 'corto_plazo', + LARGO_PLAZO = 'largo_plazo' +} + +export enum TipoMercado { + COMPETENCIA_PERFECTA = 'competencia_perfecta', + MONOPOLIO = 'monopolio', + OLIGOPOLIO = 'oligopolio', + COMPETENCIA_MONOPOLISTICA = 'competencia_monopolistica' +} + +// ============================================ +// INTERFACES +// ============================================ + +export interface PuntoOferta { + precio: number; + cantidad: number; +} + +export interface CurvaOferta { + id: string; + nombre: string; + puntos: PuntoOferta[]; + descripcion: string; + horizonteTemporal: HorizonteTemporal; +} + +export interface FactorDesplazamientoOferta { + nombre: string; + descripcion: string; + direccion: DireccionDesplazamientoOferta; + ejemplo: string; + icono: string; + mecanismo: string; +} + +export interface CostoProduccion { + categoria: string; + componentes: string[]; + impactoOferta: string; +} + +export interface EjemploOferta { + titulo: string; + bien: string; + escenario: string; + explicacion: string; + graficoData: PuntoOferta[]; + impactoEconomico: string; +} + +// ============================================ +// CONTENIDO TEÓRICO +// ============================================ + +export const definicionOferta = { + titulo: 'Definición de Oferta', + + definicion: 'La oferta es la cantidad de un bien o servicio que los productores están dispuestos y pueden ofrecer al mercado a diferentes precios durante un período específico, manteniendo constantes otros factores.', + + elementosClave: [ + { + elemento: 'Disposición a vender', + descripcion: 'El productor debe querer ofrecer el bien (rentabilidad)' + }, + { + elemento: 'Capacidad de producción', + descripcion: 'El productor debe tener los recursos para producir' + }, + { + elemento: 'Precios variables', + descripcion: 'Se analiza la relación a diferentes niveles de precio' + }, + { + elemento: 'Período de tiempo', + descripcion: 'La oferta siempre se refiere a un período específico' + } + ], + + diferenciaCapacidad: { + capacidad: 'Puedo producir 1000 unidades (capacidad técnica)', + oferta: 'Estoy dispuesto a ofrecer 800 unidades a $10 porque es rentable' + } +}; + +export const leyOferta = { + titulo: 'Ley de la Oferta', + + enunciado: 'Existe una relación directa entre el precio de un bien y la cantidad ofrecida: cuando el precio aumenta, la cantidad ofrecida aumenta, y viceversa.', + + explicacion: 'Esta relación directa se explica por:', + + razones: [ + { + nombre: 'Motivación de lucro', + descripcion: 'A precios más altos, la producción es más rentable, incentivando a los productores a aumentar la oferta.', + ejemplo: 'Si el precio de las manzanas sube a $5/kg, más agricultores querrán producir manzanas.' + }, + { + nombre: 'Costos crecientes', + descripcion: 'Para producir más, las empresas deben usar recursos menos eficientes o pagar costos más altos por factores adicionales.', + ejemplo: 'Para cultivar más trigo, se deben usar tierras menos fértiles que requieren más insumos.' + }, + { + nombre: 'Entrada de nuevos productores', + descripcion: 'Precios más altos atraen a nuevos productores al mercado, aumentando la oferta total.', + ejemplo: 'Si el café está caro, agricultores de otras zonas comienzan a cultivar café.' + } + ], + + representacionMatematica: { + funcion: 'Qs = f(P)', + donde: { + Qs: 'Cantidad ofrecida', + P: 'Precio del bien', + f: 'Función creciente (pendiente positiva)' + }, + ejemploLineal: 'Qs = 20 + 3P', + interpretacion: 'Por cada aumento de $1 en el precio, la cantidad ofrecida aumenta en 3 unidades.' + }, + + excepciones: [ + { + caso: 'Bienes de especulación', + descripcion: 'Si los productores esperan precios aún más altos en el futuro, pueden reducir la oferta actual.', + ejemplo: 'Productores de petróleo reducen oferta actual esperando precios más altos.' + }, + { + caso: 'Bienes de lujo exclusivo', + descripcion: 'Para mantener exclusividad, productores pueden limitar cantidad aunque el precio sea alto.', + ejemplo: 'Relojes suizos de lujo mantienen producción limitada a pesar de alta demanda.' + }, + { + caso: 'Trabajo (curva de oferta retrógrada)', + descripcion: 'Muy altos salarios pueden reducir horas trabajadas (preferencia por ocio).', + ejemplo: 'Médicos especialistas trabajan menos horas cuando ganan suficiente.' + } + ] +}; + +// ============================================ +// FACTORES QUE DESPLAZAN LA CURVA DE OFERTA +// ============================================ + +export const factoresDesplazamientoOferta: FactorDesplazamientoOferta[] = [ + { + nombre: 'Tecnología', + descripcion: 'Avances tecnológicos que mejoran la productividad', + direccion: DireccionDesplazamientoOferta.DERECHA, + mecanismo: 'Reduce costos unitarios, permite producir más con mismos recursos', + ejemplo: 'Nuevas máquinas de coser automáticas duplican la producción de ropa', + icono: '⚙️' + }, + { + nombre: 'Precio de insumos', + descripcion: 'Cambios en el costo de materias primas, mano de obra o capital', + direccion: DireccionDesplazamientoOferta.IZQUIERDA, + mecanismo: 'Aumenta costos de producción, reduce rentabilidad', + ejemplo: 'Subida del precio del petróleo aumenta costos de transporte y plásticos', + icono: '⛽' + }, + { + nombre: 'Número de vendedores', + descripcion: 'Entrada o salida de empresas del mercado', + direccion: DireccionDesplazamientoOferta.DERECHA, + mecanismo: 'Más productores = más oferta total en el mercado', + ejemplo: 'Eliminación de aranceles permite entrada de productores extranjeros', + icono: '🏭' + }, + { + nombre: 'Expectativas de precios', + descripcion: 'Expectativas sobre precios futuros del bien', + direccion: DireccionDesplazamientoOferta.IZQUIERDA, + mecanismo: 'Si esperan precios más altos futuros, reducen oferta actual', + ejemplo: 'Agricultores almacenan granos esperando precios más altos en invierno', + icono: '📈' + }, + { + nombre: 'Impuestos y subsidios', + descripcion: 'Políticas gubernamentales que afectan costos', + direccion: DireccionDesplazamientoOferta.IZQUIERDA, // Para impuestos + mecanismo: 'Impuestos aumentan costos; subsidios reducen costos', + ejemplo: 'Nuevo impuesto al tabaco reduce oferta; subsidio a energías renovables aumenta oferta', + icono: '🏛️' + }, + { + nombre: 'Condiciones naturales', + descripcion: 'Eventos climáticos, desastres naturales o condiciones ambientales', + direccion: DireccionDesplazamientoOferta.IZQUIERDA, + mecanismo: 'Afecta capacidad productiva de sectores agrícolas o naturales', + ejemplo: 'Sequía reduce cosecha de trigo; huracán afecta producción petrolera', + icono: '🌪️' + }, + { + nombre: 'Regulaciones gubernamentales', + descripcion: 'Normativas ambientales, laborales o de producción', + direccion: DireccionDesplazamientoOferta.IZQUIERDA, + mecanismo: 'Mayores requisitos aumentan costos de cumplimiento', + ejemplo: 'Nuevas normas ambientales requieren filtros costosos en fábricas', + icono: '📋' + } +]; + +// ============================================ +// COSTOS DE PRODUCCIÓN +// ============================================ + +export const costosProduccion = { + titulo: 'Costos de Producción y Oferta', + + introduccion: 'Los costos son fundamentales para entender las decisiones de oferta. Los productores maximizan ganancias donde Ingreso Marginal = Costo Marginal.', + + categorias: [ + { + categoria: 'Costos Fijos (CF)', + definicion: 'Costos que no varían con la cantidad producida', + ejemplos: ['Alquiler de local', 'Seguros', 'Salarios administrativos', 'Licencias'], + ejemplosCantidad: 'Ej: $10,000 mensuales sin importar producción' + }, + { + categoria: 'Costos Variables (CV)', + definicion: 'Costos que varían directamente con la producción', + ejemplos: ['Materias primas', 'Mano de obra directa', 'Energía productiva', 'Envases'], + ejemplosCantidad: 'Ej: $5 por unidad producida' + }, + { + categoria: 'Costos Totales (CT)', + definicion: 'Suma de costos fijos y variables', + formula: 'CT = CF + CV', + ejemplosCantidad: 'Ej: CT = $10,000 + $5 × Q' + } + ], + + costosMarginales: { + nombre: 'Costo Marginal (CM)', + definicion: 'Costo adicional de producir una unidad más', + importancia: 'Determina la curva de oferta del productor', + relacionOferta: 'El productor ofrecerá cantidades donde P ≥ CM', + formula: 'CM = ΔCT / ΔQ' + }, + + tablaEjemplo: [ + { q: 0, cf: 100, cv: 0, ct: 100, cme: '-', cmg: '-' }, + { q: 1, cf: 100, cv: 50, ct: 150, cme: 150, cmg: 50 }, + { q: 2, cf: 100, cv: 90, ct: 190, cme: 95, cmg: 40 }, + { q: 3, cf: 100, cv: 140, ct: 240, cme: 80, cmg: 50 }, + { q: 4, cf: 100, cv: 220, ct: 320, cme: 80, cmg: 80 }, + { q: 5, cf: 100, cv: 340, ct: 440, cme: 88, cmg: 120 } + ] +}; + +// ============================================ +// CURVAS DE OFERTA +// ============================================ + +export const curvaOfertaIndividual: CurvaOferta = { + id: 'oferta-individual', + nombre: 'Curva de Oferta Individual', + descripcion: 'Muestra la relación entre precio y cantidad ofrecida por un solo productor', + horizonteTemporal: HorizonteTemporal.CORTO_PLAZO, + puntos: [ + { precio: 2, cantidad: 10 }, + { precio: 4, cantidad: 30 }, + { precio: 6, cantidad: 55 }, + { precio: 8, cantidad: 85 }, + { precio: 10, cantidad: 120 } + ] +}; + +export const curvaOfertaMercado: CurvaOferta = { + id: 'oferta-mercado', + nombre: 'Curva de Oferta de Mercado', + descripcion: 'Suma horizontal de todas las ofertas individuales en el mercado', + horizonteTemporal: HorizonteTemporal.CORTO_PLAZO, + puntos: [ + { precio: 2, cantidad: 1000 }, + { precio: 4, cantidad: 3000 }, + { precio: 6, cantidad: 5500 }, + { precio: 8, cantidad: 8500 }, + { precio: 10, cantidad: 12000 } + ] +}; + +export const curvaOfertaLargoPlazo: CurvaOferta = { + id: 'oferta-largo-plazo', + nombre: 'Curva de Oferta a Largo Plazo', + descripcion: 'A largo plazo, más elástica debido a la entrada/salida de empresas', + horizonteTemporal: HorizonteTemporal.LARGO_PLAZO, + puntos: [ + { precio: 2, cantidad: 500 }, + { precio: 3, cantidad: 2000 }, + { precio: 4, cantidad: 5000 }, + { precio: 5, cantidad: 10000 }, + { precio: 6, cantidad: 18000 } + ] +}; + +// ============================================ +// EJEMPLOS PRÁCTICOS +// ============================================ + +export const ejemplosOferta: EjemploOferta[] = [ + { + titulo: 'Tecnología en Manufactura', + bien: 'Smartphones', + escenario: 'Implementación de robots en línea de ensamblaje reduce tiempo de producción en 40%', + explicacion: 'El avance tecnológico desplaza la curva de oferta a la derecha. A cada precio, los productores pueden ofrecer más unidades porque sus costos unitarios han disminuido.', + graficoData: [ + { precio: 400, cantidad: 5000 }, + { precio: 350, cantidad: 7000 }, + { precio: 300, cantidad: 9500 }, + { precio: 250, cantidad: 12000 }, + { precio: 200, cantidad: 15000 } + ], + impactoEconomico: 'Precios más bajos para consumidores y mayor acceso tecnológico' + }, + { + titulo: 'Shock de Insumos: Petróleo', + bien: 'Gasolina', + escenario: 'Conflicto geopolítico reduce exportaciones de petróleo crudo en 30%', + explicacion: 'El aumento del precio de la materia prima (petróleo) desplaza la curva de oferta de gasolina a la izquierda. Es más costoso producir gasolina.', + graficoData: [ + { precio: 5, cantidad: 8000 }, + { precio: 6, cantidad: 6500 }, + { precio: 7, cantidad: 5000 }, + { precio: 8, cantidad: 3500 }, + { precio: 9, cantidad: 2000 } + ], + impactoEconomico: 'Aumento de precios en transporte y productos derivados' + }, + { + titulo: 'Entrada de Nuevos Productores', + bien: 'Café de especialidad', + escenario: 'Eliminación de barreras comerciales permite importación de café de nuevos países', + explicacion: 'La entrada de más productores al mercado aumenta la oferta total. La curva se desplaza a la derecha, beneficiando a los consumidores con más opciones.', + graficoData: [ + { precio: 20, cantidad: 1000 }, + { precio: 18, cantidad: 1800 }, + { precio: 16, cantidad: 2800 }, + { precio: 14, cantidad: 4000 }, + { precio: 12, cantidad: 5500 } + ], + impactoEconomico: 'Mayor diversidad de productos y presión a la baja en precios' + } +]; + +// ============================================ +// OFERTA EN DIFERENTES HORIZONTES TEMPORALES +// ============================================ + +export const ofertaTemporal = { + titulo: 'Oferta: Corto vs Largo Plazo', + + cortoPlazo: { + definicion: 'Período en el que al menos un factor de producción es fijo', + caracteristicas: [ + 'Capacidad productiva limitada', + 'No puede entrar/salir de empresas', + 'Curva de oferta más inclinada (inelástica)', + 'Ajustes principalmente en intensidad de uso' + ], + ejemplo: 'Una fábrica puede aumentar producción con turnos extra, pero no construir nuevas plantas' + }, + + largoPlazo: { + definicion: 'Período en el que todos los factores de producción son variables', + caracteristicas: [ + 'Capacidad productiva ajustable', + 'Entrada y salida de empresas', + 'Curva de oferta más plana (elástica)', + 'Ajustes en escala y número de productores' + ], + ejemplo: 'Nuevas fábricas se construyen, tecnologías cambian, empresas entran o salen del mercado' + }, + + comparacionElasticidad: { + cortoPlazo: 'Inelástica: dificultad para ajustar producción rápidamente', + largoPlazo: 'Elástica: tiempo suficiente para todos los ajustes', + ejemploAgricultura: 'Corto plazo: usar fertilizantes. Largo plazo: cultivar más tierra.' + } +}; + +// ============================================ +// MOVIMIENTO VS DESPLAZAMIENTO +// ============================================ + +export const diferenciaMovimientoDesplazamientoOferta = { + titulo: 'Movimiento a lo largo vs Desplazamiento de la curva de oferta', + + movimiento: { + nombre: 'Movimiento a lo largo de la curva', + causa: 'Cambio en el precio del propio bien', + efecto: 'Cambio en la cantidad ofrecida', + direccion: 'Subida o bajada por la misma curva', + ejemplo: 'El precio del trigo sube de $5 a $7 → agricultores ofrecen más trigo', + representacion: 'Movimiento de un punto a otro en la misma curva' + }, + + desplazamiento: { + nombre: 'Desplazamiento de la curva', + causa: 'Cambio en factores distintos al precio (tecnología, costos, regulaciones)', + efecto: 'Cambio en la oferta (toda la curva se mueve)', + direccionDerecha: 'Aumento de oferta (más cantidad a cada precio)', + direccionIzquierda: 'Disminución de oferta (menos cantidad a cada precio)', + ejemplo: 'Nueva tecnología reduce costos → más oferta a todos los precios', + representacion: 'Curva completa se desplaza' + }, + + tablaComparativa: [ + { concepto: 'Causa', movimiento: 'Precio del bien cambia', desplazamiento: 'Otros factores cambian' }, + { concepto: 'Gráfico', movimiento: 'Nos movemos sobre la curva', desplazamiento: 'Curva se desplaza' }, + { concepto: 'Terminología', movimiento: 'Cambio en cantidad ofrecida', desplazamiento: 'Cambio en oferta' }, + { concepto: 'Ejemplo', movimiento: 'Precio de manzanas ↑', desplazamiento: 'Tecnología mejora ↑' } + ] +}; + +// ============================================ +// RESUMEN Y PUNTOS CLAVE +// ============================================ + +export const resumenOferta = { + titulo: 'Resumen: Oferta', + + puntosClave: [ + 'La oferta requiere disposición Y capacidad de producir', + 'La ley de la oferta establece relación directa precio-cantidad', + 'La curva de oferta tiene pendiente positiva', + 'La oferta se desplaza por cambios en costos, tecnología, número de vendedores', + 'Tecnología mejora → oferta aumenta (desplazamiento derecha)', + 'Costos de insumos suben → oferta disminuye (desplazamiento izquierda)', + 'A largo plazo, la oferta es más elástica que a corto plazo', + 'Costo marginal determina la curva de oferta del productor' + ], + + formulaRecordatorio: { + leyOferta: 'P ↑ → Qs ↑ (ceteris paribus)', + ofertaMercado: 'Qs_mercado = Σ Qs_individuales', + decisionProductor: 'Producir donde P ≥ CMg' + }, + + mapaConceptual: { + centro: 'Oferta', + ramas: [ + { nombre: 'Ley', elementos: ['Relación directa P-Q', 'Pendiente positiva'] }, + { nombre: 'Determinantes', elementos: ['Tecnología', 'Costos', 'Vendedores', 'Expectativas'] }, + { nombre: 'Tipos', elementos: ['Individual', 'Mercado', 'Corto plazo', 'Largo plazo'] }, + { nombre: 'Costos', elementos: ['Fijos', 'Variables', 'Marginal', 'Total'] } + ] + } +}; + +// Exportación por defecto +export default { + definicion: definicionOferta, + ley: leyOferta, + factores: factoresDesplazamientoOferta, + costos: costosProduccion, + curvas: { + individual: curvaOfertaIndividual, + mercado: curvaOfertaMercado, + largoPlazo: curvaOfertaLargoPlazo + }, + ejemplos: ejemplosOferta, + temporal: ofertaTemporal, + diferencia: diferenciaMovimientoDesplazamientoOferta, + resumen: resumenOferta +}; diff --git a/frontend/src/content/modulo3/clasificacion.ts b/frontend/src/content/modulo3/clasificacion.ts new file mode 100644 index 0000000..7540821 --- /dev/null +++ b/frontend/src/content/modulo3/clasificacion.ts @@ -0,0 +1,450 @@ +export const clasificacionBienes = { + id: "clasificacion-bienes-elasticidad", + titulo: "Clasificación de Bienes según Elasticidad", + + introduccion: { + descripcion: `La elasticidad nos permite clasificar los bienes en diferentes categorías según +su comportamiento ante cambios en el ingreso (elasticidad ingreso) y ante cambios en el precio +de otros bienes (elasticidad cruzada). Esta clasificación es fundamental para entender las +relaciones de consumo y para la toma de decisiones empresariales y de política económica.` + }, + + clasificacionPorIngreso: { + titulo: "Clasificación según Elasticidad Ingreso (Ei)", + descripcion: "Los bienes se clasifican según cómo responde su demanda ante cambios en el ingreso de los consumidores", + formulaReferencia: "Ei = (% cambio en cantidad demandada) / (% cambio en ingreso)", + + categorias: [ + { + tipo: "Bienes Normales", + condicion: "Ei > 0", + descripcion: "La cantidad demandada aumenta cuando aumenta el ingreso. Son bienes que los consumidores desean más a medida que se vuelven más ricos.", + signo: "Positivo", + relacionIngreso: "Directa", + grafica: "Curva con pendiente positiva en plano Ingreso-Cantidad", + ejemplos: [ + "Ropa de calidad", + "Electrodomésticos", + "Entretenimiento", + "Educación", + "Viajes" + ], + comportamientoCicloEconomico: "Demanda aumenta en expansiones económicas", + + subclasificacion: [ + { + subtipo: "Bienes Necesarios", + condicion: "0 < Ei < 1", + descripcion: "La demanda aumenta con el ingreso, pero en menor proporción. Son bienes esenciales que todos consumen, pero los ricos no consumen proporcionalmente más.", + caracteristicas: [ + "Demanda crece menos que proporcionalmente al ingreso", + "Son bienes básicos indispensables", + "La proporción del ingreso gastada disminuye al subir ingresos" + ], + ejemplos: [ + { bien: "Alimentos básicos", eiAproximado: "0.2 - 0.5" }, + { bien: "Servicios médicos básicos", eiAproximado: "0.3 - 0.6" }, + { bien: "Vivienda básica", eiAproximado: "0.4 - 0.8" }, + { bien: "Transporte público", eiAproximado: "0.1 - 0.4" } + ], + curvaEngel: "Pendiente positiva pero convexa (aplana al subir ingreso)" + }, + { + subtipo: "Bienes de Lujo", + condicion: "Ei > 1", + descripcion: "La demanda aumenta más que proporcionalmente al ingreso. Cuando los ingresos crecen, el gasto en estos bienes crece más rápido.", + caracteristicas: [ + "Demanda crece más que proporcionalmente al ingreso", + "Son deseables pero no esenciales", + "La proporción del ingreso gastada aumenta con el ingreso" + ], + ejemplos: [ + { bien: "Viajes internacionales", eiAproximado: "2.0 - 3.5" }, + { bien: "Restaurantes de lujo", eiAproximado: "1.5 - 2.5" }, + { bien: "Joyas finas", eiAproximado: "2.0 - 4.0" }, + { bien: "Autos deportivos", eiAproximado: "2.5 - 3.5" }, + { bien: "Arte y antigüedades", eiAproximado: "1.8 - 3.0" } + ], + curvaEngel: "Pendiente positiva y cóncava (se empinada al subir ingreso)" + } + ] + }, + { + tipo: "Bienes Inferiores", + condicion: "Ei < 0", + descripcion: "La cantidad demandada disminuye cuando aumenta el ingreso. Los consumidores sustituyen estos bienes por alternativas de mayor calidad a medida que pueden pagar más.", + signo: "Negativo", + relacionIngreso: "Inversa", + grafica: "Curva con pendiente negativa en plano Ingreso-Cantidad", + + caracteristicas: [ + "Demanda decrece al aumentar el ingreso", + "Sustituidos por bienes de mayor calidad", + "Mayor consumo en grupos de bajos ingresos", + "No son necesariamente de mala calidad, sino que hay mejores alternativas" + ], + + ejemplos: [ + { + bien: "Transporte público", + explicacion: "Personas con más ingreso compran auto", + eiAproximado: "-0.3 a -0.6" + }, + { + bien: "Fideos instantáneos", + explicacion: "Sustituidos por comida fresca", + eiAproximado: "-0.5 a -0.8" + }, + { + bien: "Marcas genéricas", + explicacion: "Sustituidas por marcas reconocidas", + eiAproximado: "-0.4 a -0.7" + }, + { + bien: "Carne de segunda", + explicacion: "Sustituida por cortes de primera", + eiAproximado: "-0.6 a -1.0" + }, + { + bien: "Ropa de segunda mano", + explicacion: "Sustituida por ropa nueva", + eiAproximado: "-0.8 a -1.5" + }, + { + bien: "Productos enlatados", + explicacion: "Sustituidos por productos frescos", + eiAproximado: "-0.3 a -0.5" + } + ], + + comportamientoCicloEconomico: "Demanda aumenta en recesiones", + empresasEjemplo: ["Dollar stores", "Marcas blancas", "Comida rápida económica"], + nota: "Un bien puede ser inferior para algunos grupos de ingreso y normal para otros" + } + ], + + ejemploNumerico: { + titulo: "Ejemplo Completo de Clasificación", + + escenario: "Un consumidor tiene los siguientes cambios en su consumo cuando su ingreso mensual sube de $3000 a $3600 (20% de aumento):", + + casos: [ + { + bien: "Pan", + cantidadInicial: 20, + cantidadFinal: 21, + calculoEi: "%ΔQ = 5%, %ΔI = 20%, Ei = 5/20 = 0.25", + clasificacion: "Bien NORMAL NECESARIO", + justificacion: "0 < 0.25 < 1 → La demanda aumenta poco con el ingreso" + }, + { + bien: "Restaurantes de lujo", + cantidadInicial: 2, + cantidadFinal: 5, + calculoEi: "%ΔQ = 150%, %ΔI = 20%, Ei = 150/20 = 7.5", + clasificacion: "Bien de LUJO", + justificacion: "Ei = 7.5 > 1 → La demanda crece mucho más que el ingreso" + }, + { + bien: "Fideos instantáneos", + cantidadInicial: 15, + cantidadFinal: 10, + calculoEi: "%ΔQ = -33.3%, %ΔI = 20%, Ei = -33.3/20 = -1.67", + clasificacion: "Bien INFERIOR", + justificacion: "Ei = -1.67 < 0 → La demanda disminuye al subir el ingreso" + } + ] + } + }, + + clasificacionPorElasticidadCruzada: { + titulo: "Clasificación según Elasticidad Cruzada (Exy)", + descripcion: "Los bienes se clasifican según cómo afecta el precio de un bien Y a la demanda del bien X", + formulaReferencia: "Exy = (% cambio en Qx) / (% cambio en Py)", + + categorias: [ + { + tipo: "Bienes Sustitutos", + condicion: "Exy > 0", + signo: "Positivo", + descripcion: "Cuando sube el precio del bien Y, aumenta la demanda del bien X. Los bienes pueden usarse en lugar uno del otro para satisfacer la misma necesidad.", + + caracteristicas: [ + "Satisfacen necesidades similares", + "Los consumidores pueden intercambiarlos", + "Compiten en el mismo mercado", + "A mayor diferencia de precio, mayor sustitución" + ], + + ejemplos: [ + { + par: "Coca-Cola y Pepsi", + exyAproximado: "+0.8", + comentario: "Sustitutos cercanos" + }, + { + par: "Café y té", + exyAproximado: "+0.5", + comentario: "Sustitutos moderados" + }, + { + par: "Mantequilla y margarina", + exyAproximado: "+1.2", + comentario: "Muy buenos sustitutos" + }, + { + par: "Carne de res y pollo", + exyAproximado: "+0.6", + comentario: "Sustitutos proteicos" + }, + { + par: "Uber y taxi", + exyAproximado: "+1.5", + comentario: "Sustitutos cercanos en transporte" + } + ], + + relacionPrecioDemanda: "P↑ de Y → Q↑ de X", + curvaDemanda: "Se desplaza a la derecha cuando sube Py", + + ejemploNumerico: { + titulo: "Ejemplo: Coca-Cola (X) y Pepsi (Y)", + datos: { + precioPepsiInicial: 3, + precioPepsiFinal: 3.6, + cantidadCocaInicial: 100, + cantidadCocaFinal: 125 + }, + calculo: [ + "%ΔQx = (125-100)/100 × 100 = 25%", + "%ΔPy = (3.6-3)/3 × 100 = 20%", + "Exy = 25% / 20% = +1.25" + ], + interpretacion: "Son sustitutos cercanos porque Exy > 0 y relativamente alto" + } + }, + { + tipo: "Bienes Complementarios", + condicion: "Exy < 0", + signo: "Negativo", + descripcion: "Cuando sube el precio del bien Y, disminuye la demanda del bien X. Los bienes se consumen juntos o uno es necesario para usar el otro.", + + caracteristicas: [ + "Se consumen conjuntamente", + "Uno complementa al otro", + "El aumento de precio de uno reduce la demanda de ambos", + "A veces forman un 'sistema' de consumo" + ], + + tiposComplementariedad: [ + { + tipo: "Complementos perfectos", + descripcion: "Se consumen en proporciones fijas", + ejemplos: ["Zapatos izquierdo y derecho", "Automóvil y gasolina (aprox)"] + }, + { + tipo: "Complementos imperfectos", + descripcion: "Se consumen juntos pero no en proporción fija", + ejemplos: ["Cerveza y hamburguesas", "Celular y aplicaciones"] + } + ], + + ejemplos: [ + { + par: "Autos y gasolina", + exyAproximado: "-0.4", + comentario: "Complementos esenciales" + }, + { + par: "Computadores y software", + exyAproximado: "-0.8", + comentario: "Fuerte complementariedad" + }, + { + par: "Tortillas y frijoles", + exyAproximado: "-0.3", + comentario: "Complementos dietarios" + }, + { + par: "Impresoras y tinta", + exyAproximado: "-1.2", + comentario: "Complementos técnicos" + }, + { + par: "Cámaras y rollos/memorias", + exyAproximado: "-0.9", + comentario: "Complementos fotográficos" + } + ], + + relacionPrecioDemanda: "P↑ de Y → Q↓ de X", + curvaDemanda: "Se desplaza a la izquierda cuando sube Py", + + estrategiaEmpresas: "Las empresas a veces venden un bien barato (impresora) para ganar en el complemento (tinta)", + + ejemploNumerico: { + titulo: "Ejemplo: Autos (X) y Gasolina (Y)", + datos: { + precioGasolinaInicial: 4, + precioGasolinaFinal: 5, + cantidadAutosInicial: 1000, + cantidadAutosFinal: 850 + }, + calculo: [ + "%ΔQx = (850-1000)/1000 × 100 = -15%", + "%ΔPy = (5-4)/4 × 100 = 25%", + "Exy = -15% / 25% = -0.6" + ], + interpretacion: "Son complementarios porque Exy < 0" + } + }, + { + tipo: "Bienes Independientes", + condicion: "Exy = 0", + signo: "Cero", + descripcion: "El precio del bien Y no afecta la demanda del bien X. No existe relación de consumo entre ellos.", + + caracteristicas: [ + "No se relacionan en el consumo", + "Pertenecen a categorías completamente diferentes", + "El cambio de precio de uno no afecta al otro" + ], + + ejemplos: [ + { par: "Libros y tomates", explicacion: "Sin relación de consumo" }, + { par: "Zapatos y sillas", explicacion: "Bienes de categorías distintas" }, + { par: "Computadores y sal", explicacion: "Sin relación de consumo" }, + { par: "Viajes y papel higiénico", explicacion: "Necesidades independientes" } + ] + } + ] + }, + + matrizClasificacionCompleta: { + titulo: "Matriz de Clasificación Completa", + descripcion: "Un bien puede clasificarse usando ambos criterios simultáneamente", + + matriz: [ + { + combinacion: "Bien Normal + Sustituto", + ejemplo: "Restaurantes de lujo vs. restaurantes medianos", + caracteristicas: "Demanda crece con ingreso, compite con similares" + }, + { + combinacion: "Bien Normal + Complemento", + ejemplo: "Autos eléctricos (complemento: estaciones de carga)", + caracteristicas: "Demanda crece con ingreso, depende de bien relacionado" + }, + { + combinacion: "Bien Inferior + Sustituto", + ejemplo: "Transporte público vs. taxis", + caracteristicas: "Demanda cae con ingreso, compite con alternativas" + }, + { + combinacion: "Bien Inferior + Complemento", + ejemplo: "Fideos instantáneos + salsa instantánea", + caracteristicas: "Ambos tienen demanda decreciente con ingreso" + } + ] + }, + + aplicacionesPracticas: { + titulo: "Aplicaciones Prácticas de la Clasificación", + + aplicaciones: [ + { + area: "Marketing y Estrategia Empresarial", + usos: [ + "Identificar mercados objetivo según nivel de ingreso", + "Desarrollar estrategias de precios basadas en elasticidad", + "Diseñar campañas para bienes de lujo vs. necesarios" + ] + }, + { + area: "Política Económica", + usos: [ + "Diseñar impuestos sobre bienes inelásticos (generan más recaudación)", + "Subvencionar bienes necesarios para grupos de bajos ingresos", + "Predecir efectos de políticas redistributivas" + ] + }, + { + area: "Análisis de Mercado", + usos: [ + "Identificar oportunidades de negocio en diferentes segmentos", + "Predecir demanda en ciclos económicos", + "Analizar competencia entre productos sustitutos" + ] + }, + { + area: "Planificación Financiera", + usos: [ + "Sectores defensivos (bienes necesarios) vs. cíclicos (lujos)", + "Diversificación de inversiones", + "Evaluación de riesgos en recesiones" + ] + } + ] + }, + + ejerciciosResueltos: [ + { + id: 1, + enunciado: "Clasifica los siguientes bienes según su elasticidad ingreso esperada: a) Arroz, b) Yates, c) Autobuses, d) Medicinas", + + respuestas: [ + { + bien: "Arroz", + eiEstimado: "0.2 - 0.4", + clasificacion: "Bien NORMAL NECESARIO", + justificacion: "Es un alimento básico. La demanda aumenta con el ingreso pero poco." + }, + { + bien: "Yates", + eiEstimado: "3.0 - 5.0", + clasificacion: "Bien de LUJO", + justificacion: "Solo los muy ricos los compran. Demanda muy sensible al ingreso." + }, + { + bien: "Autobuses", + eiEstimado: "-0.5 - -0.3", + clasificacion: "Bien INFERIOR", + justificacion: "Con más ingreso la gente prefiere auto o taxi." + }, + { + bien: "Medicinas esenciales", + eiEstimado: "0.0 - 0.1", + clasificacion: "Bien NORMAL NECESARIO (casi inelástico)", + justificacion: "Todos las necesitan sin importar el ingreso." + } + ] + }, + { + id: 2, + enunciado: "¿Son sustitutos o complementos los siguientes pares? a) Netflix y cines, b) Lápices y papel, c) iPhone y Samsung", + + respuestas: [ + { + par: "Netflix y cines", + exyEsperado: "+0.6", + clasificacion: "SUSTITUTOS", + explicacion: "Compiten por el tiempo de entretenimiento del consumidor. Si suben las entradas de cine, más gente se queda en casa con Netflix." + }, + { + par: "Lápices y papel", + exyEsperado: "-0.4", + clasificacion: "COMPLEMENTOS", + explicacion: "Se usan juntos. Si sube el precio del papel, se demandan menos lápices." + }, + { + par: "iPhone y Samsung", + exyEsperado: "+1.2", + clasificacion: "SUSTITUTOS CERCANOS", + explicacion: "Son competidores directos en smartphones. Alta sustituibilidad." + } + ] + } + ] +}; + +export default clasificacionBienes; diff --git a/frontend/src/content/modulo3/conceptos.ts b/frontend/src/content/modulo3/conceptos.ts new file mode 100644 index 0000000..c683823 --- /dev/null +++ b/frontend/src/content/modulo3/conceptos.ts @@ -0,0 +1,242 @@ +export const conceptosElasticidad = { + id: "conceptos-elasticidad", + titulo: "Conceptos Fundamentales de Elasticidad", + + introduccion: { + descripcion: `La elasticidad mide la sensibilidad o respuesta de la cantidad demandada u ofrecida +de un bien ante cambios en variables económicas como el precio, el ingreso o el precio de otros bienes. +Es una herramienta fundamental para analizar cómo reaccionan los consumidores y productores ante +cambios en el mercado.`, + importancia: [ + "Permite predecir cambios en la cantidad demandada ante variaciones de precio", + "Ayuda a las empresas a fijar estrategias de precios óptimas", + "Permite clasificar bienes según su comportamiento ante cambios económicos", + "Es esencial para la formulación de políticas fiscales y de ingresos" + ] + }, + + definicionElasticidad: { + titulo: "¿Qué es la Elasticidad?", + definicion: "La elasticidad mide el grado de respuesta de la cantidad demandada (u ofrecida) ante cambios porcentuales en variables económicas relevantes.", + interpretacionIntuitiva: "Una elasticidad alta significa que la cantidad es muy sensible a cambios en la variable. Una elasticidad baja indica poca sensibilidad.", + + formulaGeneral: { + simbolo: "E", + ecuacion: "E = (% cambio en la cantidad) / (% cambio en la variable)", + latex: "E = \\frac{\\% \\Delta Q}{\\% \\Delta X}", + donde: [ + { variable: "E", significado: "Coeficiente de elasticidad (número puro)" }, + { variable: "% ΔQ", significado: "Porcentaje de cambio en la cantidad" }, + { variable: "% ΔX", significado: "Porcentaje de cambio en la variable (precio, ingreso, etc.)" } + ] + } + }, + + elasticidadPrecioDemanda: { + titulo: "Elasticidad Precio de la Demanda (Ed)", + definicion: "Mide el porcentaje de cambio en la cantidad demandada como respuesta a un cambio porcentual en el precio del bien.", + + formula: { + ecuacion: "Ed = (% cambio en cantidad demandada) / (% cambio en precio)", + latex: "E_d = \\frac{\\% \\Delta Q_d}{\\% \\Delta P} = \\frac{\\frac{Q_2 - Q_1}{Q_1} \\times 100}{\\frac{P_2 - P_1}{P_1} \\times 100}", + simplificada: "Ed = (ΔQ/Q) / (ΔP/P) = (ΔQ/ΔP) × (P/Q)" + }, + + metodoPuntoMedio: { + nombre: "Método del Punto Medio (Arc Elasticity)", + descripcion: "Método más preciso que usa el promedio de los valores inicial y final", + formula: { + latex: "E_d = \\frac{\\frac{Q_2 - Q_1}{(Q_1 + Q_2)/2}}{\\frac{P_2 - P_1}{(P_1 + P_2)/2}}", + descripcion: "Usa los valores promedio como base para calcular los porcentajes" + } + }, + + interpretacion: [ + { + rango: "|Ed| > 1", + clasificacion: "Demanda ELÁSTICA", + significado: "La cantidad cambia en mayor proporción que el precio", + ejemplo: "Si el precio sube 10%, la cantidad demandada baja más de 10%", + bienesTipicos: ["Bienes de lujo", "Productos con muchos sustitutos", "Bienes no esenciales"] + }, + { + rango: "|Ed| < 1", + clasificacion: "Demanda INELÁSTICA", + significado: "La cantidad cambia en menor proporción que el precio", + ejemplo: "Si el precio sube 10%, la cantidad demandada baja menos de 10%", + bienesTipicos: ["Bienes necesarios", "Medicinas", "Combustible", "Sal"] + }, + { + rango: "|Ed| = 1", + clasificacion: "Demanda UNITARIA", + significado: "La cantidad cambia en la misma proporción que el precio", + ejemplo: "Si el precio sube 10%, la cantidad demandada baja exactamente 10%", + bienesTipicos: ["Raramente ocurre en la realidad", "Curva teórica de demanda rectangular de hiperbola"] + }, + { + rango: "|Ed| = 0", + clasificacion: "Demanda PERFECTAMENTE INELÁSTICA", + significado: "La cantidad no cambia ante cualquier cambio de precio", + ejemplo: "Medicinas indispensables para la vida", + representacionGrafica: "Línea vertical" + }, + { + rango: "|Ed| = ∞", + clasificacion: "Demanda PERFECTAMENTE ELÁSTICA", + significado: "Cualquier cambio de precio elimina toda la demanda", + ejemplo: "Bienes con sustitutos perfectos en mercados competitivos", + representacionGrafica: "Línea horizontal" + } + ] + }, + + determinantesElasticidad: { + titulo: "Factores que Determinan la Elasticidad", + factores: [ + { + factor: "Disponibilidad de sustitutos", + efecto: "Más sustitutos → Mayor elasticidad", + explicacion: "Si existen muchos bienes similares, los consumidores pueden cambiar fácilmente cuando sube el precio" + }, + { + factor: "Necesidad vs. Lujo", + efecto: "Necesidades → Menor elasticidad | Lujos → Mayor elasticidad", + explicacion: "Los bienes necesarios se siguen consumiendo aunque suban de precio" + }, + { + factor: "Proporción del ingreso", + efecto: "Mayor proporción → Mayor elasticidad", + explicacion: "Bienes caros (autos, casas) tienen elasticidad mayor que bienes baratos (fósforos)" + }, + { + factor: "Horizonte temporal", + efecto: "Largo plazo → Mayor elasticidad", + explicacion: "A largo plazo los consumidores pueden ajustar hábitos y encontrar alternativas" + }, + { + factor: "Definición del mercado", + efecto: "Mercado amplio → Menor elasticidad | Mercado específico → Mayor elasticidad", + explicacion: "La demanda de 'alimentos' es inelástica, pero la de 'manzanas' es más elástica" + } + ] + }, + + ejemplosNumericos: [ + { + titulo: "Ejemplo 1: Cálculo básico de elasticidad", + datos: { + precioInicial: 10, + precioFinal: 12, + cantidadInicial: 100, + cantidadFinal: 80 + }, + pasos: [ + { + paso: 1, + descripcion: "Calcular % cambio en cantidad", + calculo: "(80 - 100) / 100 × 100 = -20%" + }, + { + paso: 2, + descripcion: "Calcular % cambio en precio", + calculo: "(12 - 10) / 10 × 100 = 20%" + }, + { + paso: 3, + descripcion: "Calcular elasticidad", + calculo: "Ed = -20% / 20% = -1.0", + nota: "En valor absoluto: |Ed| = 1.0" + }, + { + paso: 4, + descripcion: "Interpretación", + resultado: "Demanda UNITARIA - la cantidad disminuye en la misma proporción que aumenta el precio" + } + ] + }, + { + titulo: "Ejemplo 2: Método del punto medio", + datos: { + precioInicial: 8, + precioFinal: 10, + cantidadInicial: 120, + cantidadFinal: 90 + }, + pasos: [ + { + paso: 1, + descripcion: "Calcular cambio en cantidad usando promedio", + calculo: "(90 - 120) / ((120 + 90)/2) = -30 / 105 = -0.2857 = -28.57%" + }, + { + paso: 2, + descripcion: "Calcular cambio en precio usando promedio", + calculo: "(10 - 8) / ((8 + 10)/2) = 2 / 9 = 0.2222 = 22.22%" + }, + { + paso: 3, + descripcion: "Calcular elasticidad", + calculo: "Ed = -28.57% / 22.22% = -1.29", + nota: "En valor absoluto: |Ed| = 1.29" + }, + { + paso: 4, + descripcion: "Interpretación", + resultado: "Demanda ELÁSTICA - la cantidad es muy sensible al precio" + } + ] + } + ], + + relacionIngresoTotal: { + titulo: "Relación entre Elasticidad e Ingreso Total", + definicion: "El ingreso total (IT) es el precio multiplicado por la cantidad vendida: IT = P × Q", + + reglas: [ + { + elasticidad: "Elástica (|Ed| > 1)", + efectoPrecioArriba: "El ingreso total DISMINUYE", + efectoPrecioAbajo: "El ingreso total AUMENTA", + explicacion: "La cantidad cambia más que proporcionalmente al precio" + }, + { + elasticidad: "Inelástica (|Ed| < 1)", + efectoPrecioArriba: "El ingreso total AUMENTA", + efectoPrecioAbajo: "El ingreso total DISMINUYE", + explicacion: "La cantidad cambia menos que proporcionalmente al precio" + }, + { + elasticidad: "Unitaria (|Ed| = 1)", + efectoPrecioArriba: "El ingreso total se MANTIENE CONSTANTE", + efectoPrecioAbajo: "El ingreso total se MANTIENE CONSTANTE", + explicacion: "Los cambios en precio y cantidad se compensan exactamente" + } + ], + + ejemploNumerico: { + descripcion: "Ejemplo: Producto con demanda elástica (|Ed| = 2)", + escenarioBase: { precio: 100, cantidad: 1000, ingresoTotal: 100000 }, + escenarioPrecioSube: { precio: 110, cantidad: 800, ingresoTotal: 88000, cambio: "-12%" }, + escenarioPrecioBaja: { precio: 90, cantidad: 1200, ingresoTotal: 108000, cambio: "+8%" }, + conclusion: "Al ser elástica, subir el precio reduce los ingresos, y bajar el precio aumenta los ingresos" + } + }, + + resumenVisual: { + titulo: "Resumen Visual de Elasticidad", + tablaInterpretacion: { + columnas: ["|Ed|", "Clasificación", "Respuesta de Q", "Ejemplo"], + filas: [ + ["0", "Perfectamente inelástica", "Sin cambio", "Insulina"], + ["0 - 0.5", "Muy inelástica", "Cambia poco", "Sal"], + ["0.5 - 1", "Inelástica", "Cambia menos proporcional", "Gasolina"], + ["1", "Unitaria", "Cambia igual proporción", "Teórico"], + ["1 - 2", "Elástica", "Cambia más proporcional", "Restaurantes"], + ["2 - 5", "Muy elástica", "Cambia mucho", "Cine"], + ["∞", "Perfectamente elástica", "Q → 0 con cualquier ΔP", "Trigo en mercado mundial"] + ] + } + } +}; + +export default conceptosElasticidad; diff --git a/frontend/src/content/modulo3/ejercicios.ts b/frontend/src/content/modulo3/ejercicios.ts new file mode 100644 index 0000000..a85fa24 --- /dev/null +++ b/frontend/src/content/modulo3/ejercicios.ts @@ -0,0 +1,677 @@ +export interface PasoEjercicio { + paso: number; + descripcion: string; + formula?: string; + latex?: string; + calculo: string; + resultado?: string; + explicacion?: string; +} + +export interface Ejercicio { + id: string; + tipo: "calculadora" | "clasificacion" | "examen"; + titulo: string; + dificultad: "basico" | "intermedio" | "avanzado"; + tiempoEstimado: number; + enunciado: string; + datos?: Record; + pasos: PasoEjercicio[]; + respuestaCorrecta: string | number; + interpretacion: string; + pistas?: string[]; +} + +export const ejerciciosElasticidad: Ejercicio[] = [ + { + id: "ejercicio-1-calculadora", + tipo: "calculadora", + titulo: "Calculadora de Elasticidad Precio - Paso a Paso", + dificultad: "basico", + tiempoEstimado: 10, + enunciado: `Una tienda vende café gourmet. Cuando el precio es de $10 por libra, + venden 200 libras al mes. Cuando suben el precio a $12, las ventas bajan a 150 libras. + Calcula la elasticidad precio de la demanda usando el método del punto medio y clasifica el resultado.`, + + datos: { + precioInicial: 10, + precioFinal: 12, + cantidadInicial: 200, + cantidadFinal: 150 + }, + + pasos: [ + { + paso: 1, + descripcion: "Identificar los datos del problema", + calculo: "P₁ = $10, P₂ = $12, Q₁ = 200, Q₂ = 150" + }, + { + paso: 2, + descripcion: "Calcular el cambio en cantidad (ΔQ)", + formula: "ΔQ = Q₂ - Q₁", + calculo: "ΔQ = 150 - 200 = -50 libras" + }, + { + paso: 3, + descripcion: "Calcular el cambio en precio (ΔP)", + formula: "ΔP = P₂ - P₁", + calculo: "ΔP = $12 - $10 = $2" + }, + { + paso: 4, + descripcion: "Calcular el promedio de cantidades", + formula: "Q̄ = (Q₁ + Q₂) / 2", + latex: "\\bar{Q} = \\frac{Q_1 + Q_2}{2}", + calculo: "Q̄ = (200 + 150) / 2 = 175 libras" + }, + { + paso: 5, + descripcion: "Calcular el promedio de precios", + formula: "P̄ = (P₁ + P₂) / 2", + latex: "\\bar{P} = \\frac{P_1 + P_2}{2}", + calculo: "P̄ = ($10 + $12) / 2 = $11" + }, + { + paso: 6, + descripcion: "Calcular el % cambio en cantidad", + formula: "%ΔQ = (ΔQ / Q̄) × 100", + latex: "\\% \\Delta Q = \\frac{\\Delta Q}{\\bar{Q}} \\times 100", + calculo: "%ΔQ = (-50 / 175) × 100 = -28.57%" + }, + { + paso: 7, + descripcion: "Calcular el % cambio en precio", + formula: "%ΔP = (ΔP / P̄) × 100", + latex: "\\% \\Delta P = \\frac{\\Delta P}{\\bar{P}} \\times 100", + calculo: "%ΔP = (2 / 11) × 100 = 18.18%" + }, + { + paso: 8, + descripcion: "Calcular la elasticidad precio de la demanda", + formula: "Ed = %ΔQ / %ΔP", + latex: "E_d = \\frac{\\% \\Delta Q}{\\% \\Delta P}", + calculo: "Ed = -28.57% / 18.18% = -1.57", + resultado: "Ed = -1.57", + explicacion: "El signo negativo indica la relación inversa entre precio y cantidad (Ley de la Demanda)" + }, + { + paso: 9, + descripcion: "Tomar valor absoluto para clasificar", + calculo: "|Ed| = |-1.57| = 1.57" + }, + { + paso: 10, + descripcion: "Clasificar según el valor de elasticidad", + calculo: "|Ed| = 1.57 > 1", + resultado: "DEMANDA ELÁSTICA", + explicacion: "La cantidad demandada cambia en mayor proporción que el precio" + } + ], + + respuestaCorrecta: -1.57, + interpretacion: `La elasticidad es -1.57 (elástica). Esto significa que por cada 1% que aumenta + el precio del café, la cantidad demandada disminuye 1.57%. Como |Ed| > 1, la demanda es elástica: + los consumidores son sensibles al precio. Esto tiene sentido porque el café gourmet tiene + muchos sustitutos (café regular, té, otras marcas). Si la tienda sube precios, perderá + muchas ventas. Para maximizar ingresos, debería considerar BAJAR el precio.`, + + pistas: [ + "Recuerda usar el método del punto medio: divide por el promedio de valores inicial y final", + "La elasticidad es (% cambio Q) / (% cambio P)", + "Si |Ed| > 1, la demanda es elástica" + ] + }, + + { + id: "ejercicio-2-calculadora-ingreso", + tipo: "calculadora", + titulo: "Calculadora de Elasticidad Ingreso", + dificultad: "intermedio", + tiempoEstimado: 12, + enunciado: `En un país, cuando el ingreso promedio mensual es de $2000, los hogares consumen + 4 kg de carne de res al mes. Cuando el ingreso sube a $2500, el consumo aumenta a 6 kg. + Calcula la elasticidad ingreso de la demanda y clasifica la carne de res.`, + + datos: { + ingresoInicial: 2000, + ingresoFinal: 2500, + cantidadInicial: 4, + cantidadFinal: 6 + }, + + pasos: [ + { + paso: 1, + descripcion: "Identificar los datos", + calculo: "I₁ = $2000, I₂ = $2500, Q₁ = 4 kg, Q₂ = 6 kg" + }, + { + paso: 2, + descripcion: "Fórmula de elasticidad ingreso", + formula: "Ei = (% cambio Q) / (% cambio I)", + latex: "E_i = \\frac{\\% \\Delta Q}{\\% \\Delta I} = \\frac{\\frac{Q_2 - Q_1}{(Q_1 + Q_2)/2}}{\\frac{I_2 - I_1}{(I_1 + I_2)/2}}", + calculo: "Método del punto medio" + }, + { + paso: 3, + descripcion: "Calcular % cambio en cantidad", + formula: "%ΔQ = (Q₂ - Q₁) / ((Q₁ + Q₂)/2)", + calculo: "%ΔQ = (6 - 4) / ((4 + 6)/2) = 2 / 5 = 0.40 = 40%" + }, + { + paso: 4, + descripcion: "Calcular % cambio en ingreso", + formula: "%ΔI = (I₂ - I₁) / ((I₁ + I₂)/2)", + calculo: "%ΔI = (2500 - 2000) / ((2000 + 2500)/2) = 500 / 2250 = 0.222 = 22.22%" + }, + { + paso: 5, + descripcion: "Calcular elasticidad ingreso", + formula: "Ei = %ΔQ / %ΔI", + calculo: "Ei = 40% / 22.22% = 1.80" + }, + { + paso: 6, + descripcion: "Clasificar el bien", + calculo: "Ei = 1.80 > 1", + resultado: "BIEN DE LUJO", + explicacion: "El consumo de carne crece más que proporcionalmente al ingreso" + } + ], + + respuestaCorrecta: 1.80, + interpretacion: `La elasticidad ingreso es 1.80, indicando que la carne de res es un BIEN DE LUJO + en este contexto. Esto significa que cuando el ingreso aumenta 1%, el consumo de carne aumenta 1.8%. + Esto es típico en economías donde la carne es un símbolo de estatus o donde existe una dieta + base de alimentos más baratos (granos, vegetales) que los consumidores mejoran al subir de ingreso.` + }, + + { + id: "ejercicio-3-calculadora-cruzada", + tipo: "calculadora", + titulo: "Calculadora de Elasticidad Cruzada", + dificultad: "intermedio", + tiempoEstimado: 12, + enunciado: `El precio del té (bien Y) sube de $3 a $4 por caja. Como resultado, la cantidad + demandada de café (bien X) aumenta de 100 a 130 libras al mes. Calcula la elasticidad cruzada + y determina si son sustitutos o complementos.`, + + datos: { + precioYInicial: 3, + precioYFinal: 4, + cantidadXInicial: 100, + cantidadXFinal: 130 + }, + + pasos: [ + { + paso: 1, + descripcion: "Identificar los datos", + calculo: "Py₁ = $3, Py₂ = $4, Qx₁ = 100, Qx₂ = 130" + }, + { + paso: 2, + descripcion: "Fórmula de elasticidad cruzada", + formula: "Exy = (% cambio Qx) / (% cambio Py)", + latex: "E_{xy} = \\frac{\\% \\Delta Q_x}{\\% \\Delta P_y}", + calculo: "Usar método del punto medio" + }, + { + paso: 3, + descripcion: "Calcular % cambio en Qx", + formula: "%ΔQx = (Qx₂ - Qx₁) / ((Qx₁ + Qx₂)/2)", + calculo: "%ΔQx = (130 - 100) / ((100 + 130)/2) = 30 / 115 = 26.09%" + }, + { + paso: 4, + descripcion: "Calcular % cambio en Py", + formula: "%ΔPy = (Py₂ - Py₁) / ((Py₁ + Py₂)/2)", + calculo: "%ΔPy = (4 - 3) / ((3 + 4)/2) = 1 / 3.5 = 28.57%" + }, + { + paso: 5, + descripcion: "Calcular elasticidad cruzada", + formula: "Exy = %ΔQx / %ΔPy", + calculo: "Exy = 26.09% / 28.57% = 0.91" + }, + { + paso: 6, + descripcion: "Determinar relación entre bienes", + calculo: "Exy = 0.91 > 0", + resultado: "BIENES SUSTITUTOS", + explicacion: "Signo positivo indica que al subir precio de Y aumenta demanda de X" + } + ], + + respuestaCorrecta: 0.91, + interpretacion: `La elasticidad cruzada es 0.91 (positiva), confirmando que café y té son SUSTITUTOS. + Cuando el té se encarece, los consumidores sustituyen parcialmente su consumo por café. + El valor menor a 1 indica que son sustitutos moderados, no perfectos. Los consumidores + tienen cierta preferencia por uno u otro, pero sí responden a diferencias de precio.` + } +]; + +export const ejerciciosClasificacion = [ + { + id: "clasificacion-1", + tipo: "clasificacion", + titulo: "Clasificar Bienes según Elasticidad Ingreso", + dificultad: "intermedio", + tiempoEstimado: 15, + enunciado: `Analiza los siguientes casos y clasifica cada bien como: Normal Necesario, + de Lujo, o Inferior. Justifica tu respuesta con el valor calculado de Ei.`, + + casos: [ + { + id: "caso-a", + bien: "Arroz", + datos: { + ingresoInicial: 1000, + ingresoFinal: 1500, + cantidadInicial: 20, + cantidadFinal: 22 + }, + pasos: [ + "%ΔQ = (22-20)/((20+22)/2) = 2/21 = 9.52%", + "%ΔI = (1500-1000)/((1000+1500)/2) = 500/1250 = 40%", + "Ei = 9.52% / 40% = 0.24" + ], + respuesta: "NORMAL NECESARIO", + justificacion: "0 < 0.24 < 1: El consumo aumenta poco respecto al ingreso" + }, + { + id: "caso-b", + bien: "Viajes internacionales", + datos: { + ingresoInicial: 3000, + ingresoFinal: 4500, + cantidadInicial: 1, + cantidadFinal: 4 + }, + pasos: [ + "%ΔQ = (4-1)/((1+4)/2) = 3/2.5 = 120%", + "%ΔI = (4500-3000)/((3000+4500)/2) = 1500/3750 = 40%", + "Ei = 120% / 40% = 3.0" + ], + respuesta: "BIEN DE LUJO", + justificacion: "Ei = 3.0 > 1: El consumo crece más que proporcionalmente al ingreso" + }, + { + id: "caso-c", + bien: "Autobuses urbanos", + datos: { + ingresoInicial: 2000, + ingresoFinal: 3500, + cantidadInicial: 40, + cantidadFinal: 20 + }, + pasos: [ + "%ΔQ = (20-40)/((40+20)/2) = -20/30 = -66.67%", + "%ΔI = (3500-2000)/((2000+3500)/2) = 1500/2750 = 54.55%", + "Ei = -66.67% / 54.55% = -1.22" + ], + respuesta: "BIEN INFERIOR", + justificacion: "Ei = -1.22 < 0: El consumo disminuye al aumentar el ingreso (la gente compra auto o usa taxi)" + } + ] + }, + + { + id: "clasificacion-2", + tipo: "clasificacion", + titulo: "Identificar Sustitutos y Complementos", + dificultad: "intermedio", + tiempoEstimado: 15, + enunciado: `Para cada par de bienes, calcula la elasticidad cruzada y determina si son + sustitutos, complementos o independientes.`, + + casos: [ + { + id: "caso-a", + bienX: "Coca-Cola", + bienY: "Pepsi", + datos: { + precioYInicial: 2, + precioYFinal: 2.5, + cantidadXInicial: 100, + cantidadXFinal: 130 + }, + pasos: [ + "%ΔQx = (130-100)/((100+130)/2) = 30/115 = 26.09%", + "%ΔPy = (2.5-2)/((2+2.5)/2) = 0.5/2.25 = 22.22%", + "Exy = 26.09% / 22.22% = 1.17" + ], + respuesta: "SUSTITUTOS", + justificacion: "Exy = 1.17 > 0: Al subir Pepsi, aumenta demanda de Coca-Cola" + }, + { + id: "caso-b", + bienX: "Autos", + bienY: "Gasolina", + datos: { + precioYInicial: 4, + precioYFinal: 6, + cantidadXInicial: 1000, + cantidadXFinal: 700 + }, + pasos: [ + "%ΔQx = (700-1000)/((1000+700)/2) = -300/850 = -35.29%", + "%ΔPy = (6-4)/((4+6)/2) = 2/5 = 40%", + "Exy = -35.29% / 40% = -0.88" + ], + respuesta: "COMPLEMENTOS", + justificacion: "Exy = -0.88 < 0: Al subir gasolina, disminuye demanda de autos" + }, + { + id: "caso-c", + bienX: "Libros", + bienY: "Manzanas", + datos: { + precioYInicial: 2, + precioYFinal: 3, + cantidadXInicial: 50, + cantidadXFinal: 50 + }, + pasos: [ + "%ΔQx = (50-50)/((50+50)/2) = 0%", + "%ΔPy = (3-2)/((2+3)/2) = 1/2.5 = 40%", + "Exy = 0% / 40% = 0" + ], + respuesta: "INDEPENDIENTES", + justificacion: "Exy = 0: El precio de las manzanas no afecta demanda de libros" + } + ] + } +]; + +export const ejerciciosExamen = [ + { + id: "examen-1", + tipo: "examen", + titulo: "Problema Tipo Examen - Análisis de Mercado", + dificultad: "avanzado", + tiempoEstimado: 25, + enunciado: `La empresa "TechPhone" vende smartphones. El año pasado, con un precio de $800, + vendieron 50,000 unidades. Este año, debido a la competencia, bajaron el precio a $720 + y vendieron 65,000 unidades. + + a) Calcule la elasticidad precio de la demanda usando el método del punto medio. + b) Clasifique la demanda y explique qué significa para la empresa. + c) ¿Qué pasaría con los ingresos totales si TechPhone subiera el precio a $850? + (Calcule los ingresos en ambos escenarios y compare)`, + + solucion: { + parteA: { + pasos: [ + { + descripcion: "Datos", + calculo: "P₁ = $800, P₂ = $720, Q₁ = 50,000, Q₂ = 65,000" + }, + { + descripcion: "Calcular %ΔQ", + calculo: "%ΔQ = (65,000-50,000)/((50,000+65,000)/2) = 15,000/57,500 = 26.09%" + }, + { + descripcion: "Calcular %ΔP", + calculo: "%ΔP = (720-800)/((800+720)/2) = -80/760 = -10.53%" + }, + { + descripcion: "Calcular Ed", + calculo: "Ed = 26.09% / -10.53% = -2.48", + resultado: "|Ed| = 2.48" + } + ], + respuesta: "Ed = -2.48 (elástica)" + }, + + parteB: { + clasificacion: "Demanda ELÁSTICA (|Ed| = 2.48 > 1)", + interpretacion: `La demanda es muy sensible al precio. Un cambio de 1% en el precio + produce un cambio de 2.48% en la cantidad demandada (en sentido opuesto). Esto indica + que existen muchos competidores y sustitutos en el mercado de smartphones.`, + implicacionEmpresa: `TechPhone tiene poco poder de fijación de precios. Si sube precios, + perderá muchos clientes a la competencia.` + }, + + parteC: { + escenarioActual: { + precio: 720, + cantidad: 65000, + ingresoTotal: 720 * 65000 + }, + escenarioPropuesto: { + precio: 850, + cantidadEstimada: "Usar elasticidad para estimar", + calculoCantidad: [ + "%ΔP = (850-720)/720 × 100 = 18.06%", + "Como Ed = -2.48, %ΔQ = -2.48 × 18.06% = -44.79%", + "Q nueva = 65,000 × (1 - 0.4479) = 35,887 unidades" + ], + ingresoTotal: 850 * 35887 + }, + comparacion: { + ingresoActual: 46800000, + ingresoConSubida: 30503950, + diferencia: -16296050, + porcentaje: -34.8 + }, + conclusion: `Si TechPhone sube el precio a $850, sus ingresos caerían aproximadamente + $16.3 millones (35% menos). Como la demanda es elástica, subir precios reduce los ingresos + totales. La estrategia correcta sería BAJAR precios para aumentar ingresos.` + } + } + }, + + { + id: "examen-2", + tipo: "examen", + titulo: "Caso Real - Bienes Inferiores en Recesión", + dificultad: "avanzado", + tiempoEstimado: 20, + enunciado: `Durante una recesión económica, el ingreso promedio familiar cayó de $4000 a $3200 + mensuales. Como resultado: + - Las ventas de carne de res cayeron de 8 kg a 5 kg por familia + - Las ventas de fideos instantáneos subieron de 10 paquetes a 18 paquetes + + a) Calcule la elasticidad ingreso para cada bien. + b) Clasifique cada bien y explique el comportamiento observado. + c) ¿Qué tipo de negocios prosperarían en una recesión según estos datos?`, + + solucion: { + parteA: { + carneRes: { + pasos: [ + "%ΔQ = (5-8)/((8+5)/2) = -3/6.5 = -46.15%", + "%ΔI = (3200-4000)/((4000+3200)/2) = -800/3600 = -22.22%", + "Ei = -46.15% / -22.22% = 2.08" + ], + resultado: "Ei = 2.08" + }, + fideos: { + pasos: [ + "%ΔQ = (18-10)/((10+18)/2) = 8/14 = 57.14%", + "%ΔI = (3200-4000)/((4000+3200)/2) = -800/3600 = -22.22%", + "Ei = 57.14% / -22.22% = -2.57" + ], + resultado: "Ei = -2.57" + } + }, + + parteB: { + carneRes: { + clasificacion: "BIEN DE LUJO", + explicacion: `Ei = 2.08 > 1. Cuando el ingreso cayó 22%, el consumo de carne cayó 46%. + El consumo es muy sensible al ingreso, cayendo más que proporcionalmente.` + }, + fideos: { + clasificacion: "BIEN INFERIOR", + explicacion: `Ei = -2.57 < 0. Cuando el ingreso cayó 22%, el consumo de fideos subió 57%. + Las familias sustituyeron carne por fideos al empobrecerse.` + } + }, + + parteC: { + negociosProsperos: [ + "Tiendas de descuento y marcas genéricas", + "Comida rápida económica", + "Transporte público", + "Productos de segunda mano", + "Entretenimiento en casa (streaming vs cine)" + ], + justificacion: `Los bienes inferiores ven aumentar su demanda en recesiones. Las empresas + que venden estos bienes tienden a tener ventas estables o crecientes durante crisis económicas, + mientras que las de bienes de lujo sufren.` + } + } + }, + + { + id: "examen-3", + tipo: "examen", + titulo: "Problema Integrador - Todas las Elasticidades", + dificultad: "avanzado", + tiempoEstimado: 30, + enunciado: `Una cadena de supermercados analiza el mercado de bebidas. Recopilan los siguientes datos: + + CASO 1: Cuando el precio del jugo de naranja bajó de $5 a $4: + - Ventas de jugo de naranja: de 1000 a 1400 litros + - Ventas de jugo de manzana: de 800 a 600 litros + + CASO 2: Cuando el ingreso promedio de clientes subió de $3000 a $3600: + - Ventas de jugo de naranja: de 1000 a 1300 litros + - Ventas de soda: de 2000 a 1600 litros + + Resuelva: + a) Elasticidad precio del jugo de naranja. ¿Es elástica o inelástica? + b) Elasticidad cruzada entre jugo de naranja y manzana. ¿Qué relación tienen? + c) Elasticidad ingreso del jugo de naranja. ¿Qué tipo de bien es? + d) Elasticidad ingreso de la soda. ¿Qué tipo de bien es? + e) Si el supermercado quiere maximizar ingresos por ventas de jugo de naranja, + ¿debería subir o bajar el precio? Justifique con números.`, + + solucion: { + parteA: { + descripcion: "Elasticidad precio del jugo de naranja", + pasos: [ + "P₁=$5, P₂=$4, Q₁=1000, Q₂=1400", + "%ΔQ = (1400-1000)/((1000+1400)/2) = 400/1200 = 33.33%", + "%ΔP = (4-5)/((5+4)/2) = -1/4.5 = -22.22%", + "Ed = 33.33% / -22.22% = -1.5", + "|Ed| = 1.5" + ], + respuesta: "Ed = -1.5 → ELÁSTICA", + interpretacion: "Por cada 1% que baja el precio, la cantidad demandada aumenta 1.5%" + }, + + parteB: { + descripcion: "Elasticidad cruzada (naranja X, manzana Y)", + pasos: [ + "Py₁=$4 (asumiendo precio inicial de manzana), pero mejor usar %ΔPy del naranja", + "Exy = (%ΔQx manzana) / (%ΔPy naranja)", + "%ΔQx manzana = (600-800)/((800+600)/2) = -200/700 = -28.57%", + "%ΔPy naranja = -22.22% (de la parte a)", + "Exy = -28.57% / -22.22% = +1.29" + ], + respuesta: "Exy = +1.29 → SUSTITUTOS", + interpretacion: "Signo positivo indica sustitutos. Al bajar el precio del jugo de naranja, la gente compra menos manzana" + }, + + parteC: { + descripcion: "Elasticidad ingreso del jugo de naranja", + pasos: [ + "I₁=$3000, I₂=$3600, Q₁=1000, Q₂=1300", + "%ΔQ = (1300-1000)/((1000+1300)/2) = 300/1150 = 26.09%", + "%ΔI = (3600-3000)/((3000+3600)/2) = 600/3300 = 18.18%", + "Ei = 26.09% / 18.18% = 1.44" + ], + respuesta: "Ei = 1.44 → BIEN DE LUJO", + interpretacion: "Ei > 1 indica que el jugo de naranja es un bien de lujo. El consumo crece más que proporcionalmente al ingreso" + }, + + parteD: { + descripcion: "Elasticidad ingreso de la soda", + pasos: [ + "I₁=$3000, I₂=$3600, Q₁=2000, Q₂=1600", + "%ΔQ = (1600-2000)/((2000+1600)/2) = -400/1800 = -22.22%", + "%ΔI = 18.18% (igual que arriba)", + "Ei = -22.22% / 18.18% = -1.22" + ], + respuesta: "Ei = -1.22 → BIEN INFERIOR", + interpretacion: "Ei < 0 indica bien inferior. Al subir el ingreso, la gente compra menos soda (prefiere jugos naturales)" + }, + + parteE: { + descripcion: "Estrategia de precios para maximizar ingresos", + analisis: { + elasticidad: "Ed = -1.5 (elástica)", + regla: "Cuando |Ed| > 1, subir precio reduce ingresos; bajar precio aumenta ingresos" + }, + calculoComparativo: { + escenario1: { precio: 5, cantidad: 1000, ingreso: 5000 }, + escenario2: { precio: 4, cantidad: 1400, ingreso: 5600 } + }, + diferencia: 600, + porcentaje: "+12%", + respuesta: "BAJAR EL PRECIO", + justificacion: `Al bajar el precio de $5 a $4, los ingresos aumentaron de $5000 a $5600 (+12%). + Como la demanda es elástica, el aumento porcentual en cantidad (33%) supera la caída porcentual + en precio (22%), resultando en mayores ingresos totales.` + } + } + } +]; + +export const datosPractica = { + bienesEjemplo: [ + { nombre: "Gasolina", ed: 0.2, ei: 0.8, tipo: "Necesidad inelástica" }, + { nombre: "Restaurantes", ed: 1.6, ei: 2.2, tipo: "Lujo elástico" }, + { nombre: "Cine", ed: 3.0, ei: 1.8, tipo: "Entretenimiento elástico" }, + { nombre: "Medicinas", ed: 0.1, ei: 0.2, tipo: "Necesidad muy inelástica" }, + { nombre: "Viajes internacionales", ed: 4.0, ei: 3.5, tipo: "Lujo muy elástico" }, + { nombre: "Sal", ed: 0.05, ei: 0.1, tipo: "Necesidad casi perfectamente inelástica" }, + { nombre: "Cerveza", ed: 1.2, ei: 0.9, tipo: "Bien normal elástico" }, + { nombre: "Transporte público", ed: 0.4, ei: -0.6, tipo: "Inferior inelástico" }, + { nombre: "Marca genérica", ed: 2.5, ei: -1.2, tipo: "Inferior elástico" }, + { nombre: "Vivienda", ed: 0.8, ei: 1.1, tipo: "Lujo/Necesidad borde" } + ], + + formulasRapidas: { + precioDemanda: { + nombre: "Elasticidad Precio Demanda", + latex: "E_d = \\frac{\\% \\Delta Q_d}{\\% \\Delta P}", + signo: "Negativo (usar |Ed|)", + interpretacion: { + mayor1: "Elástica - sensible al precio", + menor1: "Inelástica - poco sensible al precio", + igual1: "Unitaria - cambio proporcional" + } + }, + ingreso: { + nombre: "Elasticidad Ingreso", + latex: "E_i = \\frac{\\% \\Delta Q}{\\% \\Delta I}", + clasificacion: { + mayor0: "Bien Normal", + entre0y1: "Necesidad", + mayor1: "Lujo", + menor0: "Inferior" + } + }, + cruzada: { + nombre: "Elasticidad Cruzada", + latex: "E_{xy} = \\frac{\\% \\Delta Q_x}{\\% \\Delta P_y}", + clasificacion: { + mayor0: "Sustitutos", + menor0: "Complementos", + igual0: "Independientes" + } + } + } +}; + +export default { + ejerciciosCalculadora: ejerciciosElasticidad, + ejerciciosClasificacion: ejerciciosClasificacion, + ejerciciosExamen: ejerciciosExamen, + datosPractica +}; diff --git a/frontend/src/content/modulo3/tipos.ts b/frontend/src/content/modulo3/tipos.ts new file mode 100644 index 0000000..fc5166a --- /dev/null +++ b/frontend/src/content/modulo3/tipos.ts @@ -0,0 +1,328 @@ +export const tiposElasticidad = { + id: "tipos-elasticidad", + titulo: "Tipos de Elasticidad en Economía", + + introduccion: { + descripcion: `Además de la elasticidad precio de la demanda, existen otros tipos de elasticidad +que miden la respuesta de la cantidad ante diferentes variables económicas. Cada tipo de elasticidad +proporciona información valiosa sobre el comportamiento de consumidores y productores.` + }, + + tipos: [ + { + id: "elasticidad-precio-demanda", + nombre: "Elasticidad Precio de la Demanda (Ed)", + abreviatura: "Ed o Ep", + descripcion: "Mide la sensibilidad de la cantidad demandada ante cambios en el precio del propio bien", + + formula: { + latex: "E_d = \\frac{\\% \\Delta Q_d}{\\% \\Delta P} = \\frac{\\Delta Q_d / Q_d}{\\Delta P / P}", + verbal: "Porcentaje de cambio en cantidad demandada dividido por porcentaje de cambio en precio", + nota: "Siempre es negativa (ley de la demanda), pero se usa valor absoluto para clasificar" + }, + + interpretacion: { + negativa: "Por convención, se reporta en valor absoluto (positivo)", + elastico: "|Ed| > 1: La cantidad es muy sensible al precio", + inelastico: "|Ed| < 1: La cantidad es poco sensible al precio", + unitario: "|Ed| = 1: Cambio proporcional" + }, + + ejemploNumerico: { + titulo: "Ejemplo: Gasolina", + datos: { + precioInicial: 4.0, + precioFinal: 4.4, + cantidadInicial: 1000, + cantidadFinal: 950 + }, + calculo: [ + "%ΔQ = (950 - 1000) / 1000 × 100 = -5%", + "%ΔP = (4.4 - 4.0) / 4.0 × 100 = 10%", + "Ed = -5% / 10% = -0.5", + "|Ed| = 0.5 (INELÁSTICA)" + ], + conclusion: "La gasolina tiene demanda inelástica a corto plazo porque es una necesidad" + }, + + determinantes: [ + "Disponibilidad de sustitutos cercanos", + "Naturaleza del bien (necesidad vs. lujo)", + "Proporción del ingreso gastada en el bien", + "Horizonte temporal (corto vs. largo plazo)", + "Definición del mercado (amplio vs. específico)" + ] + }, + + { + id: "elasticidad-ingreso-demanda", + nombre: "Elasticidad Ingreso de la Demanda (Ei)", + abreviatura: "Ei o Ey", + descripcion: "Mide la sensibilidad de la cantidad demandada ante cambios en el ingreso del consumidor", + + formula: { + latex: "E_i = \\frac{\\% \\Delta Q_d}{\\% \\Delta I} = \\frac{\\Delta Q_d / Q_d}{\\Delta I / I}", + verbal: "Porcentaje de cambio en cantidad demandada dividido por porcentaje de cambio en ingreso", + donde: [ + { variable: "Qd", significado: "Cantidad demandada" }, + { variable: "I", significado: "Ingreso del consumidor" } + ] + }, + + clasificacionBienes: [ + { + tipo: "Bien Normal", + condicion: "Ei > 0", + descripcion: "La cantidad demandada aumenta cuando aumenta el ingreso", + subtipos: [ + { tipo: "Bien Necesario", rango: "0 < Ei < 1", ejemplo: "Alimentos básicos" }, + { tipo: "Bien de Lujo", rango: "Ei > 1", ejemplo: "Viajes, joyas, autos deportivos" } + ] + }, + { + tipo: "Bien Inferior", + condicion: "Ei < 0", + descripcion: "La cantidad demandada disminuye cuando aumenta el ingreso", + ejemplo: "Transporte público, fideos instantáneos, marca genérica" + } + ], + + ejemploNumerico: { + titulo: "Ejemplo: Restaurantes de lujo", + datos: { + ingresoInicial: 50000, + ingresoFinal: 60000, + cantidadInicial: 12, + cantidadFinal: 20 + }, + calculo: [ + "%ΔQ = (20 - 12) / 12 × 100 = 66.67%", + "%ΔI = (60000 - 50000) / 50000 × 100 = 20%", + "Ei = 66.67% / 20% = 3.33", + "Ei > 1 → Bien de LUJO" + ], + conclusion: "Los restaurantes de lujo son un bien de lujo porque su demanda crece más que proporcionalmente al ingreso" + }, + + aplicacion: "Ayuda a predecir cómo cambiará la demanda en ciclos económicos (expansión/recesión)" + }, + + { + id: "elasticidad-cruzada", + nombre: "Elasticidad Cruzada de la Demanda (Exy)", + abreviatura: "Exy o Ec", + descripcion: "Mide la sensibilidad de la cantidad demandada de un bien X ante cambios en el precio de otro bien Y", + + formula: { + latex: "E_{xy} = \\frac{\\% \\Delta Q_x}{\\% \\Delta P_y} = \\frac{\\Delta Q_x / Q_x}{\\Delta P_y / P_y}", + verbal: "Porcentaje de cambio en cantidad demandada del bien X dividido por porcentaje de cambio en precio del bien Y", + donde: [ + { variable: "Qx", significado: "Cantidad demandada del bien X" }, + { variable: "Py", significado: "Precio del bien Y" } + ] + }, + + clasificacionBienes: [ + { + tipo: "Bienes Sustitutos", + condicion: "Exy > 0", + signo: "Positiva", + descripcion: "Si sube el precio de Y, aumenta la demanda de X", + ejemplo: "Coca-Cola y Pepsi, café y té, mantequilla y margarina", + logica: "Cuando el café sube de precio, la gente consume más té" + }, + { + tipo: "Bienes Complementarios", + condicion: "Exy < 0", + signo: "Negativa", + descripcion: "Si sube el precio de Y, disminuye la demanda de X", + ejemplo: "Autos y gasolina, computadores y software, pan y mantequilla", + logica: "Si sube el precio de la gasolina, se demandan menos autos" + }, + { + tipo: "Bienes Independientes", + condicion: "Exy = 0", + signo: "Cero", + descripcion: "El precio de Y no afecta la demanda de X", + ejemplo: "Zapatos y tomates, libros y sillas", + logica: "No existe relación de consumo entre ambos bienes" + } + ], + + ejemploNumerico: { + titulo: "Ejemplo: Café (X) y Té (Y) - Sustitutos", + datos: { + precioTeInicial: 3, + precioTeFinal: 3.6, + cantidadCafeInicial: 100, + cantidadCafeFinal: 120 + }, + calculo: [ + "%ΔQx = (120 - 100) / 100 × 100 = 20%", + "%ΔPy = (3.6 - 3) / 3 × 100 = 20%", + "Exy = 20% / 20% = 1.0", + "Exy > 0 → BIENES SUSTITUTOS" + ], + conclusion: "El café y el té son sustitutos porque al subir el precio del té, aumenta la demanda de café" + }, + + magnitud: "Entre más grande sea el valor absoluto de Exy, más fuerte es la relación entre los bienes" + }, + + { + id: "elasticidad-precio-oferta", + nombre: "Elasticidad Precio de la Oferta (Es o Eo)", + abreviatura: "Es", + descripcion: "Mide la sensibilidad de la cantidad ofrecida ante cambios en el precio del bien", + + formula: { + latex: "E_s = \\frac{\\% \\Delta Q_s}{\\% \\Delta P} = \\frac{\\Delta Q_s / Q_s}{\\Delta P / P}", + verbal: "Porcentaje de cambio en cantidad ofrecida dividido por porcentaje de cambio en precio", + nota: "Siempre es positiva (ley de la oferta)" + }, + + interpretacion: [ + { + rango: "Es > 1", + clasificacion: "Oferta ELÁSTICA", + significado: "La cantidad ofrecida es muy sensible al precio", + ejemplo: "Bienes manufacturados que se pueden producir rápidamente" + }, + { + rango: "Es < 1", + clasificacion: "Oferta INELÁSTICA", + significado: "La cantidad ofrecida es poco sensible al precio", + ejemplo: "Bienes agrícolas a corto plazo, bienes con capacidad limitada" + }, + { + rango: "Es = 1", + clasificacion: "Oferta UNITARIA", + significado: "Cambio proporcional en cantidad ofrecida" + }, + { + rango: "Es = 0", + clasificacion: "Oferta PERFECTAMENTE INELÁSTICA", + significado: "Cantidad fija sin importar el precio", + ejemplo: "Obras de arte únicas, terrenos en una ubicación específica" + }, + { + rango: "Es = ∞", + clasificacion: "Oferta PERFECTAMENTE ELÁSTICA", + significado: "Los productores ofrecen cualquier cantidad al precio de mercado", + ejemplo: "Industria con capacidad ilimitada y costos constantes" + } + ], + + horizonteTemporal: { + titulo: "Elasticidad en Diferentes Horizontes Temporales", + descripcion: "La elasticidad de la oferta varía según el tiempo disponible para ajustar la producción", + + periodos: [ + { + periodo: "Mercado Momentáneo o Very Short Run", + tiempo: "Horas o días", + caracteristicas: "Cantidad fija, Es = 0", + ejemplo: "Pescado fresco del día, flores cortadas", + curva: "Línea vertical" + }, + { + periodo: "Corto Plazo (Short Run)", + tiempo: "Meses", + caracteristicas: "Es inelástica pero > 0, algunos factores son fijos", + ejemplo: "Agricultura (tierra fija), manufactura (planta fija)", + curva: "Pendiente positiva empinada" + }, + { + periodo: "Largo Plazo (Long Run)", + tiempo: "Años", + caracteristicas: "Es más elástica, todos los factores son variables", + ejemplo: "Pueden construirse nuevas fábricas, comprarse más tierras", + curva: "Pendiente positiva más plana" + } + ] + }, + + ejemploNumerico: { + titulo: "Ejemplo: Tomates (corto plazo vs largo plazo)", + + cortoPlazo: { + datos: { + precioInicial: 2, + precioFinal: 3, + cantidadInicial: 1000, + cantidadFinal: 1100 + }, + calculo: [ + "%ΔQs = (1100 - 1000) / 1000 × 100 = 10%", + "%ΔP = (3 - 2) / 2 × 100 = 50%", + "Es = 10% / 50% = 0.2 (INELÁSTICA)" + ], + explicacion: "En el corto plazo no se pueden plantar más tomates, la oferta es rígida" + }, + + largoPlazo: { + datos: { + precioInicial: 2, + precioFinal: 3, + cantidadInicial: 1000, + cantidadFinal: 2000 + }, + calculo: [ + "%ΔQs = (2000 - 1000) / 1000 × 100 = 100%", + "%ΔP = (3 - 2) / 2 × 100 = 50%", + "Es = 100% / 50% = 2.0 (ELÁSTICA)" + ], + explicacion: "En el largo plazo se pueden ampliar los cultivos, la oferta es flexible" + } + }, + + determinantes: [ + "Flexibilidad de los factores de producción", + "Tiempo necesario para ajustar la producción", + "Costos de almacenamiento", + "Capacidad ociosa disponible", + "Movilidad de los factores productivos" + ] + } + ], + + tablaComparativa: { + titulo: "Tabla Comparativa de Tipos de Elasticidad", + columnas: ["Tipo", "Fórmula", "Signo", "Interpretación Principal"], + filas: [ + ["Precio Demanda (Ed)", "%ΔQd / %ΔP", "Negativo (|Ed|)", "Sensibilidad al precio propio"], + ["Ingreso (Ei)", "%ΔQd / %ΔI", "Positivo/Negativo", "Clasifica bienes normales/inferiores"], + ["Cruzada (Exy)", "%ΔQx / %ΔPy", "Positivo/Negativo/Cero", "Identifica sustitutos/complementos"], + ["Precio Oferta (Es)", "%ΔQs / %ΔP", "Positivo", "Capacidad de respuesta de productores"] + ] + }, + + ejercicioIntegrador: { + titulo: "Ejercicio Integrador: Análisis Completo", + escenario: `Una empresa vende smartphones. Observa que cuando el precio baja de $800 a $720, + la cantidad demandada aumenta de 1000 a 1200 unidades. Además, cuando el ingreso promedio + de los consumidores sube de $3000 a $3300, la cantidad demandada aumenta de 1000 a 1150 unidades. + Finalmente, cuando el precio de los tablets (bien relacionado) sube de $500 a $600, + la cantidad demandada de smartphones aumenta de 1000 a 1100 unidades.`, + + preguntas: [ + { + pregunta: "Calcular Ed (elasticidad precio)", + respuesta: "|Ed| = 1.76 → Demanda ELÁSTICA", + interpretacion: "Los smartphones son sensibles al precio" + }, + { + pregunta: "Calcular Ei (elasticidad ingreso)", + respuesta: "Ei = 1.5 → Bien de LUJO", + interpretacion: "La demanda crece más que proporcionalmente al ingreso" + }, + { + pregunta: "Calcular Exy (elasticidad cruzada con tablets)", + respuesta: "Exy = 0.45 → BIENES SUSTITUTOS", + interpretacion: "Tablets y smartphones son sustitutos débiles" + } + ] + } +}; + +export default tiposElasticidad; diff --git a/frontend/src/content/modulo4/costos.ts b/frontend/src/content/modulo4/costos.ts new file mode 100644 index 0000000..a5407d8 --- /dev/null +++ b/frontend/src/content/modulo4/costos.ts @@ -0,0 +1,237 @@ +export interface Seccion { + titulo: string; + contenido: string; +} + +export interface Ejercicio { + id: string; + tipo: 'slider' | 'quiz' | 'juego' | 'tabla' | 'calculadora'; + titulo: string; + descripcion: string; + config: Record; +} + +export interface ModuloContenido { + titulo: string; + contenido: Seccion[]; + ejercicios: Ejercicio[]; +} + +export const costos: ModuloContenido = { + titulo: 'Costos de Producción', + contenido: [ + { + titulo: 'Costos Fijos y Variables', + contenido: `Los costos totales se componen de dos categorías fundamentales: + +**Costos Fijos (CF)** +Son costos que no varían con la cantidad producida. Se incurren incluso si Q = 0. + +Ejemplos: +- Alquiler de la planta +- Seguros +- Salarios de administración +- Depreciación (método lineal) + +**Costos Variables (CV)** +Varían directamente con el nivel de producción. Si Q = 0, CV = 0. + +Ejemplos: +- Materias primas +- Mano de obra directa +- Energía consumida +- Envases y embalajes + +**Costo Total (CT)** +$$CT = CF + CV$$ + +**Ejemplo numérico:** +Una panadería tiene: +- CF = $1,000/mes (alquiler, seguros) +- CV = $5 por pan (harina, salario panadero) + +| Q (panes) | CF | CV | CT | +|-----------|----|----|----| +| 0 | 1,000 | 0 | 1,000 | +| 100 | 1,000 | 500 | 1,500 | +| 200 | 1,000 | 1,000 | 2,000 | +| 300 | 1,000 | 1,500 | 2,500 | +| 400 | 1,000 | 2,000 | 3,000 |` + }, + { + titulo: 'Costos Medios', + contenido: `Los costos medios (o unitarios) representan el costo por unidad producida: + +**Costo Fijo Medio (CFMe)** +$$CFMe = \frac{CF}{Q}$$ + +Característica: Siempre decreciente conforme aumenta Q (se "diluye" el costo fijo). + +**Costo Variable Medio (CVMe)** +$$CVMe = \frac{CV}{Q}$$ + +Forma típica: U invertida (primero decrece por economías de escala, luego crece por deseconomías). + +**Costo Total Medio (CMe o CTM)** +$$CMe = \frac{CT}{Q} = CFMe + CVMe$$ + +Forma típica: U invertida, con un mínimo donde CMe = CMg. + +**Tabla de ejemplo:** +| Q | CF | CV | CT | CFMe | CVMe | CMe | +|---|----|----|----|------|------|-----| +| 0 | 100 | 0 | 100 | - | - | - | +| 1 | 100 | 50 | 150 | 100.0 | 50.0 | 150.0 | +| 2 | 100 | 90 | 190 | 50.0 | 45.0 | 95.0 | +| 3 | 100 | 120 | 220 | 33.3 | 40.0 | 73.3 | +| 4 | 100 | 160 | 260 | 25.0 | 40.0 | 65.0 | +| 5 | 100 | 250 | 350 | 20.0 | 50.0 | 70.0 | + +Observa que CMe es mínimo (65.0) cuando está en su punto más bajo entre CFMe y CVMe.` + }, + { + titulo: 'Costo Marginal', + contenido: `El **costo marginal (CMg)** es el incremento en el costo total al producir una unidad adicional: + +$$CMg = \frac{\Delta CT}{\Delta Q} = \frac{dCT}{dQ}$$ + +**Importancia:** +- Determina la decisión de producción óptima +- Representa el costo de la última unidad producida +- Es la derivada del costo total + +**Relación fundamental:** +$$CMg = \frac{\Delta CV}{\Delta Q}$$ + +(Dado que CF no varía con Q, solo CV afecta CMg) + +**Ejemplo de cálculo:** +| Q | CT | CMg | +|---|----|-----| +| 0 | 100 | - | +| 1 | 150 | 50 | +| 2 | 190 | 40 | +| 3 | 220 | 30 | +| 4 | 260 | 40 | +| 5 | 350 | 90 | + +**Propiedades matemáticas:** +1. CMg intercepta CVMe y CMe en sus puntos mínimos +2. Cuando CMg < CMe, CMe está decreciendo +3. Cuando CMg > CMe, CMe está creciendo +4. Cuando CMg = CMe, CMe está en su mínimo + +**Intuición:** Si el costo de la siguiente unidad (CMg) es menor que el costo promedio actual, producirla reduce el costo medio.` + }, + { + titulo: 'Relación entre Curvas de Costos', + contenido: `Las curvas de costos tienen relaciones matemáticas y económicas fundamentales: + +**Gráfico conceptual:** + +Las curvas de costos se relacionan de la siguiente manera: + +| Elemento | Descripción | +|----------|-------------| +| **Eje vertical** | Costos | +| **Eje horizontal** | Cantidad (Q) | +| **Curva CMe** | Forma de U invertida | +| **Curva CMg** | U invertida que intersecta a CMe en su punto más bajo | +| **Punto de eficiencia** | Donde CMg = CMe (mínimo del costo medio) | + +**Relaciones clave entre las curvas:** + +1. **CFMe siempre decreciente:** A medida que aumenta Q, el costo fijo se distribuye en más unidades + +2. **CMg corta a CVMe en su mínimo:** + - Antes del punto de intersección: CMg < CVMe → CVMe decrece + - Después del punto de intersección: CMg > CVMe → CVMe crece + +3. **CMg corta a CMe en su mínimo:** + - Cuando CMg < CMe: CMe está decreciendo + - Cuando CMg > CMe: CMe está creciendo + - Cuando CMg = CMe: CMe está en su punto mínimo (producción técnicamente más eficiente) + +**Relaciones clave:** + +1. **CFMe siempre decreciente** + - Forma de hipérbola rectangular + - Nunca intersecta a ninguna otra curva + +2. **CMg corta a CVMe en su mínimo** + - Antes: CMg < CVMe → CVMe decrece + - Después: CMg > CVMe → CVMe crece + +3. **CMg corta a CMe en su mínimo** + - Punto de mínimo costo medio de producción + - Producto técnicamente más eficiente + +4. **Forma de las curvas:** + - **CT**: Siempre creciente, convexa luego cóncava + - **CMg**: U invertida, corta mínimos + - **CMe**: U invertida, por encima de CVMe + - **CVMe**: U invertida, por debajo de CMe + +**Relación con producción:** +El CMg mínimo corresponde al PMg máximo (ley de rendimientos decrecientes en acción). Cuando PMg decrece, CMg crece.` + } + ], + ejercicios: [ + { + id: 'costos-calculadora', + tipo: 'calculadora', + titulo: 'Calculadora de Costos', + descripcion: 'Ingresa CF, CV para cada nivel de producción y calcula automáticamente todos los costos medios y marginales', + config: { + columnas: ['Q', 'CF', 'CV', 'CT', 'CFMe', 'CVMe', 'CMe', 'CMg'], + datosEditables: ['CF', 'CV'], + calcularAutomatico: true, + nivelMaximo: 10, + mostrarGrafico: true, + destacarMinimos: true + } + }, + { + id: 'costos-relaciones', + tipo: 'quiz', + titulo: 'Relaciones entre Costos', + descripcion: 'Identifica las relaciones correctas entre las curvas de costo', + config: { + preguntas: [ + { + pregunta: '¿Dónde se intersectan CMg y CMe?', + opciones: [ + 'En el origen', + 'En el mínimo de CMe', + 'En el máximo de producción', + 'Nunca se intersectan' + ], + respuestaCorrecta: 1 + }, + { + pregunta: '¿Qué pasa con CMe cuando CMg < CMe?', + opciones: [ + 'CMe aumenta', + 'CMe disminuye', + 'CMe se mantiene constante', + 'CMe se vuelve negativo' + ], + respuestaCorrecta: 1 + }, + { + pregunta: '¿Por qué CFMe siempre decrece?', + opciones: [ + 'Porque CF aumenta', + 'Porque el costo fijo se distribuye en más unidades', + 'Porque CV disminuye', + 'Porque CT es constante' + ], + respuestaCorrecta: 1 + } + ] + } + } + ] +}; + +export default costos; diff --git a/frontend/src/content/modulo4/ejercicios.ts b/frontend/src/content/modulo4/ejercicios.ts new file mode 100644 index 0000000..7284195 --- /dev/null +++ b/frontend/src/content/modulo4/ejercicios.ts @@ -0,0 +1,249 @@ +export interface Seccion { + titulo: string; + contenido: string; +} + +export interface Ejercicio { + id: string; + titulo: string; + tipo: 'calculadora' | 'simulador' | 'visualizacion' | 'tabla'; + descripcion: string; + datos: Record; + solucion?: Record; +} + +export interface ModuloContenido { + titulo: string; + contenido: Seccion[]; + ejercicios: Ejercicio[]; +} + +export const ejercicios: ModuloContenido = { + titulo: 'Ejercicios Prácticos - Teoría del Productor', + contenido: [ + { + titulo: 'Guía de Ejercicios', + contenido: `Esta sección contiene ejercicios prácticos para aplicar los conceptos de: +- Funciones de producción +- Cálculo de costos +- Decisión óptima de producción +- Análisis de excedentes + +Cada ejercicio incluye: +- Datos del problema +- Paso a paso para resolver +- Tablas interactivas +- Visualizaciones gráficas +- Respuestas y explicaciones` + } + ], + ejercicios: [ + { + id: 'ejercicio-1-costos', + titulo: 'Ejercicio 1: Calculadora de Costos', + tipo: 'tabla', + descripcion: 'Completa la tabla de costos a partir de los costos fijos y variables. Identifica el costo total medio mínimo y el costo marginal.', + datos: { + instrucciones: 'Completa la tabla calculando CT, CFMe, CVMe, CMe y CMg', + costoFijo: 200, + datosTabla: [ + { Q: 0, CV: 0 }, + { Q: 1, CV: 50 }, + { Q: 2, CV: 90 }, + { Q: 3, CV: 120 }, + { Q: 4, CV: 160 }, + { Q: 5, CV: 220 }, + { Q: 6, CV: 300 }, + { Q: 7, CV: 400 }, + { Q: 8, CV: 520 } + ], + columnasSolucion: ['Q', 'CF', 'CV', 'CT', 'CFMe', 'CVMe', 'CMe', 'CMg'] + }, + solucion: { + tablaCompleta: [ + { Q: 0, CF: 200, CV: 0, CT: 200, CFMe: '-', CVMe: '-', CMe: '-', CMg: '-' }, + { Q: 1, CF: 200, CV: 50, CT: 250, CFMe: 200.0, CVMe: 50.0, CMe: 250.0, CMg: 50 }, + { Q: 2, CF: 200, CV: 90, CT: 290, CFMe: 100.0, CVMe: 45.0, CMe: 145.0, CMg: 40 }, + { Q: 3, CF: 200, CV: 120, CT: 320, CFMe: 66.7, CVMe: 40.0, CMe: 106.7, CMg: 30 }, + { Q: 4, CF: 200, CV: 160, CT: 360, CFMe: 50.0, CVMe: 40.0, CMe: 90.0, CMg: 40 }, + { Q: 5, CF: 200, CV: 220, CT: 420, CFMe: 40.0, CVMe: 44.0, CMe: 84.0, CMg: 60 }, + { Q: 6, CF: 200, CV: 300, CT: 500, CFMe: 33.3, CVMe: 50.0, CMe: 83.3, CMg: 80 }, + { Q: 7, CF: 200, CV: 400, CT: 600, CFMe: 28.6, CVMe: 57.1, CMe: 85.7, CMg: 100 }, + { Q: 8, CF: 200, CV: 520, CT: 720, CFMe: 25.0, CVMe: 65.0, CMe: 90.0, CMg: 120 } + ], + respuestasClave: { + cmeMinimo: { Q: 6, valor: 83.3 }, + cmgEnQ4: 40, + cmgEnQ6: 80, + observacion: 'CMe es mínimo cuando CMg pasa de ser menor a mayor que CMe' + }, + pasos: [ + 'Paso 1: CT = CF + CV (CF siempre es 200)', + 'Paso 2: CFMe = CF/Q', + 'Paso 3: CVMe = CV/Q', + 'Paso 4: CMe = CT/Q (o CFMe + CVMe)', + 'Paso 5: CMg = ΔCT/ΔQ = CT(Q) - CT(Q-1)' + ] + } + }, + { + id: 'ejercicio-2-produccion-optima', + titulo: 'Ejercicio 2: Simulador de Decisión de Producción', + tipo: 'simulador', + descripcion: 'Determina la cantidad óptima de producción dado un precio de mercado y decide si la empresa debe producir, cerrar temporalmente o salir del mercado.', + datos: { + escenario: { + nombre: 'Panadería El Trigo de Oro', + precioMercado: 70, + costoFijo: 200, + funcionCostos: [ + { Q: 0, CT: 200 }, + { Q: 1, CT: 250 }, + { Q: 2, CT: 290 }, + { Q: 3, CT: 320 }, + { Q: 4, CT: 360 }, + { Q: 5, CT: 420 }, + { Q: 6, CT: 500 }, + { Q: 7, CT: 600 }, + { Q: 8, CT: 720 } + ] + }, + preguntas: [ + '¿Cuál es la cantidad óptima de producción (Q*)?', + '¿Cuál es el beneficio máximo?', + '¿Debe producir la empresa o cerrar temporalmente?', + '¿Qué sucedería si el precio baja a $40?' + ], + opcionesPrecio: [40, 50, 60, 70, 80, 90] + }, + solucion: { + qOptima: 6, + beneficioMaximo: -80, + decision: 'Producir con pérdidas (menor que CF)', + razonamiento: 'P ($70) > CVMe en Q=6 ($50), por lo que cubre costos variables. La pérdida de $80 es menor que CF ($200).', + analisisPorPrecio: { + '40': { qOptima: 3, beneficio: -200, decision: 'Indiferente (P = CVMe mínimo)', detalle: 'Pérdida = CF. Puede producir o cerrar.' }, + '50': { qOptima: 4, beneficio: -160, decision: 'Producir con pérdidas', detalle: 'P > CVMe, pérdida ($160) < CF ($200)' }, + '60': { qOptima: 5, beneficio: -120, decision: 'Producir con pérdidas', detalle: 'P > CVMe, pérdida ($120) < CF ($200)' }, + '70': { qOptima: 6, beneficio: -80, decision: 'Producir con pérdidas', detalle: 'P > CVMe, pérdida ($80) < CF ($200)' }, + '80': { qOptima: 6, beneficio: -20, decision: 'Producir con pérdidas', detalle: 'P > CVMe, pérdida ($20) < CF ($200)' }, + '90': { qOptima: 7, beneficio: 30, decision: 'Producir con beneficios', detalle: 'P > CMe, beneficio económico positivo' } + }, + reglaDecision: { + paso1: 'Encontrar Q donde P = CMg (o aproximadamente igual)', + paso2: 'Calcular CVMe en esa Q', + paso3: 'Si P >= CVMe: Producir. Si P < CVMe: Cerrar', + paso4: 'Calcular beneficio: π = IT - CT = (P × Q) - CT' + } + } + }, + { + id: 'ejercicio-3-excedentes', + titulo: 'Ejercicio 3: Visualización de Excedentes', + tipo: 'visualizacion', + descripcion: 'Calcula y visualiza el excedente del productor bajo diferentes escenarios de precio. Comprende la relación entre excedente, costos variables y beneficios.', + datos: { + escenario: { + curvaCMg: [ + { Q: 0, CMg: 0 }, + { Q: 1, CMg: 10 }, + { Q: 2, CMg: 15 }, + { Q: 3, CMg: 20 }, + { Q: 4, CMg: 25 }, + { Q: 5, CMg: 35 }, + { Q: 6, CMg: 50 }, + { Q: 7, CMg: 70 }, + { Q: 8, CMg: 95 } + ], + costoFijo: 100, + precioEjemplo: 50 + }, + tareas: [ + 'Calcular el excedente del productor a P = $50', + 'Calcular el costo variable total', + 'Calcular el beneficio económico', + 'Visualizar las áreas correspondientes en el gráfico' + ], + escenariosAdicionales: [ + { precio: 25, descripcion: 'Punto de cierre' }, + { precio: 50, descripcion: 'Producción con pérdidas' }, + { precio: 70, descripcion: 'Beneficio positivo' } + ] + }, + solucion: { + escenarioPrincipal: { + precio: 50, + qOptima: 6, + calculoExcedente: [ + { unidad: 1, precio: 50, cmg: 10, excedente: 40 }, + { unidad: 2, precio: 50, cmg: 15, excedente: 35 }, + { unidad: 3, precio: 50, cmg: 20, excedente: 30 }, + { unidad: 4, precio: 50, cmg: 25, excedente: 25 }, + { unidad: 5, precio: 50, cmg: 35, excedente: 15 }, + { unidad: 6, precio: 50, cmg: 50, excedente: 0 } + ], + excedenteTotal: 145, + ingresoTotal: 300, + costoVariable: 155, + costoTotal: 255, + beneficio: 45 + }, + formulaVerificacion: { + metodo1: 'EP = IT - CV = 300 - 155 = 145', + metodo2: 'EP = Suma de excedentes = 40+35+30+25+15+0 = 145', + metodo3: 'π = EP - CF = 145 - 100 = 45 (Beneficio)' + }, + interpretacionAreas: { + areaTotal: 'Rectángulo P × Q = 50 × 6 = 300 (IT)', + areaCV: 'Área bajo CMg = 155 (CV)', + areaEP: 'Área entre P y CMg = 145 (EP)', + areaBeneficio: 'EP - CF = 145 - 100 = 45 (π)' + }, + comparacionEscenarios: { + '25': { + qOptima: 4, + excedente: 25, + beneficio: -75, + observacion: 'P = CVMe mínimo. EP mínimo positivo, pero π negativo. Indiferente entre producir o cerrar.' + }, + '50': { + qOptima: 6, + excedente: 145, + beneficio: 45, + observacion: 'P > CVMe. EP cubre CF parcialmente, quedando beneficio positivo.' + }, + '70': { + qOptima: 7, + excedente: 265, + beneficio: 165, + observacion: 'P >> CMe. EP cubre completamente CF y genera beneficio económico significativo.' + } + }, + graficoConceptual: ` +**Gráfico Conceptual del Excedente del Productor** + +El excedente del productor se representa como el área triangular entre el precio de mercado y la curva de costo marginal. + +| Elemento | Descripción | +|----------|-------------| +| Eje vertical | Precio ($) | +| Eje horizontal | Cantidad (Q) | +| Línea P = 50 | Precio de mercado horizontal | +| Curva CMg | Costo marginal creciente | +| Área EP | Excedente del productor (entre P y CMg) | +| Punto óptimo (Q=6) | Donde P = CMg | + +**Descripción del gráfico:** +- A precio P = $50, la empresa produce Q = 6 unidades +- La curva CMg representa el costo de cada unidad adicional +- El área sombreada entre P = $50 y la curva CMg representa el excedente del productor +- Este excedente es la ganancia total sobre el costo variable de producción + +Área sombreada = Excedente del Productor +Área bajo CMg = Costo Variable` + } + } + ] +}; + +export default ejercicios; diff --git a/frontend/src/content/modulo4/mercado.ts b/frontend/src/content/modulo4/mercado.ts new file mode 100644 index 0000000..9f764d6 --- /dev/null +++ b/frontend/src/content/modulo4/mercado.ts @@ -0,0 +1,301 @@ +export interface Seccion { + titulo: string; + contenido: string; +} + +export interface Ejercicio { + id: string; + tipo: 'slider' | 'quiz' | 'juego' | 'tabla' | 'calculadora'; + titulo: string; + descripcion: string; + config: Record; +} + +export interface ModuloContenido { + titulo: string; + contenido: Seccion[]; + ejercicios: Ejercicio[]; +} + +export const mercado: ModuloContenido = { + titulo: 'Competencia Perfecta', + contenido: [ + { + titulo: 'Características de Competencia Perfecta', + contenido: `La **competencia perfecta** es una estructura de mercado teórica con cinco características fundamentales: + +**1. Muchos compradores y vendedores** +- Ningún agente individual puede influir en el precio +- El mercado determina el precio (precio-aceptante) + +**2. Producto homogéneo** +- Los bienes son perfectamente sustituibles +- No hay diferenciación de marca o calidad +- Ejemplo: trigo, acciones, divisas + +**3. Información perfecta** +- Todos conocen precios, costos y tecnologías +- No hay ventajas informativas +- Transparencia total + +**4. Libre entrada y salida** +- Sin barreras legales o económicas +- Empresas entran si hay beneficios +- Empresas salen si hay pérdidas + +**5. Movilidad perfecta de factores** +- Los recursos pueden reasignarse sin fricción +- Trabajo y capital fluyen hacia los mejores usos + +**Implicaciones:** +- La demanda percibida por cada empresa es perfectamente elástica (horizontal) +- Precio = Ingreso Medio = Ingreso Marginal +- $$P = IM = IMg$$ + +**Ejemplo real aproximado:** +Mercados agrícolas, mercados de valores, mercado de cambio de divisas.` + }, + { + titulo: 'Maximización de Beneficios', + contenido: `El objetivo de la empresa es maximizar el **beneficio económico (π)**: + +$$\\pi = IT - CT$$ + +Donde: +- **IT** = Ingreso Total = $P \\times Q$ +- **CT** = Costo Total (CF + CV) + +**Condición de primer orden:** +Para maximizar, la empresa produce donde: +$$\\frac{d\\pi}{dQ} = 0 \\Rightarrow IMg = CMg$$ + +**En competencia perfecta:** +- $IMg = P$ (precio constante) +- Por lo tanto: **$P = CMg$** + +**Interpretación:** +La empresa produce hasta donde el ingreso de la última unidad (precio) iguala su costo (CMg). + +**Ejemplo numérico:** +Precio de mercado: $P = $50 + +| Q | CT | CMg | IT | π | +|---|---|----|-----|----|---| +| 0 | 100 | - | 0 | -100 | +| 1 | 140 | 40 | 50 | -90 | +| 2 | 180 | 40 | 100 | -80 | +| 3 | 220 | 40 | 150 | -70 | +| 4 | 270 | 50 | 200 | -70 | +| 5 | 330 | 60 | 250 | -80 | +| 6 | 400 | 70 | 300 | -100 | + +La cantidad óptima es **Q = 4** (o Q = 3, ambas dan π = -70, máximo menos negativo). + +**Nota importante:** Maximizar beneficios no siempre significa beneficios positivos. Puede significar "minimizar pérdidas".` + }, + { + titulo: 'Regla IMg = CMg', + contenido: `La regla fundamental de producción establece que la empresa maximiza beneficios cuando: + +$$IMg = CMg$$ + +**Justificación matemática:** +Si $IMg > CMg$: +- Producir una unidad más genera más ingreso que costo +- Convendría aumentar Q + +Si $IMg < CMg$: +- La última unidad cuesta más de lo que genera +- Convendría disminuir Q + +**En competencia perfecta:** +$$P = CMg$$ + +**Condición de segundo orden:** +Para asegurar que es un máximo (no un mínimo): +$$\\frac{d^2\\pi}{dQ^2} < 0 \\Rightarrow \\text{pendiente CMg} > \\text{pendiente IMg}$$ + +**Ejemplo gráfico conceptual:** + +El gráfico muestra la maximización de beneficios en competencia perfecta: + +| Elemento | Descripción | +|----------|-------------| +| **Eje vertical** | Precio ($) y Costos | +| **Eje horizontal** | Cantidad (Q) | +| **Curva CMg** | Forma de U invertida (primero decrece, luego crece) | +| **Curva CMe** | Forma de U invertida, por encima de CMg en su mínimo | +| **Línea P = IMg** | Línea horizontal a $50 (perfectamente elástica) | +| **Punto óptimo (Q*)** | Intersección de CMg con P = IMg | + +La empresa produce en el punto donde la curva CMg ascendente corta al precio.` + }, + { + titulo: 'Punto de Cierre a Corto Plazo', + contenido: `A corto plazo, la empresa debe decidir si produce o cierra temporalmente: + +**Decisión de cierre:** +La empresa cierra si: +$$P < CVMe_{min}$$ + +O equivalentemente: +$$IT < CV$$ + +**Razón:** +- Si produce: Pierde CF + pérdida variable +- Si cierra: Pierde solo CF +- Mejor cerrar si no cubre al menos los costos variables + +**Punto de cierre:** +$$P = CVMe_{min}$$ + +A este precio, la empresa es indiferente entre producir o cerrar. Pérdida = CF en ambos casos. + +**Ejemplo:** +Si $CVMe_{min} = $30 y $CF = $100$: + +| Precio | Decisión | Pérdida si produce | Pérdida si cierra | +|--------|----------|-------------------|-------------------| +| $50 | Producir | Menor que $100 | $100 | +| $30 | Indiferente | $100 | $100 | +| $20 | Cerrar | Mayor que $100 | $100 | + +**Importante:** +Cerrar ≠ Salir del mercado. A corto plazo, la empresa mantiene sus activos (CF) pero no opera. La salida es decisión a largo plazo.` + }, + { + titulo: 'Punto de Equilibrio a Largo Plazo', + contenido: `A largo plazo, todas las empresas pueden entrar o salir del mercado: + +**Condición de equilibrio:** +En el largo plazo, las empresas entran si hay beneficios económicos positivos y salen si hay pérdidas. + +**Equilibrio de largo plazo:** +$$P = CMe_{min}$$ + +En este punto: +- $P = CMg = CMe_{min}$ +- Beneficio económico = 0 (beneficio contable normal) +- No hay incentivos para entrar ni salir + +**Proceso de ajuste:** + +1. **Si P > CMe** (beneficios): + - Entran nuevas empresas + - Aumenta oferta del mercado + - Baja el precio + - Hasta P = CMe + +2. **Si P < CMe** (pérdidas): + - Salen empresas + - Disminuye oferta del mercado + - Sube el precio + - Hasta P = CMe + +**Ejemplo:** + +El gráfico del equilibrio de largo plazo muestra: + +| Elemento | Descripción | +|----------|-------------| +| **Eje vertical** | Costos | +| **Eje horizontal** | Cantidad (Q) | +| **Curva CMe** | Forma de U invertida | +| **Curva CMg** | U invertida que corta a CMe en su punto mínimo | +| **Precio de equilibrio** | Línea horizontal a $40 que pasa por el mínimo de CMe | +| **Cantidad de equilibrio** | Punto donde P = CMg = CMe (mínimo de CMe) | + +**Proceso de ajuste hacia el equilibrio:** +1. Si P > CMe: Entran empresas, aumenta la oferta, baja el precio +2. Si P < CMe: Salen empresas, disminuye la oferta, sube el precio +3. Equilibrio: P = CMe_minimo, beneficio económico = 0 + +**Nota:** Beneficio económico cero no significa que la empresa no gana nada. Significa que gana exactamente su costo de oportunidad (lo que podría ganar en su mejor alternativa).` + }, + { + titulo: 'Excedente del Productor', + contenido: `El **excedente del productor** es la diferencia entre lo que un productor recibe y el costo mínimo al que estaría dispuesto a vender. + +**Definición:** +$$EP = IT - CV = P \\times Q - CV$$ + +O equivalentemente: +$$EP = \\sum (P - CMg) \\text{ para todas las unidades producidas}$$ + +**Interpretación:** +Representa el beneficio sobre los costos variables, o el "alquiler económico" que obtiene el productor. + +**Relación con beneficios:** +$$\\pi = EP - CF$$ + +**Gráfico conceptual:** + +El excedente del productor se representa gráficamente como: + +| Elemento | Descripción | +|----------|-------------| +| **Eje vertical** | Precio | +| **Eje horizontal** | Cantidad (Q) | +| **Curva CMg** | Curva ascendente (costo marginal creciente) | +| **Precio de mercado (P*)** | Línea horizontal | +| **Excedente del productor (EP)** | Área entre P* y la curva CMg, desde 0 hasta Q* | +| **Cantidad óptima (Q*)** | Punto donde P* = CMg | + +**Cálculo del excedente:** +El excedente es el área entre el precio de mercado y la curva de costo marginal, desde cero hasta la cantidad producida. Representa la ganancia sobre el costo variable mínimo necesario para producir cada unidad. + +**Ejemplo numérico:** +P = $50, Q = 10 unidades + +| Unidad | CMg | Excedente unitario | +|--------|-----|-------------------| +| 1 | $10 | $40 | +| 2 | $15 | $35 | +| 3 | $20 | $30 | +| 4 | $25 | $25 | +| 5 | $30 | $20 | +| 6 | $35 | $15 | +| 7 | $40 | $10 | +| 8 | $45 | $5 | +| 9 | $50 | $0 | +| 10 | $55 | -$5 (no produce) | + +EP total = $180 (suma de excedentes de unidades 1-9)` + } + ], + ejercicios: [ + { + id: 'competencia-decision', + tipo: 'calculadora', + titulo: 'Simulador de Decisión de Producción', + descripcion: 'Dado un precio de mercado y curva de costos, encuentra la cantidad óptima y determina si debes producir o cerrar', + config: { + inputs: ['precioMercado', 'CF', 'funcionCosto'], + outputs: ['QOptima', 'IT', 'CT', 'Beneficio', 'Decision'], + criterios: [ + 'Si P >= CMe: Beneficios positivos', + 'Si CVMe < P < CMe: Producir con pérdidas (menor que CF)', + 'Si P < CVMe: Cerrar temporalmente' + ], + mostrarGrafico: true, + destacarZona: true + } + }, + { + id: 'excedente-visualizacion', + tipo: 'juego', + titulo: 'Visualización de Excedentes', + descripcion: 'Interactúa con el gráfico para ver cómo cambia el excedente del productor al variar el precio y la cantidad', + config: { + tipoGrafico: 'area', + mostrarAreas: ['excedenteProductor', 'costoVariable', 'beneficio'], + interactivo: true, + sliders: ['precio', 'cantidad'], + calcularAutomatico: true, + mostrarTabla: true + } + } + ] +}; + +export default mercado; diff --git a/frontend/src/content/modulo4/produccion.ts b/frontend/src/content/modulo4/produccion.ts new file mode 100644 index 0000000..a6617f8 --- /dev/null +++ b/frontend/src/content/modulo4/produccion.ts @@ -0,0 +1,157 @@ +export interface Seccion { + titulo: string; + contenido: string; +} + +export interface Ejercicio { + id: string; + tipo: 'slider' | 'quiz' | 'juego' | 'tabla' | 'calculadora'; + titulo: string; + descripcion: string; + config: Record; +} + +export interface ModuloContenido { + titulo: string; + contenido: Seccion[]; + ejercicios: Ejercicio[]; +} + +export const produccion: ModuloContenido = { + titulo: 'Producción', + contenido: [ + { + titulo: 'Función de Producción', + contenido: `La **función de producción** describe la relación técnica entre los factores de producción utilizados y la cantidad máxima de producto obtenida. + +**Fórmula general:** +$$Q = f(K, L)$$ + +Donde: +- **Q** = Cantidad producida (output) +- **K** = Capital (maquinaria, equipos, instalaciones) +- **L** = Trabajo (horas-hombre, número de trabajadores) +- **f** = Función de producción (tecnología) + +**Ejemplo:** Una fábrica de pan utiliza hornos (K) y panaderos (L) para producir pan (Q). + +**Formas comunes:** +- **Lineal**: $Q = aK + bL$ (sustitutos perfectos) +- **Cobb-Douglas**: $Q = A \cdot K^\alpha \cdot L^\beta$ (sustituibles) +- **Leontief**: $Q = \min(aK, bL)$ (complementarios perfectos)` + }, + { + titulo: 'Producto Total, Marginal y Medio', + contenido: `El análisis de producción distingue tres conceptos fundamentales: + +**Producto Total (PT)** +Cantidad total producida con una cantidad dada de factores. +$$PT = f(L)$$ (manteniendo K constante) + +**Producto Marginal (PMg)** +Incremento en el producto total al aumentar en una unidad el factor variable. +$$PMg_L = \frac{\Delta PT}{\Delta L}$$ + +**Producto Medio (PMe)** +Producto por unidad de factor. +$$PMe_L = \frac{PT}{L}$$ + +**Ejemplo numérico:** +| L (trabajadores) | PT (panes) | PMg | PMe | +|------------------|------------|-----|-----| +| 0 | 0 | - | - | +| 1 | 10 | 10 | 10.0 | +| 2 | 24 | 14 | 12.0 | +| 3 | 36 | 12 | 12.0 | +| 4 | 44 | 8 | 11.0 | +| 5 | 48 | 4 | 9.6 | +| 6 | 48 | 0 | 8.0 | +| 7 | 42 | -6 | 6.0 | + +Observa que el PMg máximo (14) ocurre antes que el PMe máximo (12.0), y ambos antes del PT máximo (48).` + }, + { + titulo: 'Ley de Rendimientos Decrecientes', + contenido: `La **ley de rendimientos decrecientes** (o ley de productividad marginal decreciente) establece que: + +> *"Al mantener constantes todos los demás factores, si se va aumentando la cantidad de un factor variable, llega un punto a partir del cual los incrementos de producto son cada vez menores."* + +**Condiciones:** +- Tecnología constante +- Al menos un factor fijo +- Factores variables homogéneos + +**Interpretación:** +Inicialmente, al añadir trabajadores a una fábrica fija, el PMg aumenta (especialización). Pero una vez alcanzado el óptimo, cada trabajador adicional tiene menos capital y espacio, reduciendo su contribución marginal. + +**Ejemplo gráfico conceptual:** +El gráfico muestra la relación entre PMg y PMe: +- PMg alcanza su máximo primero +- Luego PMe alcanza su máximo (cuando PMg = PMe) +- Finalmente PT alcanza su máximo (cuando PMg = 0) +- Después PMg se vuelve negativo (Etapa III) + +**Importancia económica:** +Esta ley explica por qué las empresas no crecen indefinidamente y por qué existen costos crecientes a largo plazo.` + }, + { + titulo: 'Etapas de Producción', + contenido: `El análisis del producto marginal y medio permite dividir la producción en tres etapas: + +**Etapa I: Crecientes** +- PMg > PMe (ambos creciendo inicialmente) +- PMe está aumentando +- La empresa no opera aquí: está desperdiciando capacidad fija +- Fin: Cuando PMg = PMe (PMe máximo) + +**Etapa II: Decrecientes** +- 0 < PMg < PMe (ambos decrecientes) +- PMe decreciente pero positivo +- PMg positivo pero decreciente +- **Zona racional de producción** +- Fin: Cuando PMg = 0 (PT máximo) + +**Etapa III: Negativos** +- PMg < 0 +- PT decreciente +- La empresa nunca opera aquí: tiene "demasiado" factor variable +- Agregar más trabajo reduce la producción total + +**Resumen de etapas:** + +| Etapa | Características | Decisión | +|-------|----------------|----------| +| **I** | PMg > PMe, PMe creciente | No operar - desperdicio de capacidad | +| **II** | 0 < PMg < PMe, ambos decrecientes | **Operar aquí** - zona racional | +| **III** | PMg < 0, PT decreciente | No operar - demasiado factor variable | + +**Decisión del productor:** +La empresa racional operará en la **Etapa II**, donde PMg es positivo pero decreciente. La ubicación exacta depende de los precios de los factores y del producto.` + } + ], + ejercicios: [ + { + id: 'produccion-tabla', + tipo: 'tabla', + titulo: 'Análisis de Productividad', + descripcion: 'Completa la tabla de producción calculando PMg y PMe, identificando las tres etapas', + config: { + columnas: ['L', 'PT', 'PMg', 'PMe', 'Etapa'], + datosIniciales: [ + { L: 0, PT: 0, PMg: null, PMe: null, Etapa: '-' }, + { L: 1, PT: 8, PMg: null, PMe: null, Etapa: '?' }, + { L: 2, PT: 20, PMg: null, PMe: null, Etapa: '?' }, + { L: 3, PT: 36, PMg: null, PMe: null, Etapa: '?' }, + { L: 4, PT: 48, PMg: null, PMe: null, Etapa: '?' }, + { L: 5, PT: 55, PMg: null, PMe: null, Etapa: '?' }, + { L: 6, PT: 60, PMg: null, PMe: null, Etapa: '?' }, + { L: 7, PT: 56, PMg: null, PMe: null, Etapa: '?' } + ], + mostrarGrafico: true, + identificarEtapas: true + } + } + ] +}; + +export default produccion; diff --git a/frontend/src/hooks/useEjercicioProgreso.ts b/frontend/src/hooks/useEjercicioProgreso.ts new file mode 100644 index 0000000..bce4a78 --- /dev/null +++ b/frontend/src/hooks/useEjercicioProgreso.ts @@ -0,0 +1,85 @@ +import { useProgressStore } from '../stores/progressStore'; +import { useState, useCallback, useEffect } from 'react'; + +interface UseEjercicioProgresoOptions { + moduloId: string; + ejercicioId: string; + onComplete?: (puntuacion?: number) => void; +} + +interface UseEjercicioProgresoReturn { + guardarProgreso: (puntuacion: number) => Promise; + progresoGuardado: boolean; + puntuacionAnterior: number | undefined; + intentos: number; + isLoading: boolean; + error: string | null; +} + +export function useEjercicioProgreso({ + moduloId, + ejercicioId, + onComplete, +}: UseEjercicioProgresoOptions): UseEjercicioProgresoReturn { + const { saveProgreso, getProgresoEjercicio, modulos } = useProgressStore(); + const [progresoGuardado, setProgresoGuardado] = useState(false); + const [isLoading, setIsLoading] = useState(false); + const [error, setError] = useState(null); + const [puntuacionAnterior, setPuntuacionAnterior] = useState(undefined); + const [intentos, setIntentos] = useState(0); + + // Cargar progreso existente de manera reactiva + useEffect(() => { + const progreso = getProgresoEjercicio(moduloId, ejercicioId); + if (progreso) { + setPuntuacionAnterior(progreso.puntuacion); + setIntentos(progreso.intentos); + } else { + setPuntuacionAnterior(undefined); + setIntentos(0); + } + }, [moduloId, ejercicioId, getProgresoEjercicio, modulos]); + + const guardarProgreso = useCallback(async (puntuacion: number) => { + setIsLoading(true); + setError(null); + + try { + // Guardar en el store (que ahora usa la API) + await saveProgreso(moduloId, ejercicioId, puntuacion); + + setProgresoGuardado(true); + + // Actualizar estado local + const progresoAnterior = getProgresoEjercicio(moduloId, ejercicioId); + if (progresoAnterior) { + setPuntuacionAnterior(progresoAnterior.puntuacion); + setIntentos(progresoAnterior.intentos); + } else { + setPuntuacionAnterior(puntuacion); + setIntentos(1); + } + + // Llamar callback si existe + if (onComplete) { + onComplete(puntuacion); + } + } catch (err) { + setError(err instanceof Error ? err.message : 'Error al guardar el progreso'); + console.error('Error saving progress:', err); + } finally { + setIsLoading(false); + } + }, [moduloId, ejercicioId, saveProgreso, onComplete, getProgresoEjercicio]); + + return { + guardarProgreso, + progresoGuardado, + puntuacionAnterior, + intentos, + isLoading, + error, + }; +} + +export default useEjercicioProgreso; diff --git a/frontend/src/pages/Dashboard.tsx b/frontend/src/pages/Dashboard.tsx index 53777a1..e5621c8 100644 --- a/frontend/src/pages/Dashboard.tsx +++ b/frontend/src/pages/Dashboard.tsx @@ -1,82 +1,109 @@ -import { useState, useEffect } from 'react'; +import { useEffect } from 'react'; import { Link } from 'react-router-dom'; import { useAuthStore } from '../stores/authStore'; +import { useProgressStore } from '../stores/progressStore'; import { Card } from '../components/ui/Card'; import { Button } from '../components/ui/Button'; -import { progresoService } from '../services/api'; -import type { ModuloProgreso } from '../types'; -import { BookOpen, TrendingUp, User, LogOut, LayoutGrid } from 'lucide-react'; +import { ProgressBar } from '../components/progress/ProgressBar'; +import { ScoreDisplay } from '../components/progress/ScoreDisplay'; +import { BadgesSection } from '../components/progress/Badges'; +import { Loader } from '../components/ui/Loader'; +import { BookOpen, User, LogOut, LayoutGrid, Award, Star, Target, CheckCircle, FileText } from 'lucide-react'; -const MODULOS_DEFAULT = [ - { numero: 1, titulo: 'Fundamentos de Economía', descripcion: 'Introducción a los conceptos básicos' }, - { numero: 2, titulo: 'Oferta, Demanda y Equilibrio', descripcion: 'Curvas de mercado' }, - { numero: 3, titulo: 'Utilidad y Elasticidad', descripcion: 'Teoría del consumidor' }, - { numero: 4, titulo: 'Teoría del Productor', descripcion: 'Costos y producción' }, +const MODULOS_CONFIG = [ + { id: 'modulo1', numero: 1, titulo: 'Fundamentos de Economía', descripcion: 'Introducción a los conceptos básicos', totalEjercicios: 3 }, + { id: 'modulo2', numero: 2, titulo: 'Oferta, Demanda y Equilibrio', descripcion: 'Curvas de mercado', totalEjercicios: 3 }, + { id: 'modulo3', numero: 3, titulo: 'Utilidad y Elasticidad', descripcion: 'Teoría del consumidor', totalEjercicios: 3 }, + { id: 'modulo4', numero: 4, titulo: 'Teoría del Productor', descripcion: 'Costos y producción', totalEjercicios: 3 }, ]; export function Dashboard() { const { usuario, logout } = useAuthStore(); - const [modulosProgreso, setModulosProgreso] = useState([]); + const { + puntuacionTotal, + nivel, + calcularPorcentajeModulo, + getBadgesDesbloqueados, + getBadgesBloqueados, + modulos, + loadProgreso, + isLoading, + error, + } = useProgressStore(); useEffect(() => { loadProgreso(); - }, []); - - const loadProgreso = async () => { - try { - const progresos = await progresoService.getProgreso(); - const modulos = MODULOS_DEFAULT.map((mod) => { - const modProgresos = progresos.filter((p) => p.modulo_numero === mod.numero); - const completados = modProgresos.filter((p) => p.completado).length; - const total = 5; // Asumiendo 5 ejercicios por módulo - return { - numero: mod.numero, - titulo: mod.titulo, - porcentaje: Math.round((completados / total) * 100), - ejerciciosCompletados: completados, - totalEjercicios: total, - }; - }); - setModulosProgreso(modulos); - } catch { - // Si hay error, mostrar progreso vacío - setModulosProgreso( - MODULOS_DEFAULT.map((mod) => ({ - numero: mod.numero, - titulo: mod.titulo, - porcentaje: 0, - ejerciciosCompletados: 0, - totalEjercicios: 5, - })) - ); - } - }; + }, [loadProgreso]); const handleLogout = async () => { await logout(); }; + if (isLoading && Object.keys(modulos).length === 0) { + return ( +
+
+ +

Cargando tu progreso...

+
+
+ ); + } + + if (error) { + return ( +
+
+
+ + + +
+

Error al cargar el progreso

+

{error}

+ +
+
+ ); + } + + // Calcular progreso total const totalProgreso = Math.round( - modulosProgreso.reduce((acc, mod) => acc + mod.porcentaje, 0) / modulosProgreso.length + MODULOS_CONFIG.reduce((acc, mod) => { + return acc + calcularPorcentajeModulo(mod.id, mod.totalEjercicios); + }, 0) / MODULOS_CONFIG.length ); + const badgesDesbloqueados = getBadgesDesbloqueados(); + const badgesBloqueados = getBadgesBloqueados(); + + // Calcular ejercicios completados por módulo + const getEjerciciosCompletados = (moduloId: string) => { + const modulo = modulos[moduloId]; + if (!modulo) return 0; + return Object.values(modulo.ejercicios).filter(ej => ej.completado).length; + }; + return (
-
+
-
+
-

Economía

+

Economía Interactiva

- {usuario?.nombre} + {usuario?.nombre || 'Usuario'} + + {nivel} + {usuario?.rol === 'admin' && ( - + Admin )} @@ -91,86 +118,154 @@ export function Dashboard() {

Tu progreso

-

Continúa donde lo dejaste

+

Continúa donde lo dejaste y desbloquea nuevos logros

- -
-
-

Progreso total

-

{totalProgreso}% completado

+ {/* Stats Cards */} +
+ +
+
+

Progreso total

+

{totalProgreso}%

+
+ +
+
+
+
+

+ {totalProgreso === 100 ? '¡Has completado todos los módulos!' : 'Sigue así, vas por buen camino'} +

+ + + +
+
+

Puntuación total

+

{puntuacionTotal.toLocaleString()}

+
+ +
+

+ Acumula puntos completando ejercicios para subir de nivel +

+
+ + +
+
+

Logros

+

+ {badgesDesbloqueados.length}/{badgesDesbloqueados.length + badgesBloqueados.length} +

+
+ +
+

+ {badgesBloqueados.length === 0 + ? '¡Todos los logros desbloqueados!' + : `${badgesBloqueados.length} logros por desbloquear`} +

+
+
+ +
+ {/* Columna izquierda - Módulos */} +
+ {/* Puntuación y Nivel */} + + +
+

Módulos

+ {usuario?.rol === 'admin' && ( + + + + )} +
+ +
+ {MODULOS_CONFIG.map((modulo) => { + const porcentaje = calcularPorcentajeModulo(modulo.id, modulo.totalEjercicios); + const completados = getEjerciciosCompletados(modulo.id); + + return ( + + +
+
+
+ {modulo.numero} +
+
+

{modulo.titulo}

+

+ {completados}/{modulo.totalEjercicios} ejercicios +

+
+
+
+ + + +
+ {porcentaje}% completado + {porcentaje === 100 && ( + + + Completado + + )} +
+
+ + ); + })} +
+ +
+ + + + + +
-
{totalProgreso}%
-
-
+
- - -
-

Módulos

- {usuario?.rol === 'admin' && ( - - - - )} -
- -
- {modulosProgreso.map((modulo) => ( - - -
-
-
- {modulo.numero} -
-
-

{modulo.titulo}

-

- {modulo.ejerciciosCompletados}/{modulo.totalEjercicios} ejercicios -

-
-
-
- -
-
-
- -
- {modulo.porcentaje}% completado - {modulo.porcentaje === 100 && ( - - - Completado - - )} -
- - - ))} -
- -
- - -
); } + +export default Dashboard; diff --git a/frontend/src/pages/Modulo.tsx b/frontend/src/pages/Modulo.tsx index 0e43e98..ccb8a9e 100644 --- a/frontend/src/pages/Modulo.tsx +++ b/frontend/src/pages/Modulo.tsx @@ -1,63 +1,213 @@ import { useState, useEffect } from 'react'; import { useParams, Link } from 'react-router-dom'; +import { motion } from 'framer-motion'; import { Card } from '../components/ui/Card'; import { Button } from '../components/ui/Button'; -import { progresoService } from '../services/api'; -import type { Progreso } from '../types'; -import { ArrowLeft, CheckCircle, Play } from 'lucide-react'; +import { Loader } from '../components/ui/Loader'; +import { useProgressStore } from '../stores/progressStore'; +import { ScoreDisplay } from '../components/progress/ScoreDisplay'; +import { + ArrowLeft, + CheckCircle, + Play, + Lock, + Trophy, + TrendingUp, + RotateCcw +} from 'lucide-react'; +import type { EjercicioProgreso } from '../stores/progressStore'; -const MODULOS_INFO: Record = { - 1: { titulo: 'Fundamentos de Economía', descripcion: 'Introducción a los conceptos básicos de economía' }, - 2: { titulo: 'Oferta, Demanda y Equilibrio', descripcion: 'Curvas de oferta y demanda en el mercado' }, - 3: { titulo: 'Utilidad y Elasticidad', descripcion: 'Teoría del consumidor y elasticidades' }, - 4: { titulo: 'Teoría del Productor', descripcion: 'Costos de producción y competencia perfecta' }, +// Importar ejercicios reales +import { FlujoCircular } from '../components/exercises/modulo1/FlujoCircular'; +import { QuizBienes } from '../components/exercises/modulo1/QuizBienes'; +import { SimuladorDisyuntivas } from '../components/exercises/modulo1/SimuladorDisyuntivas'; +import { ConstructorCurvas } from '../components/exercises/modulo2/ConstructorCurvas'; +import { IdentificarShocks } from '../components/exercises/modulo2/IdentificarShocks'; +import { SimuladorPrecios } from '../components/exercises/modulo2/SimuladorPrecios'; +import { ClasificadorBienes } from '../components/exercises/modulo3/ClasificadorBienes'; +import { CalculadoraElasticidad } from '../components/exercises/modulo3/CalculadoraElasticidad'; +import { EjerciciosExamen } from '../components/exercises/modulo3/EjerciciosExamen'; +import { CalculadoraCostos } from '../components/exercises/modulo4/CalculadoraCostos'; +import { SimuladorProduccion } from '../components/exercises/modulo4/SimuladorProduccion'; +import { VisualizadorExcedentes } from '../components/exercises/modulo4/VisualizadorExcedentes'; + +const MODULOS_INFO: Record = { + 1: { + id: 'modulo1', + titulo: 'Fundamentos de Economía', + descripcion: 'Introducción a los conceptos básicos de economía', + color: 'from-blue-500 to-blue-600' + }, + 2: { + id: 'modulo2', + titulo: 'Oferta, Demanda y Equilibrio', + descripcion: 'Curvas de oferta y demanda en el mercado', + color: 'from-green-500 to-green-600' + }, + 3: { + id: 'modulo3', + titulo: 'Utilidad y Elasticidad', + descripcion: 'Teoría del consumidor y elasticidades', + color: 'from-purple-500 to-purple-600' + }, + 4: { + id: 'modulo4', + titulo: 'Teoría del Productor', + descripcion: 'Costos de producción y competencia perfecta', + color: 'from-orange-500 to-orange-600' + }, }; -const EJERCICIOS_MOCK = [ - { id: 'e1', titulo: 'Conceptos básicos', descripcion: 'Repasa los fundamentos de la economía' }, - { id: 'e2', titulo: 'Agentes económicos', descripcion: 'Identifica los diferentes agentes en la economía' }, - { id: 'e3', titulo: 'Factores de producción', descripcion: 'Aprende sobre tierra, trabajo y capital' }, - { id: 'e4', titulo: 'Flujo circular', descripcion: 'Comprende el flujo de bienes y dinero' }, - { id: 'e5', titulo: 'Evaluación final', descripcion: 'Pon a prueba todo lo aprendido' }, -]; +const EJERCICIOS_POR_MODULO: Record void }>; +}>> = { + 1: [ + { id: 'simulador-disyuntivas', titulo: 'Simulador de Disyuntivas', descripcion: 'Explora las decisiones económicas fundamentales', componente: SimuladorDisyuntivas }, + { id: 'quiz-bienes', titulo: 'Quiz de Bienes', descripcion: 'Identifica diferentes tipos de bienes', componente: QuizBienes }, + { id: 'flujo-circular', titulo: 'Flujo Circular', descripcion: 'Comprende el flujo de bienes y dinero en la economía', componente: FlujoCircular }, + ], + 2: [ + { id: 'constructor-curvas', titulo: 'Constructor de Curvas', descripcion: 'Construye curvas de oferta y demanda', componente: ConstructorCurvas }, + { id: 'identificar-shocks', titulo: 'Identificar Shocks', descripcion: 'Reconoce cambios en el mercado', componente: IdentificarShocks }, + { id: 'simulador-precios', titulo: 'Simulador de Precios', descripcion: 'Simula el equilibrio de precios', componente: SimuladorPrecios }, + ], + 3: [ + { id: 'clasificador-bienes', titulo: 'Clasificador de Bienes', descripcion: 'Clasifica bienes según su elasticidad', componente: ClasificadorBienes }, + { id: 'calculadora-elasticidad', titulo: 'Calculadora de Elasticidad', descripcion: 'Calcula elasticidades de demanda', componente: CalculadoraElasticidad }, + { id: 'ejercicios-examen', titulo: 'Ejercicios de Examen', descripcion: 'Pon a prueba tus conocimientos', componente: EjerciciosExamen }, + ], + 4: [ + { id: 'calculadora-costos', titulo: 'Calculadora de Costos', descripcion: 'Calcula costos de producción', componente: CalculadoraCostos }, + { id: 'simulador-produccion', titulo: 'Simulador de Producción', descripcion: 'Simula la producción óptima', componente: SimuladorProduccion }, + { id: 'visualizador-excedentes', titulo: 'Visualizador de Excedentes', descripcion: 'Visualiza excedentes del consumidor y productor', componente: VisualizadorExcedentes }, + ], +}; export function Modulo() { const { numero } = useParams<{ numero: string }>(); const num = parseInt(numero || '1', 10); - const [progresos, setProgresos] = useState([]); + + const { + puntuacionTotal, + getProgresoEjercicio, + saveProgreso, + calcularPorcentajeModulo, + loadProgreso, + isLoading, + error, + } = useProgressStore(); - const moduloInfo = MODULOS_INFO[num] || MODULOS_INFO[1]; - const ejercicios = EJERCICIOS_MOCK; + const [ejercicioActivo, setEjercicioActivo] = useState(null); useEffect(() => { loadProgreso(); - }, [num]); + }, [loadProgreso]); - const loadProgreso = async () => { + const moduloInfo = MODULOS_INFO[num] || MODULOS_INFO[1]; + const ejercicios = EJERCICIOS_POR_MODULO[num] || []; + const porcentaje = calcularPorcentajeModulo(moduloInfo.id, ejercicios.length); + + const getProgresoEjercicioLocal = (ejercicioId: string): EjercicioProgreso | undefined => { + return getProgresoEjercicio(moduloInfo.id, ejercicioId); + }; + + const handleCompleteEjercicio = async (ejercicioId: string, puntuacion: number) => { try { - const data = await progresoService.getProgreso(); - setProgresos(data); - } catch { - // Silencio + await saveProgreso(moduloInfo.id, ejercicioId, puntuacion); + setEjercicioActivo(null); + } catch (err) { + console.error('Error al guardar progreso:', err); } }; - const getProgresoForEjercicio = (ejercicioId: string) => { - return progresos.find( - (p) => p.modulo_numero === num && p.ejercicio_id === ejercicioId - ); + const completados = ejercicios.filter( + (e) => getProgresoEjercicioLocal(e.id)?.completado + ).length; + + // Determinar si un ejercicio está bloqueado (el primero siempre desbloqueado) + const isEjercicioBloqueado = (index: number): boolean => { + if (index === 0) return false; + // Ejercicio anterior completado? + const ejercicioAnterior = ejercicios[index - 1]; + return !getProgresoEjercicioLocal(ejercicioAnterior.id)?.completado; }; - const completados = ejercicios.filter( - (e) => getProgresoForEjercicio(e.id)?.completado - ).length; - const porcentaje = Math.round((completados / ejercicios.length) * 100); + if (ejercicioActivo) { + const ejercicio = ejercicios.find(e => e.id === ejercicioActivo); + if (!ejercicio) return null; + + const EjercicioComponent = ejercicio.componente; + + return ( +
+
+
+ +
+
+ +
+
+

{ejercicio.titulo}

+

{ejercicio.descripcion}

+
+ + handleCompleteEjercicio(ejercicio.id, puntuacion)} + /> +
+
+ ); + } + + if (isLoading) { + return ( +
+
+ +

Cargando ejercicios...

+
+
+ ); + } + + if (error) { + return ( +
+
+
+ + + +
+

Error al cargar el progreso

+

{error}

+ +
+
+ ); + } return (
-
+
- + Volver al Dashboard @@ -67,7 +217,7 @@ export function Modulo() {
-
+
{num}
@@ -76,76 +226,153 @@ export function Modulo() {
- -
+ +
-

Tu progreso en este módulo

+

Tu progreso en este módulo

{porcentaje}%

-

{completados}/{ejercicios.length} ejercicios

+

Ejercicios

+

{completados}/{ejercicios.length}

-
-
+
-

Ejercicios

+
+

Ejercicios

+ +
-
+
{ejercicios.map((ejercicio, index) => { - const progreso = getProgresoForEjercicio(ejercicio.id); + const progreso = getProgresoEjercicioLocal(ejercicio.id); const completado = progreso?.completado || false; + const bloqueado = isEjercicioBloqueado(index); return ( - -
-
- {completado ? ( - - ) : ( - {index + 1} - )} -
+ + !bloqueado && setEjercicioActivo(ejercicio.id)} + > +
+
+ {completado ? ( + + ) : bloqueado ? ( + + ) : ( + {index + 1} + )} +
-
-

{ejercicio.titulo}

-

{ejercicio.descripcion}

-
+
+

+ {ejercicio.titulo} +

+

{ejercicio.descripcion}

+ {completado && progreso && progreso.puntuacion > 0 && ( +
+ + Mejor puntuación: {progreso.puntuacion} pts + + + ({progreso.intentos} {progreso.intentos === 1 ? 'intento' : 'intentos'}) + +
+ )} +
- -
-
+ +
+
+ ); })}
{porcentaje === 100 && ( - -
-
- + + +
+
+ +
+
+

¡Felicitaciones!

+

+ Has completado todos los ejercicios de este módulo. + {num < 4 ? ' ¡Continúa con el siguiente módulo!' : ' ¡Has completado todos los módulos!'} +

+
+ {num < 4 && ( + + + + )}
-
-

¡Felicitaciones!

-

- Has completado todos los ejercicios de este módulo. -

-
-
- + + )} +
); } + +export default Modulo; diff --git a/frontend/src/pages/Modulos.tsx b/frontend/src/pages/Modulos.tsx index 338df74..7150d0c 100644 --- a/frontend/src/pages/Modulos.tsx +++ b/frontend/src/pages/Modulos.tsx @@ -1,7 +1,8 @@ import { Link } from 'react-router-dom'; import { Card } from '../components/ui/Card'; import { Button } from '../components/ui/Button'; -import { ArrowRight, ArrowLeft } from 'lucide-react'; +import { useProgresoStore } from '../stores/progresoStore'; +import { ArrowRight, ArrowLeft, CheckCircle, Lock, Play } from 'lucide-react'; const MODULOS = [ { @@ -9,28 +10,45 @@ const MODULOS = [ titulo: 'Fundamentos de Economía', descripcion: 'Aprende los conceptos básicos: definición de economía, agentes económicos, factores de producción y el flujo circular de la economía.', temas: ['Definición de economía', 'Agentes económicos', 'Factores de producción', 'Flujo circular'], + totalEjercicios: 5, + bloqueado: false, }, { numero: 2, titulo: 'Oferta, Demanda y Equilibrio', descripcion: 'Domina las curvas de oferta y demanda, aprende cómo se determinan los precios y entiende los controles de mercado.', temas: ['Curva de demanda', 'Curva de oferta', 'Equilibrio de mercado', 'Controles de precios'], + totalEjercicios: 5, + bloqueado: false, }, { numero: 3, titulo: 'Utilidad y Elasticidad', descripcion: 'Explora la teoría del consumidor, aprende a calcular elasticidades y clasifica diferentes tipos de bienes.', temas: ['Utilidad marginal', 'Elasticidad precio', 'Elasticidad ingreso', 'Clasificación de bienes'], + totalEjercicios: 5, + bloqueado: false, }, { numero: 4, titulo: 'Teoría del Productor', descripcion: 'Comprende los costos de producción, la toma de decisiones del productor y los fundamentos de la competencia perfecta.', temas: ['Costos de producción', 'Producción y costos', 'Competencia perfecta', 'Maximización de beneficios'], + totalEjercicios: 5, + bloqueado: false, }, ]; export function Modulos() { + const { progresoModulos } = useProgresoStore(); + + const getModuloProgress = (moduloNumero: number, totalEjercicios: number) => { + const progreso = progresoModulos.find(p => p.moduloNumero === moduloNumero); + const completados = progreso?.ejercicios.filter(e => e.completado).length || 0; + const porcentaje = Math.round((completados / totalEjercicios) * 100); + return { completados, porcentaje }; + }; + return (
@@ -52,42 +70,90 @@ export function Modulos() {
- {MODULOS.map((modulo) => ( - -
-
-
- {modulo.numero} + {MODULOS.map((modulo) => { + const { completados, porcentaje } = getModuloProgress(modulo.numero, modulo.totalEjercicios); + const estaCompletado = porcentaje === 100; + + return ( + +
+
+
+ {modulo.numero} +
+
+ +
+
+

{modulo.titulo}

+ {estaCompletado && ( + + + Completado + + )} +
+

{modulo.descripcion}

+ +
+ {modulo.temas.map((tema) => ( + + {tema} + + ))} +
+ +
+
+
+

+ {completados}/{modulo.totalEjercicios} ejercicios completados ({porcentaje}%) +

+
+ +
+ {modulo.bloqueado ? ( + + ) : ( + + + + )}
- -
-

{modulo.titulo}

-

{modulo.descripcion}

- -
- {modulo.temas.map((tema) => ( - - {tema} - - ))} -
-
- -
- - - -
-
-
- ))} + + ); + })}
diff --git a/frontend/src/pages/Recursos.tsx b/frontend/src/pages/Recursos.tsx new file mode 100644 index 0000000..b22090c --- /dev/null +++ b/frontend/src/pages/Recursos.tsx @@ -0,0 +1,134 @@ +import { Card } from '../components/ui/Card'; +import { Button } from '../components/ui/Button'; +import { FileText, Download, BookOpen, ArrowLeft } from 'lucide-react'; +import { Link } from 'react-router-dom'; + +const recursos = [ + { + id: 1, + titulo: 'Resumen Clase 1 - Fundamentos de Economía', + descripcion: 'Definición de economía, agentes económicos, factores de producción y flujo circular', + archivo: '/pdfs/resumen_clase_1.pdf', + modulo: 'Módulo 1', + icono: FileText + }, + { + id: 2, + titulo: 'Resumen Clase 2 - Oferta, Demanda y Equilibrio', + descripcion: 'Ley de la demanda, ley de la oferta, equilibrio de mercado y controles de precios', + archivo: '/pdfs/resumen_clase_2.pdf', + modulo: 'Módulo 2', + icono: FileText + }, + { + id: 3, + titulo: 'Resumen Clase 3 - Elasticidad', + descripcion: 'Tipos de elasticidad, cálculos y clasificación de bienes según elasticidad', + archivo: '/pdfs/resumen_clase_3.pdf', + modulo: 'Módulo 3', + icono: FileText + }, + { + id: 4, + titulo: 'Resumen Clase 4 - Teoría del Productor', + descripcion: 'Costos, producción, competencia perfecta y maximización de beneficios', + archivo: '/pdfs/resumen_clase_4.pdf', + modulo: 'Módulo 4', + icono: FileText + } +]; + +export function RecursosPage() { + return ( +
+
+ {/* Header */} +
+ + + Volver al Dashboard + + +

Recursos de Estudio

+

+ Material académico en PDF para consultar offline +

+
+ + {/* Info Card */} + +
+
+ +
+
+

Material de Apoyo

+

+ Estos documentos PDF contienen el contenido teórico de cada módulo. + Úsalos como referencia mientras realizas los ejercicios interactivos. +

+
+
+
+ + {/* Recursos Grid */} +
+ {recursos.map((recurso) => ( + +
+
+ +
+ +
+
+ + {recurso.modulo} + +
+ +

+ {recurso.titulo} +

+ +

+ {recurso.descripcion} +

+ + + + +
+
+
+ ))} +
+ + {/* Footer */} +
+

+ ¿Tienes dudas sobre el contenido? Revisa los ejercicios interactivos en cada módulo. +

+ + + +
+
+
+ ); +} + +export default RecursosPage; diff --git a/frontend/src/pages/modulos/Modulo1Page.tsx b/frontend/src/pages/modulos/Modulo1Page.tsx new file mode 100644 index 0000000..50be317 --- /dev/null +++ b/frontend/src/pages/modulos/Modulo1Page.tsx @@ -0,0 +1,364 @@ +// @ts-nocheck +import { useState, useEffect } from 'react'; +import { useParams, Link } from 'react-router-dom'; +import { motion, AnimatePresence } from 'framer-motion'; +import { Card } from '../../components/ui/Card'; +import { Button } from '../../components/ui/Button'; +import { progresoService } from '../../services/api'; +import type { Progreso } from '../../types'; +import { ArrowLeft, CheckCircle, Play, BookOpen, Trophy, ChevronRight } from 'lucide-react'; + +// Importar contenido del módulo 1 +import { introduccion, agentes, factores } from '../../content/modulo1'; +import { ejercicios as modulo1Ejercicios } from '../../content/modulo1/ejercicios'; + +// Importar componentes de ejercicios +import { SimuladorDisyuntivas, QuizBienes, FlujoCircular } from '../../components/exercises/modulo1'; + +const TABS = ['Contenido', 'Ejercicios'] as const; +type Tab = typeof TABS[number]; + +interface EjercicioConfig { + id: string; + titulo: string; + descripcion: string; + componente: React.ReactNode; +} + +export function Modulo1Page() { + const { numero } = useParams<{ numero: string }>(); + const [activeTab, setActiveTab] = useState('Contenido'); + const [activeSeccion, setActiveSeccion] = useState<'introduccion' | 'agentes' | 'factores'>('introduccion'); + const [activeEjercicio, setActiveEjercicio] = useState(null); + const [progresos, setProgresos] = useState([]); + const [loading, setLoading] = useState(false); + + // Cargar progreso al montar + useEffect(() => { + loadProgreso(); + }, []); + + const loadProgreso = async () => { + try { + const data = await progresoService.getProgreso(); + setProgresos(data); + } catch { + // Silenciar error + } + }; + + const getProgresoForEjercicio = (ejercicioId: string) => { + return progresos.find( + (p) => p.modulo_numero === 1 && p.ejercicio_id === ejercicioId + ); + }; + + const handleCompleteEjercicio = async (ejercicioId: string, puntuacion: number) => { + setLoading(true); + try { + await progresoService.saveProgreso(ejercicioId, puntuacion); + await loadProgreso(); + } catch { + // Silenciar error + } finally { + setLoading(false); + } + }; + + // Configuración de ejercicios con sus componentes + const ejerciciosConfig: EjercicioConfig[] = [ + { + id: 'simulador-disyuntivas', + titulo: modulo1Ejercicios.ejercicios[0].titulo, + descripcion: modulo1Ejercicios.ejercicios[0].descripcion, + componente: ( + handleCompleteEjercicio('simulador-disyuntivas', puntuacion)} + /> + ), + }, + { + id: 'quiz-clasificacion-bienes', + titulo: modulo1Ejercicios.ejercicios[1].titulo, + descripcion: modulo1Ejercicios.ejercicios[1].descripcion, + componente: ( + handleCompleteEjercicio('quiz-clasificacion-bienes', puntuacion)} + /> + ), + }, + { + id: 'juego-flujo-circular', + titulo: modulo1Ejercicios.ejercicios[2].titulo, + descripcion: modulo1Ejercicios.ejercicios[2].descripcion, + componente: ( + handleCompleteEjercicio('juego-flujo-circular', puntuacion)} + /> + ), + }, + ]; + + const seccionesContenido = { + introduccion: { + titulo: introduccion.titulo, + data: introduccion, + }, + agentes: { + titulo: agentes.titulo, + data: agentes, + }, + factores: { + titulo: factores.titulo, + data: factores, + }, + }; + + const currentSeccion = seccionesContenido[activeSeccion]; + + // Calcular progreso del módulo + const ejerciciosCompletados = ejerciciosConfig.filter( + (e) => getProgresoForEjercicio(e.id)?.completado + ).length; + const porcentajeProgreso = Math.round((ejerciciosCompletados / ejerciciosConfig.length) * 100); + + return ( +
+ {/* Header */} +
+
+
+ + + Volver a Módulos + +
+ Progreso: +
+
+
+ {porcentajeProgreso}% +
+
+
+
+ + {/* Título del módulo */} +
+
+
+
+ 1 +
+
+

Módulo 1: Fundamentos de Economía

+

+ Introducción a los conceptos básicos, agentes económicos y factores de producción +

+
+
+
+
+ + {/* Tabs */} +
+
+ {TABS.map((tab) => ( + + ))} +
+ + {/* Contenido según tab activo */} + + {activeTab === 'Contenido' ? ( + + {/* Navegación de secciones */} +
+ +

Secciones

+ +
+
+ + {/* Contenido de la sección */} +
+ +

{currentSeccion.titulo}

+
+ {currentSeccion.data.contenido.map((seccion, index) => ( +
+

{seccion.titulo}

+
+ {seccion.contenido.split('\n\n').map((parrafo, pIndex) => ( +

+ {parrafo} +

+ ))} +
+
+ ))} +
+
+ + {/* Ejercicios relacionados con la sección */} + {currentSeccion.data.ejercicios && currentSeccion.data.ejercicios.length > 0 && ( + +

Ejercicios Relacionados

+

+ Practica lo aprendido con estos ejercicios interactivos +

+ +
+ )} +
+
+ ) : ( + + {activeEjercicio ? ( + // Vista de ejercicio activo +
+
+ + {loading && Guardando progreso...} +
+ {ejerciciosConfig.find((e) => e.id === activeEjercicio)?.componente} +
+ ) : ( + // Lista de ejercicios +
+ {ejerciciosConfig.map((ejercicio, index) => { + const progreso = getProgresoForEjercicio(ejercicio.id); + const completado = progreso?.completado || false; + + return ( + setActiveEjercicio(ejercicio.id)} + > +
+
+ {completado ? ( + + ) : ( + {index + 1} + )} +
+
+

{ejercicio.titulo}

+

{ejercicio.descripcion}

+ {completado && progreso && ( +
+ + Completado + + + {progreso.puntuacion} pts + +
+ )} +
+
+ +
+ ); + })} +
+ )} + + {/* Mensaje de completado */} + {ejerciciosCompletados === ejerciciosConfig.length && ejerciciosConfig.length > 0 && ( + +
+
+ +
+
+

¡Felicitaciones!

+

+ Has completado todos los ejercicios de este módulo. +

+
+
+
+ )} +
+ )} +
+
+
+ ); +} + +export default Modulo1Page; diff --git a/frontend/src/pages/modulos/Modulo2Page.tsx b/frontend/src/pages/modulos/Modulo2Page.tsx new file mode 100644 index 0000000..aca2778 --- /dev/null +++ b/frontend/src/pages/modulos/Modulo2Page.tsx @@ -0,0 +1,499 @@ +// @ts-nocheck +import { useState, useEffect } from 'react'; +import { useParams, Link } from 'react-router-dom'; +import { motion, AnimatePresence } from 'framer-motion'; +import { Card } from '../../components/ui/Card'; +import { Button } from '../../components/ui/Button'; +import { progresoService } from '../../services/api'; +import type { Progreso } from '../../types'; +import { ArrowLeft, CheckCircle, Play, BookOpen, Trophy, ChevronRight } from 'lucide-react'; + +// Importar contenido del módulo 2 +import { default as demandaContent } from '../../content/modulo2/demanda'; +import { default as ofertaContent } from '../../content/modulo2/oferta'; +import { default as equilibrioContent } from '../../content/modulo2/equilibrio'; + +// Importar componentes de ejercicios +import { ConstructorCurvas, SimuladorPrecios, IdentificarShocks } from '../../components/exercises/modulo2'; + +const TABS = ['Contenido', 'Ejercicios'] as const; +type Tab = typeof TABS[number]; + +interface EjercicioConfig { + id: string; + titulo: string; + descripcion: string; + componente: React.ReactNode; +} + +export function Modulo2Page() { + const { numero } = useParams<{ numero: string }>(); + const [activeTab, setActiveTab] = useState('Contenido'); + const [activeSeccion, setActiveSeccion] = useState<'demanda' | 'oferta' | 'equilibrio'>('demanda'); + const [activeEjercicio, setActiveEjercicio] = useState(null); + const [progresos, setProgresos] = useState([]); + const [loading, setLoading] = useState(false); + + useEffect(() => { + loadProgreso(); + }, []); + + const loadProgreso = async () => { + try { + const data = await progresoService.getProgreso(); + setProgresos(data); + } catch { + // Silenciar error + } + }; + + const getProgresoForEjercicio = (ejercicioId: string) => { + return progresos.find( + (p) => p.modulo_numero === 2 && p.ejercicio_id === ejercicioId + ); + }; + + const handleCompleteEjercicio = async (ejercicioId: string, puntuacion: number) => { + setLoading(true); + try { + await progresoService.saveProgreso(ejercicioId, puntuacion); + await loadProgreso(); + } catch { + // Silenciar error + } finally { + setLoading(false); + } + }; + + // Configuración de ejercicios + const ejerciciosConfig: EjercicioConfig[] = [ + { + id: 'constructor-curvas', + titulo: 'Constructor de Curvas de Oferta y Demanda', + descripcion: 'Construye curvas de oferta y demanda arrastrando puntos para entender sus pendientes y movimientos.', + componente: ( + handleCompleteEjercicio('constructor-curvas', puntuacion)} + /> + ), + }, + { + id: 'simulador-precios', + titulo: 'Simulador de Precios Intervenidos', + descripcion: 'Ajusta precios máximos y mínimos para observar sus efectos en el mercado: escasez, superávit, y pérdida de bienestar.', + componente: ( + handleCompleteEjercicio('simulador-precios', puntuacion)} + /> + ), + }, + { + id: 'identificar-shocks', + titulo: 'Identificador de Shocks del Mercado', + descripcion: 'Analiza escenarios económicos reales e identifica si afectan la oferta, la demanda, ambas, y cómo cambian precio y cantidad de equilibrio.', + componente: ( + handleCompleteEjercicio('identificar-shocks', puntuacion)} + /> + ), + }, + ]; + + // Estructura de contenido del módulo 2 + const seccionesContenido = { + demanda: { + titulo: 'Ley de la Demanda', + contenido: [ + { + titulo: demandaContent.definicion.titulo, + texto: demandaContent.definicion.definicion, + elementos: demandaContent.definicion.elementosClave, + }, + { + titulo: demandaContent.ley.titulo, + texto: demandaContent.ley.enunciado, + efectos: demandaContent.ley.efectos, + }, + { + titulo: 'Factores que Desplazan la Demanda', + texto: 'Los siguientes factores causan desplazamientos de la curva de demanda:', + factores: demandaContent.factores, + }, + ], + }, + oferta: { + titulo: 'Ley de la Oferta', + contenido: [ + { + titulo: ofertaContent.definicion.titulo, + texto: ofertaContent.definicion.definicion, + elementos: ofertaContent.definicion.elementosClave, + }, + { + titulo: ofertaContent.ley.titulo, + texto: ofertaContent.ley.enunciado, + razones: ofertaContent.ley.razones, + }, + { + titulo: 'Factores que Desplazan la Oferta', + texto: 'Los siguientes factores causan desplazamientos de la curva de oferta:', + factores: ofertaContent.factores, + }, + ], + }, + equilibrio: { + titulo: 'Equilibrio de Mercado', + contenido: [ + { + titulo: equilibrioContent.definicion.titulo, + texto: equilibrioContent.definicion.definicion, + caracteristicas: equilibrioContent.definicion.caracteristicas, + }, + { + titulo: 'Excedentes del Mercado', + texto: 'En el equilibrio se generan beneficios para consumidores y productores:', + excedentes: [ + equilibrioContent.excedentes.excedenteConsumidor, + equilibrioContent.excedentes.excedenteProductor, + ], + }, + { + titulo: 'Controles de Precio', + texto: 'Los gobiernos pueden intervenir el mercado estableciendo precios máximos o mínimos:', + controles: [ + equilibrioContent.controles.precioMaximo, + equilibrioContent.controles.precioMinimo, + ], + }, + ], + }, + }; + + const currentSeccion = seccionesContenido[activeSeccion]; + + // Calcular progreso + const ejerciciosCompletados = ejerciciosConfig.filter( + (e) => getProgresoForEjercicio(e.id)?.completado + ).length; + const porcentajeProgreso = Math.round((ejerciciosCompletados / ejerciciosConfig.length) * 100); + + return ( +
+ {/* Header */} +
+
+
+ + + Volver a Módulos + +
+ Progreso: +
+
+
+ {porcentajeProgreso}% +
+
+
+
+ + {/* Título del módulo */} +
+
+
+
+ 2 +
+
+

Módulo 2: Oferta, Demanda y Equilibrio

+

+ Curvas de oferta y demanda, equilibrio de mercado y controles de precio +

+
+
+
+
+ + {/* Tabs */} +
+
+ {TABS.map((tab) => ( + + ))} +
+ + {/* Contenido según tab activo */} + + {activeTab === 'Contenido' ? ( + + {/* Navegación de secciones */} +
+ +

Secciones

+ +
+
+ + {/* Contenido de la sección */} +
+ +

{currentSeccion.titulo}

+
+ {currentSeccion.contenido.map((item, index) => ( +
+

{item.titulo}

+

{item.texto}

+ + {/* Mostrar elementos clave si existen */} + {item.elementos && ( +
    + {item.elementos.map((el: any, i: number) => ( +
  • + {el.elemento}: {el.descripcion} +
  • + ))} +
+ )} + + {/* Mostrar efectos/razones si existen */} + {item.efectos && ( +
+ {item.efectos.map((efecto: any, i: number) => ( +
+

{efecto.nombre}

+

{efecto.descripcion}

+

Ejemplo: {efecto.ejemplo}

+
+ ))} +
+ )} + + {/* Mostrar razones si existen */} + {item.razones && ( +
+ {item.razones.map((razon: any, i: number) => ( +
+

{razon.nombre}

+

{razon.descripcion}

+

Ejemplo: {razon.ejemplo}

+
+ ))} +
+ )} + + {/* Mostrar factores si existen */} + {item.factores && ( +
+ {item.factores.map((factor: any, i: number) => ( +
+
+ {factor.icono} +

{factor.nombre}

+
+

{factor.descripcion}

+

{factor.ejemplo}

+
+ ))} +
+ )} + + {/* Mostrar características si existen */} + {item.caracteristicas && ( +
    + {item.caracteristicas.map((car: any, i: number) => ( +
  • + {car.caracteristica}: {car.explicacion} +
  • + ))} +
+ )} + + {/* Mostrar excedentes si existen */} + {item.excedentes && ( +
+ {item.excedentes.map((exc: any, i: number) => ( +
+

{exc.nombre}

+

{exc.definicion}

+

Fórmula: {exc.formula}

+
+ ))} +
+ )} + + {/* Mostrar controles si existen */} + {item.controles && ( +
+ {item.controles.map((control: any, i: number) => ( +
+

{control.nombre}

+

{control.definicion}

+

+ Condición: {control.condicionEfectivo} +

+
+ ))} +
+ )} +
+ ))} +
+
+ + +

Ejercicios Relacionados

+

+ Pon a prueba tus conocimientos con ejercicios interactivos sobre oferta, demanda y equilibrio +

+ +
+
+
+ ) : ( + + {activeEjercicio ? ( +
+
+ + {loading && Guardando progreso...} +
+ {ejerciciosConfig.find((e) => e.id === activeEjercicio)?.componente} +
+ ) : ( +
+ {ejerciciosConfig.map((ejercicio, index) => { + const progreso = getProgresoForEjercicio(ejercicio.id); + const completado = progreso?.completado || false; + + return ( + setActiveEjercicio(ejercicio.id)} + > +
+
+ {completado ? ( + + ) : ( + {index + 1} + )} +
+
+

{ejercicio.titulo}

+

{ejercicio.descripcion}

+ {completado && progreso && ( +
+ + Completado + + + {progreso.puntuacion} pts + +
+ )} +
+
+ +
+ ); + })} +
+ )} + + {ejerciciosCompletados === ejerciciosConfig.length && ejerciciosConfig.length > 0 && ( + +
+
+ +
+
+

¡Felicitaciones!

+

+ Has completado todos los ejercicios de este módulo. +

+
+
+
+ )} +
+ )} +
+
+
+ ); +} + +export default Modulo2Page; diff --git a/frontend/src/pages/modulos/Modulo3Page.tsx b/frontend/src/pages/modulos/Modulo3Page.tsx new file mode 100644 index 0000000..3142ae3 --- /dev/null +++ b/frontend/src/pages/modulos/Modulo3Page.tsx @@ -0,0 +1,610 @@ +// @ts-nocheck +import { useState, useEffect } from 'react'; +import { useParams, Link } from 'react-router-dom'; +import { motion, AnimatePresence } from 'framer-motion'; +import { Card } from '../../components/ui/Card'; +import { Button } from '../../components/ui/Button'; +import { progresoService } from '../../services/api'; +import type { Progreso } from '../../types'; +import { ArrowLeft, CheckCircle, Play, BookOpen, Trophy, ChevronRight } from 'lucide-react'; + +// Importar contenido del módulo 3 +import { conceptosElasticidad } from '../../content/modulo3/conceptos'; +import { tiposElasticidad } from '../../content/modulo3/tipos'; +import { clasificacionBienes } from '../../content/modulo3/clasificacion'; +import { ejercicios as modulo3Ejercicios } from '../../content/modulo3/ejercicios'; + +// Importar componentes de ejercicios +import { CalculadoraElasticidad, ClasificadorBienes, EjerciciosExamen } from '../../components/exercises/modulo3'; + +const TABS = ['Contenido', 'Ejercicios'] as const; +type Tab = typeof TABS[number]; + +interface EjercicioConfig { + id: string; + titulo: string; + descripcion: string; + componente: React.ReactNode; +} + +interface ContenidoItem { + titulo: string; + texto: string; + interpretacion?: string; + formula?: { latex?: string; ecuacion?: string } | string; + interpretaciones?: Array<{ + rango: string; + clasificacion: string; + significado?: string; + descripcion?: string; + ejemplo?: string; + }>; + factores?: Array<{ + factor?: string; + nombre?: string; + efecto?: string; + descripcion?: string; + explicacion?: string; + }>; + reglas?: Array<{ + elasticidad: string; + efectoPrecioArriba: string; + efectoPrecioAbajo: string; + }>; + clasificacion?: Array<{ + tipo: string; + descripcion: string; + condicion: string; + subtipos?: Array<{ tipo: string; rango: string }>; + }>; + categorias?: Array<{ + tipo: string; + descripcion: string; + condicion: string; + ejemplos?: string[]; + }>; + matriz?: Array<{ + combinacion: string; + ejemplo: string; + caracteristicas: string; + }>; + determinantes?: string[]; +} + +export function Modulo3Page() { + const { numero } = useParams<{ numero: string }>(); + const [activeTab, setActiveTab] = useState('Contenido'); + const [activeSeccion, setActiveSeccion] = useState<'conceptos' | 'tipos' | 'clasificacion'>('conceptos'); + const [activeEjercicio, setActiveEjercicio] = useState(null); + const [progresos, setProgresos] = useState([]); + const [loading, setLoading] = useState(false); + + useEffect(() => { + loadProgreso(); + }, []); + + const loadProgreso = async () => { + try { + const data = await progresoService.getProgreso(); + setProgresos(data); + } catch { + // Silenciar error + } + }; + + const getProgresoForEjercicio = (ejercicioId: string) => { + return progresos.find( + (p) => p.modulo_numero === 3 && p.ejercicio_id === ejercicioId + ); + }; + + const handleCompleteEjercicio = async (ejercicioId: string, puntuacion: number) => { + setLoading(true); + try { + await progresoService.saveProgreso(ejercicioId, puntuacion); + await loadProgreso(); + } catch { + // Silenciar error + } finally { + setLoading(false); + } + }; + + // Configuración de ejercicios + const ejerciciosConfig: EjercicioConfig[] = [ + { + id: 'calculadora-elasticidad', + titulo: 'Calculadora de Elasticidad', + descripcion: 'Calcula paso a paso la elasticidad precio, ingreso y cruzada con ejemplos prácticos.', + componente: ( + handleCompleteEjercicio('calculadora-elasticidad', puntuacion)} + /> + ), + }, + { + id: 'clasificador-bienes', + titulo: 'Clasificador de Bienes', + descripcion: 'Clasifica bienes según su elasticidad ingreso y cruzada. Identifica normales, inferiores, lujos, sustitutos y complementos.', + componente: ( + handleCompleteEjercicio('clasificador-bienes', puntuacion)} + /> + ), + }, + { + id: 'ejercicios-examen', + titulo: 'Ejercicios Tipo Examen', + descripcion: 'Resuelve problemas integradores de elasticidad con dificultad de examen.', + componente: ( + handleCompleteEjercicio('ejercicios-examen', puntuacion)} + /> + ), + }, + ]; + + // Estructura de contenido del módulo 3 + const seccionesContenido: { + conceptos: { titulo: string; contenido: ContenidoItem[] }; + tipos: { titulo: string; contenido: ContenidoItem[] }; + clasificacion: { titulo: string; contenido: ContenidoItem[] }; + } = { + conceptos: { + titulo: 'Conceptos Fundamentales', + contenido: [ + { + titulo: conceptosElasticidad.definicionElasticidad.titulo, + texto: conceptosElasticidad.definicionElasticidad.definicion, + interpretacion: conceptosElasticidad.definicionElasticidad.interpretacionIntuitiva, + formula: conceptosElasticidad.definicionElasticidad.formulaGeneral, + }, + { + titulo: conceptosElasticidad.elasticidadPrecioDemanda.titulo, + texto: conceptosElasticidad.elasticidadPrecioDemanda.definicion, + interpretaciones: conceptosElasticidad.elasticidadPrecioDemanda.interpretacion, + }, + { + titulo: conceptosElasticidad.determinantesElasticidad.titulo, + texto: 'Los siguientes factores determinan la elasticidad de un bien:', + factores: conceptosElasticidad.determinantesElasticidad.factores, + }, + { + titulo: conceptosElasticidad.relacionIngresoTotal.titulo, + texto: conceptosElasticidad.relacionIngresoTotal.definicion, + reglas: conceptosElasticidad.relacionIngresoTotal.reglas, + }, + ], + }, + tipos: { + titulo: 'Tipos de Elasticidad', + contenido: [ + { + titulo: 'Elasticidad Precio de la Demanda (Ed)', + texto: tiposElasticidad.tipos[0].descripcion, + formula: tiposElasticidad.tipos[0].formula, + determinantes: tiposElasticidad.tipos[0].determinantes, + }, + { + titulo: 'Elasticidad Ingreso de la Demanda (Ei)', + texto: tiposElasticidad.tipos[1].descripcion, + formula: tiposElasticidad.tipos[1].formula, + clasificacion: tiposElasticidad.tipos[1].clasificacionBienes, + }, + { + titulo: 'Elasticidad Cruzada (Exy)', + texto: tiposElasticidad.tipos[2].descripcion, + formula: tiposElasticidad.tipos[2].formula, + categorias: tiposElasticidad.tipos[2].clasificacionBienes, + }, + { + titulo: 'Elasticidad Precio de la Oferta (Es)', + texto: tiposElasticidad.tipos[3].descripcion, + formula: tiposElasticidad.tipos[3].formula, + interpretacion: tiposElasticidad.tipos[3].interpretacion, + }, + ], + }, + clasificacion: { + titulo: 'Clasificación de Bienes', + contenido: [ + { + titulo: 'Según Elasticidad Ingreso', + texto: clasificacionBienes.clasificacionPorIngreso.descripcion, + formula: clasificacionBienes.clasificacionPorIngreso.formulaReferencia, + categorias: clasificacionBienes.clasificacionPorIngreso.categorias, + }, + { + titulo: 'Según Elasticidad Cruzada', + texto: clasificacionBienes.clasificacionPorElasticidadCruzada.descripcion, + formula: clasificacionBienes.clasificacionPorElasticidadCruzada.formulaReferencia, + categorias: clasificacionBienes.clasificacionPorElasticidadCruzada.categorias, + }, + { + titulo: 'Matriz de Clasificación Completa', + texto: clasificacionBienes.matrizClasificacionCompleta.descripcion, + matriz: clasificacionBienes.matrizClasificacionCompleta.matriz, + }, + ], + }, + }; + + const currentSeccion = seccionesContenido[activeSeccion]; + + // Calcular progreso + const ejerciciosCompletados = ejerciciosConfig.filter( + (e) => getProgresoForEjercicio(e.id)?.completado + ).length; + const porcentajeProgreso = Math.round((ejerciciosCompletados / ejerciciosConfig.length) * 100); + + return ( +
+ {/* Header */} +
+
+
+ + + Volver a Módulos + +
+ Progreso: +
+
+
+ {porcentajeProgreso}% +
+
+
+
+ + {/* Título del módulo */} +
+
+
+
+ 3 +
+
+

Módulo 3: Elasticidad

+

+ Tipos de elasticidad, clasificación de bienes y análisis de sensibilidad +

+
+
+
+
+ + {/* Tabs */} +
+
+ {TABS.map((tab) => ( + + ))} +
+ + {/* Contenido según tab activo */} + + {activeTab === 'Contenido' ? ( + + {/* Navegación de secciones */} +
+ +

Secciones

+ +
+
+ + {/* Contenido de la sección */} +
+ +

{currentSeccion.titulo}

+
+ {currentSeccion.contenido.map((item, index) => ( +
+

{item.titulo}

+

{item.texto}

+ + {/* Mostrar interpretación si existe */} + {item.interpretacion && ( +
+

{item.interpretacion}

+
+ )} + + {/* Mostrar fórmula si existe */} + {item.formula && ( +
+
+                              {item.formula.latex || item.formula.ecuacion || item.formula}
+                            
+
+ )} + + {/* Mostrar interpretaciones de elasticidad */} + {item.interpretaciones && ( +
+ {item.interpretaciones.map((interp: any, i: number) => ( +
1' || interp.rango === 'Es > 1' + ? 'bg-green-50 border-green-200' + : interp.rango === '|Ed| < 1' || interp.rango === 'Es < 1' + ? 'bg-yellow-50 border-yellow-200' + : 'bg-blue-50 border-blue-200' + }`}> +

{interp.clasificacion}

+

{interp.significado || interp.descripcion}

+ {interp.ejemplo && ( +

Ejemplo: {interp.ejemplo}

+ )} +
+ ))} +
+ )} + + {/* Mostrar factores determinantes */} + {item.factores && ( +
+ {item.factores.map((factor: any, i: number) => ( +
+
+

{factor.factor || factor.nombre}

+

{factor.efecto || factor.descripcion}

+ {factor.explicacion && ( +

{factor.explicacion}

+ )} +
+
+ ))} +
+ )} + + {/* Mostrar reglas de ingreso total */} + {item.reglas && ( +
+ {item.reglas.map((regla: any, i: number) => ( +
+

{regla.elasticidad}

+
+

Precio ↑: {regla.efectoPrecioArriba}

+

Precio ↓: {regla.efectoPrecioAbajo}

+
+
+ ))} +
+ )} + + {/* Mostrar clasificación de bienes por ingreso */} + {item.clasificacion && item.titulo?.includes('Ingreso') && ( +
+ {item.clasificacion.map((cat: any, i: number) => ( +
0') && !cat.condicion?.includes('<') + ? 'bg-green-50 border-green-200' + : 'bg-red-50 border-red-200' + }`}> +

{cat.tipo}

+

{cat.descripcion}

+

Condición: {cat.condicion}

+ {cat.subtipos && ( +
+ {cat.subtipos.map((sub: any, j: number) => ( +
+ {sub.tipo}: {sub.rango} +
+ ))} +
+ )} +
+ ))} +
+ )} + + {/* Mostrar clasificación por elasticidad cruzada */} + {item.categorias && item.titulo?.includes('Cruzada') && ( +
+ {item.categorias.map((cat: any, i: number) => ( +
0') + ? 'bg-green-50 border-green-200' + : cat.condicion?.includes('< 0') + ? 'bg-red-50 border-red-200' + : 'bg-gray-50 border-gray-200' + }`}> +

{cat.tipo}

+

{cat.descripcion}

+

Exy {cat.condicion}

+ {cat.ejemplos && ( +

+ Ejemplos: {cat.ejemplos.slice(0, 3).join(', ')} +

+ )} +
+ ))} +
+ )} + + {/* Mostrar matriz de clasificación */} + {item.matriz && ( +
+ + + + + + + + + + {item.matriz.map((fila: any, i: number) => ( + + + + + + ))} + +
CombinaciónEjemploCaracterísticas
{fila.combinacion}{fila.ejemplo}{fila.caracteristicas}
+
+ )} +
+ ))} +
+
+ + +

Ejercicios Relacionados

+

+ Practica el cálculo y clasificación de elasticidad con ejercicios interactivos +

+ +
+
+
+ ) : ( + + {activeEjercicio ? ( +
+
+ + {loading && Guardando progreso...} +
+ {ejerciciosConfig.find((e) => e.id === activeEjercicio)?.componente} +
+ ) : ( +
+ {ejerciciosConfig.map((ejercicio, index) => { + const progreso = getProgresoForEjercicio(ejercicio.id); + const completado = progreso?.completado || false; + + return ( + setActiveEjercicio(ejercicio.id)} + > +
+
+ {completado ? ( + + ) : ( + {index + 1} + )} +
+
+

{ejercicio.titulo}

+

{ejercicio.descripcion}

+ {completado && progreso && ( +
+ + Completado + + + {progreso.puntuacion} pts + +
+ )} +
+
+ +
+ ); + })} +
+ )} + + {ejerciciosCompletados === ejerciciosConfig.length && ejerciciosConfig.length > 0 && ( + +
+
+ +
+
+

¡Felicitaciones!

+

+ Has completado todos los ejercicios de este módulo. +

+
+
+
+ )} +
+ )} +
+
+
+ ); +} + +export default Modulo3Page; diff --git a/frontend/src/pages/modulos/Modulo4Page.tsx b/frontend/src/pages/modulos/Modulo4Page.tsx new file mode 100644 index 0000000..8ba4a28 --- /dev/null +++ b/frontend/src/pages/modulos/Modulo4Page.tsx @@ -0,0 +1,423 @@ +// @ts-nocheck +import { useState, useEffect } from 'react'; +import { useParams, Link } from 'react-router-dom'; +import { motion, AnimatePresence } from 'framer-motion'; +import { Card } from '../../components/ui/Card'; +import { Button } from '../../components/ui/Button'; +import { progresoService } from '../../services/api'; +import type { Progreso } from '../../types'; +import { ArrowLeft, CheckCircle, Play, BookOpen, Trophy, ChevronRight } from 'lucide-react'; + +// Importar contenido del módulo 4 +import { produccion } from '../../content/modulo4/produccion'; +import { costos } from '../../content/modulo4/costos'; +import { mercado } from '../../content/modulo4/mercado'; + +// Importar componentes de ejercicios +import { CalculadoraCostos, SimuladorProduccion, VisualizadorExcedentes } from '../../components/exercises/modulo4'; + +const TABS = ['Contenido', 'Ejercicios'] as const; +type Tab = typeof TABS[number]; + +interface EjercicioConfig { + id: string; + titulo: string; + descripcion: string; + componente: React.ReactNode; +} + +export function Modulo4Page() { + const { numero: _numero } = useParams<{ numero: string }>(); + const [activeTab, setActiveTab] = useState('Contenido'); + const [activeSeccion, setActiveSeccion] = useState<'produccion' | 'costos' | 'mercado'>('produccion'); + const [activeEjercicio, setActiveEjercicio] = useState(null); + const [progresos, setProgresos] = useState([]); + const [loading, setLoading] = useState(false); + + useEffect(() => { + loadProgreso(); + }, []); + + const loadProgreso = async () => { + try { + const data = await progresoService.getProgreso(); + setProgresos(data); + } catch { + // Silenciar error + } + }; + + const getProgresoForEjercicio = (ejercicioId: string) => { + return progresos.find( + (p) => p.modulo_numero === 4 && p.ejercicio_id === ejercicioId + ); + }; + + const handleCompleteEjercicio = async (ejercicioId: string, puntuacion: number) => { + setLoading(true); + try { + await progresoService.saveProgreso(ejercicioId, puntuacion); + await loadProgreso(); + } catch { + // Silenciar error + } finally { + setLoading(false); + } + }; + + // Configuración de ejercicios + const ejerciciosConfig: EjercicioConfig[] = [ + { + id: 'calculadora-costos', + titulo: 'Calculadora de Costos', + descripcion: 'Ingresa CF, CV para cada nivel de producción y calcula automáticamente todos los costos medios y marginales.', + componente: ( + handleCompleteEjercicio('calculadora-costos', 100)} + /> + ), + }, + { + id: 'simulador-produccion', + titulo: 'Simulador de Producción', + descripcion: 'Dado un precio de mercado y curva de costos, encuentra la cantidad óptima y determina si debes producir o cerrar.', + componente: ( + handleCompleteEjercicio('simulador-produccion', 100)} + /> + ), + }, + { + id: 'visualizador-excedentes', + titulo: 'Visualizador de Excedentes', + descripcion: 'Interactúa con el gráfico para ver cómo cambia el excedente del productor al variar el precio y la cantidad.', + componente: ( + handleCompleteEjercicio('visualizador-excedentes', 100)} + /> + ), + }, + ]; + + // Estructura de contenido del módulo 4 + const seccionesContenido = { + produccion: { + titulo: produccion.titulo, + contenido: produccion.contenido, + }, + costos: { + titulo: costos.titulo, + contenido: costos.contenido, + }, + mercado: { + titulo: mercado.titulo, + contenido: mercado.contenido, + }, + }; + + const currentSeccion = seccionesContenido[activeSeccion]; + + // Calcular progreso + const ejerciciosCompletados = ejerciciosConfig.filter( + (e) => getProgresoForEjercicio(e.id)?.completado + ).length; + const porcentajeProgreso = Math.round((ejerciciosCompletados / ejerciciosConfig.length) * 100); + + // Función auxiliar para renderizar contenido markdown-like + const renderContenido = (texto: string) => { + const partes = texto.split(/(\*\*.*?\*\*|\$.*?\$|`.*?`|\n\n)/); + return partes.map((parte, index) => { + if (parte.startsWith('**') && parte.endsWith('**')) { + return {parte.slice(2, -2)}; + } + if (parte.startsWith('$') && parte.endsWith('$')) { + return {parte.slice(1, -1)}; + } + if (parte.startsWith('`') && parte.endsWith('`')) { + return {parte.slice(1, -1)}; + } + if (parte === '\n\n') { + return
; + } + return {parte}; + }); + }; + + return ( +
+ {/* Header */} +
+
+
+ + + Volver a Módulos + +
+ Progreso: +
+
+
+ {porcentajeProgreso}% +
+
+
+
+ + {/* Título del módulo */} +
+
+
+
+ 4 +
+
+

Módulo 4: Teoría del Productor

+

+ Producción, costos y competencia perfecta +

+
+
+
+
+ + {/* Tabs */} +
+
+ {TABS.map((tab) => ( + + ))} +
+ + {/* Contenido según tab activo */} + + {activeTab === 'Contenido' ? ( + + {/* Navegación de secciones */} +
+ +

Secciones

+ +
+
+ + {/* Contenido de la sección */} +
+ +

{currentSeccion.titulo}

+
+ {currentSeccion.contenido.map((seccion, index) => ( +
+

{seccion.titulo}

+
+ {seccion.contenido.split('\n\n').map((parrafo, pIndex) => { + // Detectar si es una tabla + if (parrafo.includes('|') && parrafo.includes('---')) { + const lineas = parrafo.split('\n').filter(l => l.trim() && !l.includes('---')); + if (lineas.length >= 2) { + return ( +
+ + + + {lineas[0].split('|').filter(Boolean).map((cell, cIndex) => ( + + ))} + + + + {lineas.slice(1).map((linea, lIndex) => ( + + {linea.split('|').filter(Boolean).map((cell, cIndex) => ( + + ))} + + ))} + +
+ {cell.trim()} +
+ {cell.trim()} +
+
+ ); + } + } + + // Detectar si es código + if (parrafo.startsWith('```')) { + return ( +
+                                  {parrafo.replace(/```/g, '').trim()}
+                                
+ ); + } + + return ( +

+ {renderContenido(parrafo)} +

+ ); + })} +
+
+ ))} +
+
+ + +

Ejercicios Relacionados

+

+ Practica con simuladores interactivos de costos, producción y excedentes +

+ +
+
+
+ ) : ( + + {activeEjercicio ? ( +
+
+ + {loading && Guardando progreso...} +
+ {ejerciciosConfig.find((e) => e.id === activeEjercicio)?.componente} +
+ ) : ( +
+ {ejerciciosConfig.map((ejercicio, index) => { + const progreso = getProgresoForEjercicio(ejercicio.id); + const completado = progreso?.completado || false; + + return ( + setActiveEjercicio(ejercicio.id)} + > +
+
+ {completado ? ( + + ) : ( + {index + 1} + )} +
+
+

{ejercicio.titulo}

+

{ejercicio.descripcion}

+ {completado && progreso && ( +
+ + Completado + + + {progreso.puntuacion} pts + +
+ )} +
+
+ +
+ ); + })} +
+ )} + + {ejerciciosCompletados === ejerciciosConfig.length && ejerciciosConfig.length > 0 && ( + +
+
+ +
+
+

¡Felicitaciones!

+

+ Has completado todos los ejercicios de este módulo. +

+
+
+
+ )} +
+ )} +
+
+
+ ); +} + +export default Modulo4Page; diff --git a/frontend/src/pages/modulos/index.ts b/frontend/src/pages/modulos/index.ts new file mode 100644 index 0000000..4ec1d2e --- /dev/null +++ b/frontend/src/pages/modulos/index.ts @@ -0,0 +1,4 @@ +export { Modulo1Page } from './Modulo1Page'; +export { Modulo2Page } from './Modulo2Page'; +export { Modulo3Page } from './Modulo3Page'; +export { Modulo4Page } from './Modulo4Page'; diff --git a/frontend/src/services/api.ts b/frontend/src/services/api.ts index 0a57f9c..64b9dc3 100644 --- a/frontend/src/services/api.ts +++ b/frontend/src/services/api.ts @@ -1,5 +1,5 @@ import axios, { AxiosError, InternalAxiosRequestConfig } from 'axios'; -import type { LoginRequest, LoginResponse, Usuario, Progreso, Modulo } from '../types'; +import type { LoginRequest, LoginResponse, Usuario, Progreso, Modulo, ProgresoModulo, Badge, ResumenProgreso } from '../types'; const API_BASE_URL = '/api'; @@ -96,8 +96,8 @@ export const progresoService = { return response.data; }, - async saveProgreso(progreso: Progreso): Promise { - const response = await api.post('/progreso', progreso); + async saveProgreso(data: { modulo_numero: number; ejercicio_id: string; puntuacion: number; completado?: boolean }): Promise { + const response = await api.post('/progreso', data); return response.data; }, @@ -105,16 +105,36 @@ export const progresoService = { const response = await api.get(`/admin/usuarios/${userId}/progreso`); return response.data; }, + + async getResumen(): Promise { + const response = await api.get('/progreso/resumen'); + return response.data; + }, + + async getResumenProgreso(): Promise { + const response = await api.get('/progreso/resumen'); + return response.data; + }, + + async getProgresoModulos(): Promise { + const response = await api.get('/progreso/modulos'); + return response.data; + }, + + async getBadges(): Promise { + const response = await api.get('/progreso/badges'); + return response.data; + }, }; export const moduloService = { async getModulos(): Promise { - const response = await api.get('/modulos'); + const response = await api.get('/contenido/modulos'); return response.data; }, async getModulo(numero: number): Promise { - const response = await api.get(`/modulos/${numero}`); + const response = await api.get(`/contenido/modulos/${numero}`); return response.data; }, }; diff --git a/frontend/src/stores/authStore.ts b/frontend/src/stores/authStore.ts index b771158..b4e596f 100644 --- a/frontend/src/stores/authStore.ts +++ b/frontend/src/stores/authStore.ts @@ -66,7 +66,10 @@ export const useAuthStore = create()( }), { name: 'auth-storage', - partialize: (state) => ({ isAuthenticated: state.isAuthenticated }), + partialize: (state) => ({ + isAuthenticated: state.isAuthenticated, + usuario: state.usuario + }), } ) ); diff --git a/frontend/src/stores/progresoStore.ts b/frontend/src/stores/progresoStore.ts new file mode 100644 index 0000000..9f558b9 --- /dev/null +++ b/frontend/src/stores/progresoStore.ts @@ -0,0 +1,134 @@ +import { create } from 'zustand'; +import { persist } from 'zustand/middleware'; +import type { ProgresoEjercicio, ProgresoModulo, Badge, NivelUsuario } from '../types'; +import { progresoService } from '../services/api'; + +interface ProgresoState { + progresoModulos: ProgresoModulo[]; + badges: Badge[]; + totalPuntuacion: number; + nivel: NivelUsuario; + isLoading: boolean; + error: string | null; + + // Actions + loadProgreso: () => Promise; + saveProgreso: (ejercicioId: string, puntuacion: number, moduloNumero: number) => Promise; + getProgresoModulo: (moduloNumero: number) => ProgresoModulo | undefined; + getEjercicioCompletado: (ejercicioId: string, moduloNumero: number) => boolean; + getPuntuacionEjercicio: (ejercicioId: string, moduloNumero: number) => number; + getPorcentajeModulo: (moduloNumero: number, totalEjercicios: number) => number; + clearError: () => void; +} + +export const useProgresoStore = create()( + persist( + (set, get) => ({ + progresoModulos: [], + badges: [], + totalPuntuacion: 0, + nivel: 'Novato', + isLoading: false, + error: null, + + loadProgreso: async () => { + set({ isLoading: true, error: null }); + try { + const resumen = await progresoService.getResumen(); + set({ + progresoModulos: resumen.moduloProgreso, + badges: resumen.badges, + totalPuntuacion: resumen.totalPuntuacion, + nivel: resumen.nivel, + isLoading: false, + }); + } catch (error: unknown) { + const message = error instanceof Error ? error.message : 'Error al cargar progreso'; + set({ error: message, isLoading: false }); + } + }, + + saveProgreso: async (ejercicioId: string, puntuacion: number, moduloNumero: number) => { + set({ isLoading: true, error: null }); + try { + await progresoService.saveProgreso({ + modulo_numero: moduloNumero, + ejercicio_id: ejercicioId, + puntuacion, + completado: true, + }); + + // Update local state + const { progresoModulos } = get(); + const moduloIndex = progresoModulos.findIndex(m => m.moduloNumero === moduloNumero); + + if (moduloIndex >= 0) { + const nuevoEjercicio: ProgresoEjercicio = { + ejercicioId, + completado: true, + puntuacion, + fecha: new Date().toISOString(), + }; + + const moduloActualizado = { ...progresoModulos[moduloIndex] }; + const ejercicioExistente = moduloActualizado.ejercicios.findIndex( + e => e.ejercicioId === ejercicioId + ); + + if (ejercicioExistente >= 0) { + moduloActualizado.ejercicios[ejercicioExistente] = nuevoEjercicio; + } else { + moduloActualizado.ejercicios.push(nuevoEjercicio); + } + + const nuevosProgresos = [...progresoModulos]; + nuevosProgresos[moduloIndex] = moduloActualizado; + + set({ progresoModulos: nuevosProgresos, isLoading: false }); + } + + // Reload full progress to get updated badges and level + await get().loadProgreso(); + } catch (error: unknown) { + const message = error instanceof Error ? error.message : 'Error al guardar progreso'; + set({ error: message, isLoading: false }); + } + }, + + getProgresoModulo: (moduloNumero: number) => { + return get().progresoModulos.find(m => m.moduloNumero === moduloNumero); + }, + + getEjercicioCompletado: (ejercicioId: string, moduloNumero: number) => { + const modulo = get().getProgresoModulo(moduloNumero); + if (!modulo) return false; + const ejercicio = modulo.ejercicios.find(e => e.ejercicioId === ejercicioId); + return ejercicio?.completado || false; + }, + + getPuntuacionEjercicio: (ejercicioId: string, moduloNumero: number) => { + const modulo = get().getProgresoModulo(moduloNumero); + if (!modulo) return 0; + const ejercicio = modulo.ejercicios.find(e => e.ejercicioId === ejercicioId); + return ejercicio?.puntuacion || 0; + }, + + getPorcentajeModulo: (moduloNumero: number, totalEjercicios: number) => { + const modulo = get().getProgresoModulo(moduloNumero); + if (!modulo || totalEjercicios === 0) return 0; + const completados = modulo.ejercicios.filter(e => e.completado).length; + return Math.round((completados / totalEjercicios) * 100); + }, + + clearError: () => set({ error: null }), + }), + { + name: 'progreso-storage', + partialize: (state) => ({ + progresoModulos: state.progresoModulos, + totalPuntuacion: state.totalPuntuacion, + nivel: state.nivel, + }), + } + ) +); diff --git a/frontend/src/stores/progressStore.ts b/frontend/src/stores/progressStore.ts new file mode 100644 index 0000000..17df0c1 --- /dev/null +++ b/frontend/src/stores/progressStore.ts @@ -0,0 +1,266 @@ +import { create } from 'zustand'; +import { progresoService } from '../services/api'; +import type { Progreso, Badge, NivelUsuario } from '../types'; + +export interface EjercicioProgreso { + ejercicioId: string; + completado: boolean; + puntuacion: number; + fechaCompletado?: string; + intentos: number; +} + +export interface ModuloProgreso { + moduloId: string; + ejercicios: Record; + completado: boolean; +} + +interface ProgressState { + modulos: Record; + puntuacionTotal: number; + badges: Badge[]; + nivel: NivelUsuario; + isLoading: boolean; + error: string | null; + + // Acciones + loadProgreso: () => Promise; + saveProgreso: (moduloId: string, ejercicioId: string, puntuacion: number) => Promise; + getProgresoEjercicio: (moduloId: string, ejercicioId: string) => EjercicioProgreso | undefined; + getProgresoModulo: (moduloId: string) => ModuloProgreso | undefined; + resetProgreso: (moduloId?: string) => void; + calcularPorcentajeModulo: (moduloId: string, totalEjercicios: number) => number; + getBadgesDesbloqueados: () => Badge[]; + getBadgesBloqueados: () => Badge[]; + getProgreso: (moduloId: string, ejercicioId: string) => EjercicioProgreso | undefined; +} + +function calcularNivel(puntuacion: number): NivelUsuario { + if (puntuacion >= 2000) return 'Maestro'; + if (puntuacion >= 1000) return 'Experto'; + if (puntuacion >= 300) return 'Aprendiz'; + return 'Novato'; +} + +function transformarProgresoAPI(progresoAPI: Progreso[]): Record { + const modulos: Record = {}; + + progresoAPI.forEach((p) => { + const moduloId = `modulo${p.modulo_numero}`; + + if (!modulos[moduloId]) { + modulos[moduloId] = { + moduloId, + ejercicios: {}, + completado: false, + }; + } + + modulos[moduloId].ejercicios[p.ejercicio_id] = { + ejercicioId: p.ejercicio_id, + completado: p.completado, + puntuacion: p.puntuacion, + fechaCompletado: new Date().toISOString(), + intentos: 1, + }; + }); + + return modulos; +} + +export const useProgressStore = create()( + (set, get) => ({ + modulos: {}, + puntuacionTotal: 0, + badges: [], + nivel: 'Novato', + isLoading: false, + error: null, + + loadProgreso: async () => { + set({ isLoading: true, error: null }); + + try { + const [progresoData, resumenData] = await Promise.all([ + progresoService.getProgreso(), + progresoService.getResumenProgreso(), + ]); + + const modulos = transformarProgresoAPI(progresoData); + + set({ + modulos, + puntuacionTotal: resumenData?.totalPuntuacion ?? 0, + badges: resumenData?.badges ?? [], + nivel: resumenData?.nivel ?? 'Novato', + isLoading: false, + }); + } catch (error) { + set({ + error: error instanceof Error ? error.message : 'Error al cargar el progreso', + isLoading: false, + }); + console.error('Error loading progreso:', error); + } + }, + + saveProgreso: async (moduloId: string, ejercicioId: string, puntuacion: number) => { + const moduloNumero = parseInt(moduloId.replace('modulo', ''), 10); + + set({ isLoading: true, error: null }); + + try { + // Guardar en la API + await progresoService.saveProgreso({ + modulo_numero: moduloNumero, + ejercicio_id: ejercicioId, + puntuacion, + completado: true, + }); + + // Actualizar estado local + set((state) => { + const modulo = state.modulos[moduloId] || { + moduloId, + ejercicios: {}, + completado: false, + }; + + const ejercicioExistente = modulo.ejercicios[ejercicioId]; + const esMejorPuntuacion = !ejercicioExistente || puntuacion > ejercicioExistente.puntuacion; + + const nuevoEjercicio: EjercicioProgreso = { + ejercicioId, + completado: true, + puntuacion: esMejorPuntuacion ? puntuacion : ejercicioExistente.puntuacion, + fechaCompletado: new Date().toISOString(), + intentos: (ejercicioExistente?.intentos || 0) + 1, + }; + + const nuevosEjercicios = { + ...modulo.ejercicios, + [ejercicioId]: nuevoEjercicio, + }; + + const moduloActualizado: ModuloProgreso = { + ...modulo, + ejercicios: nuevosEjercicios, + }; + + // Recalcular puntuación total + let nuevaPuntuacionTotal = 0; + Object.values(state.modulos).forEach((mod) => { + if (mod.moduloId !== moduloId) { + Object.values(mod.ejercicios).forEach((ej) => { + if (ej.completado) { + nuevaPuntuacionTotal += ej.puntuacion; + } + }); + } + }); + + // Agregar ejercicios del módulo actual + Object.values(nuevosEjercicios).forEach((ej) => { + if (ej.completado) { + nuevaPuntuacionTotal += ej.puntuacion; + } + }); + + const nuevoNivel = calcularNivel(nuevaPuntuacionTotal); + + return { + modulos: { + ...state.modulos, + [moduloId]: moduloActualizado, + }, + puntuacionTotal: nuevaPuntuacionTotal, + nivel: nuevoNivel, + isLoading: false, + }; + }); + + // Recargar resumen para obtener badges actualizados + const resumen = await progresoService.getResumenProgreso(); + set({ + badges: resumen?.badges ?? [], + nivel: resumen?.nivel ?? 'Novato', + }); + } catch (error) { + set({ + error: error instanceof Error ? error.message : 'Error al guardar el progreso', + isLoading: false, + }); + console.error('Error saving progreso:', error); + throw error; + } + }, + + getProgresoEjercicio: (moduloId: string, ejercicioId: string) => { + const state = get(); + return state.modulos[moduloId]?.ejercicios[ejercicioId]; + }, + + getProgresoModulo: (moduloId: string) => { + const state = get(); + return state.modulos[moduloId]; + }, + + resetProgreso: (moduloId?: string) => { + if (moduloId) { + set((state) => { + const { [moduloId]: _, ...restoModulos } = state.modulos; + + // Recalcular puntuación + let nuevaPuntuacionTotal = 0; + Object.values(restoModulos).forEach((mod) => { + Object.values(mod.ejercicios).forEach((ej) => { + if (ej.completado) { + nuevaPuntuacionTotal += ej.puntuacion; + } + }); + }); + + return { + modulos: restoModulos, + puntuacionTotal: nuevaPuntuacionTotal, + nivel: calcularNivel(nuevaPuntuacionTotal), + }; + }); + } else { + set({ + modulos: {}, + puntuacionTotal: 0, + nivel: 'Novato', + }); + } + }, + + calcularPorcentajeModulo: (moduloId: string, totalEjercicios: number): number => { + const state = get(); + const modulo = state.modulos[moduloId]; + if (!modulo || totalEjercicios === 0) return 0; + + const ejerciciosCompletados = Object.values(modulo.ejercicios).filter( + (ej) => ej.completado + ).length; + + return Math.round((ejerciciosCompletados / totalEjercicios) * 100); + }, + + getBadgesDesbloqueados: () => { + return get().badges.filter(b => b.desbloqueado); + }, + + getBadgesBloqueados: () => { + return get().badges.filter(b => !b.desbloqueado); + }, + + getProgreso: (moduloId: string, ejercicioId: string) => { + const state = get(); + return state.modulos[moduloId]?.ejercicios[ejercicioId]; + }, + }) +); + +export default useProgressStore; diff --git a/frontend/src/types/index.ts b/frontend/src/types/index.ts index 4d92cb0..2ca8603 100644 --- a/frontend/src/types/index.ts +++ b/frontend/src/types/index.ts @@ -14,11 +14,52 @@ export interface Progreso { puntuacion: number; } +export interface ProgresoEjercicio { + ejercicioId: string; + completado: boolean; + puntuacion: number; + fecha: string; +} + +export interface ProgresoModulo { + moduloNumero: number; + ejercicios: ProgresoEjercicio[]; + porcentaje: number; +} + +export interface BadgeCondicion { + tipo: 'ejercicios_completados' | 'puntuacion_total' | 'modulo_completado'; + valor: number; + moduloId?: string; +} + +export interface Badge { + id: string; + titulo: string; + descripcion: string; + icono: string; + desbloqueado: boolean; + requisito: string; + condicion?: BadgeCondicion; + fechaDesbloqueo?: string; +} + +export type NivelUsuario = 'Novato' | 'Aprendiz' | 'Experto' | 'Maestro'; + +export interface ConfiguracionEjercicio { + dificultad: 'facil' | 'medio' | 'dificil'; + tiempoMaximo?: number; + intentosMaximos?: number; + mostrarPistas: boolean; +} + export interface Ejercicio { id: string; titulo: string; descripcion: string; tipo: 'quiz' | 'simulador' | 'ejercicio'; + configuracion?: ConfiguracionEjercicio; + moduloNumero: number; } export interface Modulo { @@ -36,6 +77,16 @@ export interface ModuloProgreso { totalEjercicios: number; } +export interface ResumenProgreso { + totalPuntuacion: number; + ejerciciosCompletados: number; + totalEjercicios: number; + porcentajeGlobal: number; + badges: Badge[]; + nivel: NivelUsuario; + moduloProgreso: ProgresoModulo[]; +} + export interface LoginRequest { email?: string; username?: string;

r~>mP~O&~x<BF{iqu${t!do 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%0Ak z9Tv$X*-1C2a6=J)Y(EfDp>S;!q)a}>_HY@dac@^wsP_fC7r@~o-V1q9# z4T0FTJ{Ghtd}W7}7Lq_en8{^;*wG~b5dqA6tP<)ed_cC5llnKE-o~glvUw}~ zH^ZucVO2S;2>ddI70R@44KWD1SKLr@JbI+ER1#chk9<+&LHrbl^kppdMf^y1n4w@W zsV12{3ZUoDsg5Zp(UN(fPmwHTFG-&3oqk7kZjwE$9W|xAmh%OC4h-r+Pe9<+2Xeni zjI5r$Ln`p(DcmEHRT&T`fGO2oZErD>F8N9r5}!#tXB@Z|b70$W9z)h}PoI9#7cZh< z@$tQU^|X+so4K#UMfPfB?!8({rK6SW2UKFtD_qSl9H=V_@_6~r2-I#a^lM%#s?tK=Oq+3(wi}}c z1Aj zCg&h1T9CK#Hp^ARceM*s@ELku4SKncJ=CDWH#=}v9eFuXo30WiIeq-y#t61=HvZSW z@{C0t@*4uv$$$>-a@St=LJGJ7GA7hMD|;D!d_niB)Np0vu5`8tla zOl!ak94`Go&cHSh`8JA{tfDf zQ>Gl~=O;`@FppVMlAxkLrA0WJ5zOM*OCZL>D*qOigQ<)Tr{@^7@dMl+Xk1pLp0(J= zvftuj<}tD#Wn0gM*uG|IdMRC$NLoJ&cP|4E$$50V6ho7zYHkS4bS{^#7^F98DIQ3B z`$!UY#(w!$(GG?KRP6N6qiN9K{j#LV%EtZp9rzexV>=7W{2CMZzLztGuszZ`rgg@3 zu-dh)>h#KKSXy6H`1ir>=IBY%Rq8yxI6*w!ZQ)rTHD>M=Iss4w-qN5qMHk|GC9fD$ z->B$gVy_R(2$y(irO*Mbl)LqrqP14{E^f-dWZ8h9D#fmjf3+$A`hHMc#}oXPr%d#m$?+q5dv1ciQY9l3K0KfVb71+&?@2*lPWy8w_)budQz{dTd5gRKF~E zTKmU`6^OB767c;Z@#%EUhy zAvPv{Lc-1Bl!K=f(1&>`7?gRV5p974pIss$RKAazNQM`@+^q8kY_rS& zrp}O;q0<6)YHsF4i6Q6m8!KGbQTag~f8v~Y^p8;{UIg}qFHVCeSJE0Br8|aoTzI?I z=l7>mQ7Sh8zrex5*IFnZ`w-;%_!#+i;RH{6#5>~e;!C&M$lXn*Ws+;+jSWDKp@g_Xt7B>fbj6l8n zRiqC$C-zDyr82DO;OLt4*IUIH?lPj0h>jVgFVR4H>8YbJFvPrpbD+rtseJ_k56P9LKd7 zOdu*lV7-aHYP{`M!c2K%D@~r{k3w(-V*jU7Hju-0TB!YP2F?){C3ix7_L53wJmaJD zeY&34=u)a2S<`F?P>FL537?y#`f9nIYN5AoQ|#XpBX#O9igP8^I{Dy_QH!7SP=NpR zjwX%w=o+I6uR8d84-yvv4D7-pSt_yS#Nd>-y|C^?&;PiushC}~1&ty-LvM6^wVv2S zDj~8_PP6#-=FsoNVIJeBeq{Lk`{@j|RfQ<+gjjXLe5_2H81yV$T#+*9?h^!;SU1EC zdJFnD`bTeH>rRR-?AYCEX_DQ(Pm~~U_QE(#^h-?@NHw3A2%ok#V$Lc5>-m^tWrBYn zac9gZnY1s^z9;8MN`xRc2YPit1IBhfi8huM92CAPdzpo!Hoc*KJ0+E$<*@me(9X~M zBX3b$pSxg;C%CC!s>bcgyFzVHOMyLt3`JxDmNSoibGpzxhhEhPsfbVrq8no{%r$J* zi2&Ow+K=yV1Ic{xaoK+sjuYU=f#>^n`r!FxMcZgf1ia@l&;fLqX+Fa1ff~CnK-D69 z^9W3+S|@z4+a7!f9PU8bVtsN84-^t9O{S8!9GefR4kf@pM?34J1%`iqaP-r_6dG30 z2_0(gaW!3gC z=<0U7jbu^#@e+;to@8`CG#~EscZZ)JJ{1nRft?UwYXZUGAwgr)ZlZT^KCg7dl!htV z&%l+xEM~da5yS{C87W-2!5J(3!5GI@9#xJ{1U4Wod{?7r{klr~q9#0cNC~I99n<_& zsr#fOH{V_!kBHL7;<@A4(R077E>_SSMp|31@k{%SaWjF1O#lW8r_aEOQA);!dikM2 zlDc#8){rr(496C}OTgkbkyeMDc(kWoD8Fi>jGC)?zDMYy@=dqJ9qM@`=U%-m;kYiR zWhDv4KA129;+1aPkln;n5Zs(buh)Ak5L0$(h$N`b+UKIZR?<{vUwrW+P~)Y;gaW=? z4|WDYEmCm{v>b}CLM5KywQ5{(F>2TAq7_quw4x*A zCQST~3On6N6&zUey1~%AIq1EiO=2urdPR~{ctu; z9*|&<%vF4(K0@;75bY0~PQobK97O%k_hb+GyEElv=NnnYDx0{x8o)2*ZiSsmUt76W zPGA7>nBI72!^(okGvCygcQEQ2Zvm?n?(*>v6y`5S)>w@?yQzeSBH@9-PVtp1I@GT&T91 z{;^Q~Q4+2gs*3>!!gln(Vv$X&gP@w@%4=g4+SKOe`z3)@LJT2l=K> z0hPx0x2v7#j+57WiRcmSd$bx*P59+`umowPzhATZqYD?|MLhCdx!d9*8*k!#F2e56 zJi_tJk0p6LSfLNz3qASH=d}=&u|>%b7sNhaEHlPyM>!%=Ws-olK&ELQbePfF+fPix zdY7}!nugCwn&7C{oGXD$!38}Vk~@-nd`Hciv=IC4A&h-UhLH)-K`y1*5XoHFxIk+| zdnYO^CbW;Yw0#PFhJnVr7Rm67R?Nr_L;h0zf=TX|Y>-KAh=FdTnryTiDHc{X|CcNh z6>s#^IcUYbS>OUI%lc#ca`6>EHWpM3xnbl=t*rFt2#l^w0X?S!qhj&F)Q$~4Y{>c9 z69=mw;(_I{{gyDaLtt*LGa!G($TMMkl?k{9zQ?2r9hKbmm*s7~5}DjqF=F+o z6R$eX0Oudal46O+rkuF+A{8p(NA=fHWFj|69hq?nx&}~v%GWs4c*?hN�F4S31FZ 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 literal 0 HcmV?d00001 diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 9f1d0f9..1733eb4 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,3 +1,4 @@ +import { useEffect } from 'react'; import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'; import { useAuthStore } from './stores/authStore'; import { Login } from './pages/Login'; @@ -5,6 +6,7 @@ import { Dashboard } from './pages/Dashboard'; import { Modulos } from './pages/Modulos'; import { Modulo } from './pages/Modulo'; import { AdminPanel } from './pages/admin/AdminPanel'; +import { RecursosPage } from './pages/Recursos'; function ProtectedRoute({ children }: { children: React.ReactNode }) { const { isAuthenticated, isLoading } = useAuthStore(); @@ -25,6 +27,12 @@ function ProtectedRoute({ children }: { children: React.ReactNode }) { } function App() { + const { checkAuth } = useAuthStore(); + + useEffect(() => { + checkAuth(); + }, [checkAuth]); + return ( @@ -53,6 +61,38 @@ function App() { } /> + + + + } + /> + + + + } + /> + + + + } + /> + + + + } + /> } /> + + + + } + /> } /> diff --git a/frontend/src/components/exercises/EjercicioWrapper.tsx b/frontend/src/components/exercises/EjercicioWrapper.tsx new file mode 100644 index 0000000..b7cbddb --- /dev/null +++ b/frontend/src/components/exercises/EjercicioWrapper.tsx @@ -0,0 +1,184 @@ +import React, { useState, isValidElement } from 'react'; +import { motion, AnimatePresence } from 'framer-motion'; +import { Card } from '../ui/Card'; +import { Button } from '../ui/Button'; +import { Trophy, Star, RotateCcw, Home, ArrowRight, CheckCircle } from 'lucide-react'; +import { useEjercicioProgreso } from '../../hooks/useEjercicioProgreso'; + +interface EjercicioWrapperProps { + moduloId: string; + ejercicioId: string; + titulo: string; + descripcion: string; + puntosMaximos: number; + onComplete?: (puntuacion?: number) => void; + onRetry?: () => void; + onExit?: () => void; + children: React.ReactNode; +} + +export function EjercicioWrapper({ + moduloId, + ejercicioId, + titulo, + descripcion, + puntosMaximos, + onComplete, + onRetry, + onExit, + children, +}: EjercicioWrapperProps) { + const { puntuacionAnterior, intentos, guardarProgreso } = useEjercicioProgreso({ + moduloId, + ejercicioId, + onComplete, + }); + + const [mostrarCompletado, setMostrarCompletado] = useState(false); + const [puntuacionActual, setPuntuacionActual] = useState(0); + + const handleCompletar = (puntuacion: number) => { + guardarProgreso(puntuacion); + setPuntuacionActual(puntuacion); + setMostrarCompletado(true); + }; + + const esMejorPuntuacion = puntuacionAnterior !== undefined && puntuacionActual > puntuacionAnterior; + + // Pasar handleCompletar a los hijos + const childrenWithProps = isValidElement(children) + ? React.cloneElement(children as React.ReactElement, { onCompletar: handleCompletar }) + : children; + + return ( +