import { useState, useMemo } from 'react'; import { Card, CardHeader } from '../../ui/Card'; import { Button } from '../../ui/Button'; import { Input } from '../../ui/Input'; import { CheckCircle, ArrowUp, RotateCcw, AlertTriangle } from 'lucide-react'; interface DiseconomiasEscalaProps { ejercicioId: string; onComplete?: (puntuacion: number) => void; } interface RangoEscala { min: number; max: number; tipo: 'economias' | 'constante' | 'diseconomias'; descripcion: string; } export function DiseconomiasEscala({ ejercicioId: _ejercicioId, onComplete }: DiseconomiasEscalaProps) { const rangos: RangoEscala[] = [ { min: 0, max: 500, tipo: 'economias', descripcion: 'Economías de escala' }, { min: 500, max: 1000, tipo: 'constante', descripcion: 'Rendimientos constantes a escala' }, { min: 1000, max: 2000, tipo: 'diseconomias', descripcion: 'Diseconomías de escala' }, ]; const calcularCMe = (q: number): number => { if (q <= 500) { return 50 - (q / 500) * 20; } else if (q <= 1000) { return 30; } else { return 30 + ((q - 1000) / 1000) * 25; } }; const [cantidad, setCantidad] = useState(600); const [respuestas, setRespuestas] = useState({ cme: '', ct: '', rango: '', }); const [validado, setValidado] = useState(false); const [errores, setErrores] = useState([]); const cmeActual = useMemo(() => calcularCMe(cantidad), [cantidad]); const ctActual = useMemo(() => cmeActual * cantidad, [cmeActual, cantidad]); const rangoActual = useMemo(() => { return rangos.find(r => cantidad >= r.min && cantidad < r.max) || rangos[2]; }, [cantidad]); const datosGrafico = useMemo(() => { const puntos = []; for (let q = 100; q <= 2000; q += 100) { puntos.push({ q, cme: calcularCMe(q) }); } return puntos; }, []); const handleRespuestaChange = (campo: string, valor: string) => { setRespuestas(prev => ({ ...prev, [campo]: valor })); setValidado(false); }; const validarRespuestas = () => { const nuevosErrores: string[] = []; if (Math.abs(parseFloat(respuestas.cme) - cmeActual) > 0.5) { nuevosErrores.push(`El CMe no es correcto. Debería ser aproximadamente $${cmeActual.toFixed(2)}`); } if (Math.abs(parseFloat(respuestas.ct) - ctActual) > 50) { nuevosErrores.push(`El CT no es correcto. Recuerda: CT = CMe × Q`); } if (respuestas.rango.toLowerCase() !== rangoActual.tipo.toLowerCase()) { nuevosErrores.push(`El rango no es correcto. Estás en la zona de ${rangoActual.descripcion}`); } setErrores(nuevosErrores); setValidado(true); if (nuevosErrores.length === 0 && onComplete) { onComplete(100); } }; const reiniciar = () => { setCantidad(600); setRespuestas({ cme: '', ct: '', rango: '' }); setValidado(false); setErrores([]); }; const maxCMe = Math.max(...datosGrafico.map(d => d.cme)); const escalaY = 100 / maxCMe; return (
Concepto

Las deseconomías de escala ocurren cuando la empresa crece tanto que los costos de coordinación, supervisión y comunición aumentan. El CMe comienza a subir después de alcanzar el punto óptimo de escala.

{ setCantidad(parseInt(e.target.value)); setValidado(false); }} className="flex-1 h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer" /> {cantidad}
Cantidad (Q) CMe ($) {[500, 1000, 1500, 2000].map((q) => ( {q} ))} {[10, 20, 30, 40, 50].map((val) => ( {val} ))} Economías Constantes Diseconomías `${40 + (d.q / 2000) * 300},${160 - d.cme * escalaY * 2}`).join(' L ')}`} fill="none" stroke="#7c3aed" strokeWidth="3" />

Costo Medio

${cmeActual.toFixed(2)}

Costo Total

${ctActual.toLocaleString()}

Zona

{rangoActual.descripcion}

Responde para Q = {cantidad}:

handleRespuestaChange('cme', e.target.value)} className="w-full" placeholder="Ej: 30.00" />
handleRespuestaChange('ct', e.target.value)} className="w-full" placeholder="CMe × Q" />
handleRespuestaChange('rango', e.target.value)} className="w-full" placeholder="economias" />
{validado && errores.length === 0 && (
¡Correcto! Observa cómo el CMe cambia según la escala
)} {validado && errores.length > 0 && (

Revisa tus respuestas:

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

Causas de las Diseconomías de Escala:

  • Problemas de coordinación: Más difícil coordinar muchos departamentos
  • Burocracia: Decisiones lentas y procesos administrativos complejos
  • Problemas de comunicación: Información se distorsiona en cadenas largas
  • Desmotivación: Trabajadores se sienten insignificantes en empresas grandes
); } export default DiseconomiasEscala;