import React, { useState, useEffect } from 'react'; import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, PieChart, Pie, Cell } from 'recharts'; import { Edit3, Calculator, Zap, TrendingUp, AlertTriangle, CheckCircle, Settings } from 'lucide-react'; const SimuladorPartners = () => { // Estados principais const [tarifaKwh, setTarifaKwh] = useState(0.72); const [qtdUCs, setQtdUCs] = useState(11); const [showConfig, setShowConfig] = useState(false); // Dados iniciais baseados na imagem fornecida (valores em MWh/ano) const [ucsData, setUcsData] = useState([ { id: 1, geracao: 5.06, consumo: 4.8, nome: 'UC 1' }, { id: 2, geracao: 21.583, consumo: 22.1, nome: 'UC 2' }, { id: 3, geracao: 51.568, consumo: 49.2, nome: 'UC 3' }, { id: 4, geracao: 29.381, consumo: 31.5, nome: 'UC 4' }, { id: 5, geracao: 34.505, consumo: 36.8, nome: 'UC 5' }, { id: 6, geracao: 0.5, consumo: 2.1, nome: 'UC 6' }, { id: 7, geracao: 1.152, consumo: 1.8, nome: 'UC 7' }, { id: 8, geracao: 34.505, consumo: 32.9, nome: 'UC 8' }, { id: 9, geracao: 9.231, consumo: 8.8, nome: 'UC 9' }, { id: 10, geracao: 169.272, consumo: 165.5, nome: 'UC 10' }, { id: 11, geracao: 270.259, consumo: 268.1, nome: 'UC 11' } ]); // Cálculos dinâmicos const [simulacao, setSimulacao] = useState({ semGestao: { desperdicioMwh: 0, desperdicioReais: 0, multas: 0 }, comPartners: { economia: 0, aproveitamento: 100 } }); // Cores para os gráficos const cores = { sobra: '#e74c3c', falta: '#f39c12', equilibrio: '#27ae60', otimizado: '#27ae60' }; // Função para calcular simulação useEffect(() => { const calcularSimulacao = () => { let totalDesperdicio = 0; let totalSobra = 0; let totalFalta = 0; ucsData.forEach(uc => { const balanco = uc.geracao - uc.consumo; if (balanco > 0) { totalSobra += balanco; } else if (balanco < 0) { totalFalta += Math.abs(balanco); } }); // Desperdício = menor valor entre sobra e falta (não pode ser compensado) totalDesperdicio = Math.min(totalSobra, totalFalta); const desperdicioReais = totalDesperdicio * 1000 * tarifaKwh; // Conversão MWh para kWh setSimulacao({ semGestao: { desperdicioMwh: totalDesperdicio, desperdicioReais: desperdicioReais, multas: desperdicioReais * 0.1 // Estimativa de 10% em multas }, comPartners: { economia: desperdicioReais, aproveitamento: 100 } }); }; calcularSimulacao(); }, [ucsData, tarifaKwh]); // Preparar dados para o gráfico const dadosGrafico = ucsData.map(uc => { const balanco = uc.geracao - uc.consumo; return { nome: uc.nome, geracao: uc.geracao, consumo: uc.consumo, balanco: balanco, status: balanco > 0.5 ? 'Sobra' : balanco < -0.5 ? 'Falta' : 'Equilibrio', cor: balanco > 0.5 ? cores.sobra : balanco < -0.5 ? cores.falta : cores.equilibrio }; }); // Função para atualizar UC const atualizarUC = (id, campo, valor) => { setUcsData(prev => prev.map(uc => uc.id === id ? { ...uc, [campo]: parseFloat(valor) || 0 } : uc )); }; // Função para adicionar UC const adicionarUC = () => { const novoId = Math.max(...ucsData.map(uc => uc.id)) + 1; setUcsData(prev => [...prev, { id: novoId, geracao: 10, consumo: 10, nome: `UC ${novoId}` }]); setQtdUCs(prev => prev + 1); }; // Função para remover UC const removerUC = (id) => { if (ucsData.length > 1) { setUcsData(prev => prev.filter(uc => uc.id !== id)); setQtdUCs(prev => prev - 1); } }; return (
{qtdUCs} Unidades Consumidoras • R$ {tarifaKwh.toFixed(2)}/kWh
| UC | Geração (MWh/ano) | Consumo (MWh/ano) | Balanço | Status | Ações |
|---|---|---|---|---|---|
| {uc.nome} | atualizarUC(uc.id, 'geracao', e.target.value)} className="w-full border border-gray-300 rounded px-2 py-1 text-center focus:ring-2 focus:ring-blue-500" /> | atualizarUC(uc.id, 'consumo', e.target.value)} className="w-full border border-gray-300 rounded px-2 py-1 text-center focus:ring-2 focus:ring-blue-500" /> | {balanco.toFixed(2)} | {status} {Math.abs(balanco).toFixed(1)} MWh |
Simulador interativo - Ajuste os valores para ver o impacto da gestão Partners em tempo real