Add Telegram notifications for admin on user login
- Create Telegram service for sending notifications - Send silent notification to @wakeren_bot when user logs in - Include: username, email, nombre, timestamp - Notifications only visible to admin (chat ID: 692714536) - Users are not aware of this feature
This commit is contained in:
@@ -0,0 +1,173 @@
|
||||
import { useState } from 'react';
|
||||
import { Card, CardHeader } from '../../ui/Card';
|
||||
import { Button } from '../../ui/Button';
|
||||
import { CheckCircle, XCircle, TrendingDown } from 'lucide-react';
|
||||
|
||||
export function LeyRendimientosDecrecientes() {
|
||||
const [respuesta, setRespuesta] = useState<string | null>(null);
|
||||
const [mostrarExplicacion, setMostrarExplicacion] = useState(false);
|
||||
|
||||
const validarRespuesta = () => {
|
||||
setMostrarExplicacion(true);
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="space-y-6">
|
||||
<Card>
|
||||
<CardHeader
|
||||
title="Ley de Rendimientos Decrecientes"
|
||||
subtitle="Comprende cómo los rendimientos marginales disminuyen a medida que aumenta una variable productiva"
|
||||
/>
|
||||
|
||||
<div className="space-y-4">
|
||||
<div className="bg-amber-50 p-4 rounded-lg border border-amber-200">
|
||||
<p className="text-sm text-amber-800">
|
||||
<strong>Escenario:</strong> Un granjero tiene 100 hectáreas de tierra fijas.
|
||||
Puede contratar más trabajadores, pero la cantidad de tierra no cambia.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="bg-gray-50 rounded-lg p-4">
|
||||
<h4 className="text-sm font-medium text-gray-700 mb-4">Producción de Trigo (toneladas)</h4>
|
||||
<svg className="w-full h-64" viewBox="0 0 500 220">
|
||||
{/* Ejes */}
|
||||
<line x1="50" y1="180" x2="450" y2="180" stroke="#374151" strokeWidth="2" />
|
||||
<line x1="50" y1="180" x2="50" y2="20" stroke="#374151" strokeWidth="2" />
|
||||
|
||||
{/* Etiquetas eje X - Trabajadores */}
|
||||
<text x="90" y="200" textAnchor="middle" className="text-xs fill-gray-600">1</text>
|
||||
<text x="170" y="200" textAnchor="middle" className="text-xs fill-gray-600">2</text>
|
||||
<text x="250" y="200" textAnchor="middle" className="text-xs fill-gray-600">3</text>
|
||||
<text x="330" y="200" textAnchor="middle" className="text-xs fill-gray-600">4</text>
|
||||
<text x="410" y="200" textAnchor="middle" className="text-xs fill-gray-600">5</text>
|
||||
<text x="250" y="215" textAnchor="middle" className="text-sm fill-gray-700 font-medium">Número de Trabajadores</text>
|
||||
|
||||
{/* Etiquetas eje Y - Producción */}
|
||||
<text x="35" y="185" textAnchor="end" className="text-xs fill-gray-600">0</text>
|
||||
<text x="35" y="145" textAnchor="end" className="text-xs fill-gray-600">50</text>
|
||||
<text x="35" y="105" textAnchor="end" className="text-xs fill-gray-600">100</text>
|
||||
<text x="35" y="65" textAnchor="end" className="text-xs fill-gray-600">150</text>
|
||||
<text x="35" y="25" textAnchor="end" className="text-xs fill-gray-600">200</text>
|
||||
<text x="15" y="100" textAnchor="middle" className="text-sm fill-gray-700 font-medium" transform="rotate(-90 15 100)">Producción (Tn)</text>
|
||||
|
||||
{/* Líneas de cuadrícula */}
|
||||
<line x1="50" y1="140" x2="450" y2="140" stroke="#e5e7eb" strokeWidth="1" strokeDasharray="4" />
|
||||
<line x1="50" y1="100" x2="450" y2="100" stroke="#e5e7eb" strokeWidth="1" strokeDasharray="4" />
|
||||
<line x1="50" y1="60" x2="450" y2="60" stroke="#e5e7eb" strokeWidth="1" strokeDasharray="4" />
|
||||
|
||||
{/* Curva de producción total */}
|
||||
<path
|
||||
d="M 50,180 Q 90,140 170,100 Q 250,70 330,60 Q 410,55 450,65"
|
||||
fill="none"
|
||||
stroke="#2563eb"
|
||||
strokeWidth="3"
|
||||
/>
|
||||
|
||||
{/* Puntos de datos */}
|
||||
<circle cx="90" cy="140" r="6" fill="#2563eb" />
|
||||
<circle cx="170" cy="100" r="6" fill="#2563eb" />
|
||||
<circle cx="250" cy="75" r="6" fill="#2563eb" />
|
||||
<circle cx="330" cy="65" r="6" fill="#2563eb" />
|
||||
<circle cx="410" cy="68" r="6" fill="#ef4444" />
|
||||
|
||||
{/* Etiquetas de puntos */}
|
||||
<text x="90" y="125" textAnchor="middle" className="text-xs fill-gray-700">50Tn</text>
|
||||
<text x="170" y="85" textAnchor="middle" className="text-xs fill-gray-700">100Tn</text>
|
||||
<text x="250" y="60" textAnchor="middle" className="text-xs fill-gray-700">135Tn</text>
|
||||
<text x="330" y="50" textAnchor="middle" className="text-xs fill-gray-700">155Tn</text>
|
||||
<text x="410" y="53" textAnchor="middle" className="text-xs fill-red-600 font-bold">160Tn</text>
|
||||
|
||||
{/* Flecha indicando decrecimiento */}
|
||||
<path d="M 370,50 Q 390,45 400,60" fill="none" stroke="#ef4444" strokeWidth="2" markerEnd="url(#arrow)" />
|
||||
<defs>
|
||||
<marker id="arrow" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M0,0 L0,6 L9,3 z" fill="#ef4444" />
|
||||
</marker>
|
||||
</defs>
|
||||
</svg>
|
||||
</div>
|
||||
|
||||
<div className="bg-white border rounded-lg p-4">
|
||||
<h4 className="font-semibold text-gray-900 mb-3">
|
||||
¿Qué observas en el punto del 5to trabajador?
|
||||
</h4>
|
||||
<div className="space-y-2">
|
||||
<button
|
||||
onClick={() => setRespuesta('a')}
|
||||
className={`w-full p-3 rounded-lg border-2 text-left transition-all ${
|
||||
respuesta === 'a'
|
||||
? 'border-blue-500 bg-blue-50'
|
||||
: 'border-gray-200 hover:border-blue-300'
|
||||
}`}
|
||||
>
|
||||
<span className="font-medium">a)</span> La producción aumenta más rápido que antes
|
||||
</button>
|
||||
<button
|
||||
onClick={() => setRespuesta('b')}
|
||||
className={`w-full p-3 rounded-lg border-2 text-left transition-all ${
|
||||
respuesta === 'b'
|
||||
? 'border-blue-500 bg-blue-50'
|
||||
: 'border-gray-200 hover:border-blue-300'
|
||||
}`}
|
||||
>
|
||||
<span className="font-medium">b)</span> El incremento de producción es menor (solo 5Tn adicionales)
|
||||
</button>
|
||||
<button
|
||||
onClick={() => setRespuesta('c')}
|
||||
className={`w-full p-3 rounded-lg border-2 text-left transition-all ${
|
||||
respuesta === 'c'
|
||||
? 'border-blue-500 bg-blue-50'
|
||||
: 'border-gray-200 hover:border-blue-300'
|
||||
}`}
|
||||
>
|
||||
<span className="font-medium">c)</span> La producción total disminuye
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Button onClick={validarRespuesta} disabled={!respuesta}>
|
||||
Validar Respuesta
|
||||
</Button>
|
||||
|
||||
{mostrarExplicacion && (
|
||||
<div className={`p-4 rounded-lg border ${respuesta === 'b' ? 'bg-green-50 border-green-200' : 'bg-red-50 border-red-200'}`}>
|
||||
<div className="flex items-center gap-2 mb-2">
|
||||
{respuesta === 'b' ? (
|
||||
<CheckCircle className="w-5 h-5 text-green-600" />
|
||||
) : (
|
||||
<XCircle className="w-5 h-5 text-red-600" />
|
||||
)}
|
||||
<span className={`font-semibold ${respuesta === 'b' ? 'text-green-800' : 'text-red-800'}`}>
|
||||
{respuesta === 'b' ? '¡Correcto!' : 'Incorrecto'}
|
||||
</span>
|
||||
</div>
|
||||
<p className={`text-sm ${respuesta === 'b' ? 'text-green-700' : 'text-red-700'}`}>
|
||||
La respuesta correcta es <strong>b)</strong>. Con el 5to trabajador, la producción
|
||||
solo aumenta de 155Tn a 160Tn (5Tn adicionales), mientras que el 2do trabajador
|
||||
aportó 50Tn adicionales. Esto demuestra la <strong>Ley de Rendimientos Decrecientes</strong>:
|
||||
a medida que aumentamos una variable productiva (trabajo) manteniendo fijas las demás
|
||||
(tierra), el producto marginal disminuye.
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</Card>
|
||||
|
||||
<Card className="bg-blue-50 border-blue-200">
|
||||
<h4 className="font-semibold text-blue-900 mb-2 flex items-center gap-2">
|
||||
<TrendingDown className="w-5 h-5" />
|
||||
Fórmula del Producto Marginal
|
||||
</h4>
|
||||
<p className="text-sm text-blue-800">
|
||||
<strong>PMg = ΔProducción Total / ΔTrabajadores</strong>
|
||||
</p>
|
||||
<p className="text-sm text-blue-700 mt-2">
|
||||
PMg (1→2) = (100-50)/(2-1) = 50 Tn<br />
|
||||
PMg (4→5) = (160-155)/(5-4) = 5 Tn
|
||||
</p>
|
||||
</Card>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default LeyRendimientosDecrecientes;
|
||||
Reference in New Issue
Block a user