@php $iconAct = [ 'consulta' => ['c' => 'var(--sp-cyan)', 'label' => 'Cargó una consulta', 'svg' => ''], 'respuesta' => ['c' => 'var(--sp-green)', 'label' => 'Recibió respuesta', 'svg' => ''], 'evento' => ['c' => 'var(--sp-blue)', 'label' => 'Abrió un evento', 'svg' => ''], 'comunicado' => ['c' => 'var(--sp-orange)', 'label' => 'Leyó un comunicado', 'svg' => ''], ]; $activas = max(1, $kpis['mutualesActivas']); $maxTema = max(1, $consultas['porTema']->max('total') ?? 1); @endphp

Federación · Solo gestión

Estadísticas

Actividad de las mutuales, alcance de los eventos y estado de las consultas.

{{-- KPIs --}}
{{ $kpis['mutualesActivas'] }}
Mutuales activas de {{ $kpis['mutualesTotal'] }}
{{ $kpis['consultasPendientes'] }}
Consultas pendientes @if ($kpis['pendientesViejas']) · {{ $kpis['pendientesViejas'] }} hace +7 días @endif
{{ $kpis['diasPromedioRespuesta'] !== null ? number_format($kpis['diasPromedioRespuesta'], 1, ',', '.') : '—' }}
Días prom. de respuesta
{{ $kpis['eventosPublicados'] }}
Eventos publicados
{{-- Alcance de eventos --}}

Alcance de los eventos

Cuántas mutuales abrieron cada evento (de {{ $kpis['mutualesActivas'] }} activas).

@forelse ($alcance as $e)
{{ $e->titulo }} {{ $e->vistas_count }}/{{ $kpis['mutualesActivas'] }}
@empty

Todavía no hay eventos publicados.

@endforelse
{{-- Consultas --}}

Consultas

Pendientes vs. respondidas.

{{ $consultas['porcentajeRespondidas'] }}%
Respondidas {{ $consultas['respondidas'] }}
Pendientes {{ $consultas['pendientes'] }}
@foreach ($consultas['porTema'] as $t)
{{ $t->tema }} {{ $t->total }}
@endforeach
{{-- Actividad por mutual --}}

Actividad por mutual

El registro de lo que hizo cada mutual, con los datos que ya guarda el sistema.

@forelse ($actividad as $item) @php $a = $iconAct[$item['tipo']]; @endphp
{!! $a['svg'] !!} {{ $a['label'] }}

{{ $item['titulo'] }}

@empty

Esta mutual todavía no registra actividad.

@endforelse
{{-- Participación --}}

Participación

Quién participa y quién no aparece.

⚠ Sin actividad en 30 días

@if ($sinActividad->isEmpty())

Todas las mutuales activas registraron actividad. 🎉

@else
@foreach ($sinActividad->take(6) as $m) {{ $m->nombre }} @endforeach @if ($sinActividad->count() > 6) +{{ $sinActividad->count() - 6 }} más @endif
@endif

Mutuales más activas

@forelse ($ranking as $i => $fila)
{{ $i + 1 }} {{ $fila['mutual']->nombre }} {{ $fila['acciones'] }} {{ $fila['acciones'] == 1 ? 'acción' : 'acciones' }}
@empty

Sin actividad registrada aún.

@endforelse
{{-- Convenios --}}

Convenios más adheridos

Cuántas mutuales adhirió cada convenio.

@php $maxConv = max(1, $convenios->max('mutuales_count')); @endphp @forelse ($convenios as $cv)
{{ $cv->titulo }} {{ $cv->mutuales_count }}
@empty

Todavía no hay convenios publicados.

@endforelse

Adhesiones por mes

Evolución de las adhesiones a convenios.

@php $maxAdh = max(1, collect($adhesionesPorMes)->max('total')); @endphp
@foreach ($adhesionesPorMes as $a)
{{ $a['total'] }}
{{ $a['mes'] }}
@endforeach
{{-- Mutuales por tipo --}}

Mutuales por tipo

Clasificación de las mutuales activas.

@php $maxTipo = max(1, collect($mutualesPorTipo)->max('total')); @endphp @foreach ($mutualesPorTipo as $t)
{{ $t['label'] }} {{ $t['total'] }}
@endforeach
{{-- Avance por servicio + punto de equilibrio --}}

Avance por servicio

Adhesiones, recaudación estimada y punto de equilibrio entre lo que recauda la Federación y lo que paga por cada servicio.

@forelse ($avanceServicios as $s) @empty @endforelse
Servicio Adheridas Precio Recauda Paga Fed. Resultado Punto de equilibrio
{{ $s['titulo'] }}
{{ $s['modalidad'] === 'mensual' ? 'Mensual' : 'Única vez' }}
{{ $s['adheridos'] }} {{ $s['precio'] !== null ? '$'.number_format($s['precio'], 2, ',', '.') : '—' }} {{ $s['recaudacion'] !== null ? '$'.number_format($s['recaudacion'], 2, ',', '.') : '—' }} {{ $s['costoTotal'] !== null ? '$'.number_format($s['costoTotal'], 2, ',', '.') : '—' }} {{ $s['resultado'] !== null ? '$'.number_format($s['resultado'], 2, ',', '.') : '—' }} @if ($s['equilibrio']) @php $eq = $s['equilibrio']; $pct = min(100, (int) round($s['adheridos'] / max(1, $eq['necesarias']) * 100)); @endphp @if ($eq['alcanzado']) ✓ Alcanzado
{{ $s['adheridos'] }}/{{ $eq['necesarias'] }} necesarias
@else
Faltan {{ $eq['faltan'] }} de {{ $eq['necesarias'] }}
@endif @elseif ($s['margenUnitario'] !== null) Margen ${{ number_format($s['margenUnitario'], 2, ',', '.') }} / mutual @else Cargar precio y costo @endif
Sin servicios publicados.
{{-- Recaudación por escala de cuota --}}

Cuota societaria por escala

Mutuales activas y recaudación mensual estimada de la cuota base, según la escala de socios.

@foreach ($recaudacionEscala['escalas'] as $e) @endforeach
Escala (socios)Cuota base MutualesRecaudación mensual
{{ $e['etiqueta'] }} ${{ number_format($e['importe'], 2, ',', '.') }} {{ $e['mutuales'] }} ${{ number_format($e['recaudacion'], 2, ',', '.') }}
Total mensual estimado {{ collect($recaudacionEscala['escalas'])->sum('mutuales') }} ${{ number_format($recaudacionEscala['totalMensual'], 2, ',', '.') }}
@if ($recaudacionEscala['sinSocios'] > 0) {{ $recaudacionEscala['sinSocios'] }} mutual(es) activas sin cantidad de socios cargada (usan el default, no entran en el cálculo por escala). @endif @if ($recaudacionEscala['conOverride'] > 0) {{ $recaudacionEscala['conOverride'] }} mutual(es) con cuota base manual propia (no entran en la escala). @endif