@extends('layouts.app') @section('title', 'Аналитика') {{-- Ports app/Views/analytics/index.php (legacy) — see the Phase 49 plan. The ЕНТ score entry form uses Laravel's own $errors/old() — confirmed safe since the legacy view genuinely repopulates old input here (via Old::get()/Old::hasError()/Old::error()). --}} @push('styles') @endpush @section('content')

Аналитика

@php $monthNames = ['Январь','Февраль','Март','Апрель','Май','Июнь', 'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь']; @endphp

Период применяется к метрикам за месяц. Отдельные показатели помечены как «на данный момент».

@if ($overview)

Обзор

Активных учеников (сейчас)
{{ $overview['active_students'] }}
Активных на дату
{{ $overview['active_students_asof'] }}
Средняя заполняемость группы
{{ $overview['avg_group_size'] }}
Ср. предметов на ученика
{{ $overview['avg_disciplines'] }}
Загрузка мощностей
{{ $overview['capacity_utilization'] }}%
@isset($overview['overdue_count'])
Просрочки (сейчас)
{{ $overview['overdue_count'] }}
@endisset
@endif @if ($trends)

Тренды за 6 месяцев

Активных учеников
@isset($trends['revenue'])
Выручка, ₸
@endisset
@endif @if ($atRisk && (!empty($atRisk['overdue']) || !empty($atRisk['low_nps']))) @php $atRiskCount = count($atRisk['overdue']) + count($atRisk['low_nps']); @endphp

Ученики группы риска

Ученики группы риска
{{ $atRiskCount }}
Показать список →
@endif @if ($payments)

Оплаты и выручка

Средний чек новых учеников
{{ number_format($payments['new_student_arpu'], 0, ',', ' ') }} ₸
{{ $payments['new_student_count'] }} новых оплат
@isset($payments['overall_arpu'])
Общий средний чек
{{ number_format($payments['overall_arpu'], 0, ',', ' ') }} ₸
@endisset
% продления после 1-й оплаты
{{ $payments['renewal_after_first']['rate'] }}%
{{ $payments['renewal_after_first']['renewed'] }} из {{ $payments['renewal_after_first']['first_time_payers'] }}
@isset($payments['period_retention'])
% продления в целом
{{ $payments['period_retention']['rate'] }}%
{{ $payments['period_retention']['retained'] }} из {{ $payments['period_retention']['prev_payers'] }} (пред. период)
@endisset @isset($payments['charges_total'])
Начисления за месяц
{{ number_format($payments['charges_total'], 0, ',', ' ') }} ₸
@endisset
@endif @if ($finance)

Финансы

Чистая прибыль за месяц
{{ number_format($finance['net_profit'], 0, ',', ' ') }} ₸
CAC (стоимость клиента)
{{ number_format($finance['cac'], 0, ',', ' ') }} ₸
маркетинг {{ number_format($finance['marketing_spend'], 0, ',', ' ') }} ₸
Доли расходов по категориям
@if (empty($finance['expenses_by_category']))

Нет расходов за этот период.

@else @endif
Доли выручки по дисциплинам
@if (empty($finance['revenue_by_discipline']))

Нет начислений за этот период.

@else @endif
@endif @if ($teachers)

Преподаватели, замены, кураторы

@isset($teachers['substitutions_count'])
Замен за период
{{ $teachers['substitutions_count'] }}
@endisset
Ср. прогресс по ЕНТ
{{ ($teachers['ent_progress']['avg_delta'] >= 0 ? '+' : '') . $teachers['ent_progress']['avg_delta'] }}
{{ $teachers['ent_progress']['count'] }} учеников с 2+ результатами
NPS (последний)
{{ $teachers['nps_latest'] }}
Выполнение задач куратором
@php $cc = $teachers['curator_completion']; $ccOverall = $cc['overall'] ?? $cc; @endphp
{{ $ccOverall['rate'] }}%
{{ $ccOverall['resolved'] }} из {{ $ccOverall['total'] }}
@isset($teachers['total_salary'])
Зарплата за месяц
{{ number_format($teachers['total_salary'], 0, ',', ' ') }} ₸
по преподавателям →
@endisset
@if (!empty($teachers['substitutions_by_teacher']))
Замены по преподавателям
@foreach ($teachers['substitutions_by_teacher'] as $row) @endforeach
ПреподавательЗаменилЗаменился
{{ $row['teacher_name'] }} {{ $row['covered_for_others'] }} {{ $row['was_covered'] }}
@endif @if (!empty($teachers['performance']))
Показатели учителей
@foreach ($teachers['performance'] as $row) @endforeach
Учитель Уроков Часы Заработок Выручка группы Посещаемость Ср. ДЗ Ср. КР Замены
{{ $row['teacher_name'] }} {{ (int) $row['lessons_count'] }} {{ number_format((float) $row['hours'], 1, ',', ' ') }} {{ number_format((float) $row['earnings'], 0, ',', ' ') }} ₸ {{ number_format((float) $row['revenue'], 0, ',', ' ') }} ₸ {{ $row['attendance_pct'] !== null ? (int) $row['attendance_pct'] . '%' : '—' }} {{ $row['avg_dz'] ?? '—' }} {{ $row['avg_kr'] ?? '—' }} {{ $row['covered_for_others'] }} / {{ $row['was_covered'] }}
@endif @if (isset($cc['by_curator']) && !empty($cc['by_curator']))
Выполнение задач по кураторам
@foreach ($cc['by_curator'] as $row) @endforeach
КураторВыполненоВсего%
{{ $row['curator_name'] }} {{ $row['resolved'] }} {{ $row['total'] }} {{ $row['rate'] }}%
@endif @if (isset($teachers['nps_detail']) && !empty($teachers['nps_detail']))
NPS — детализация
@foreach ($teachers['nps_detail'] as $row) @endforeach
УченикОценкаКомментарийДата
{{ $row['first_name'] . ' ' . $row['last_name'] }} {{ (int) $row['score'] }} {{ $row['comment'] ?? '—' }} {{ $row['created_at'] }}
@endif @endif
@endsection @push('scripts') @if ($trends) @endif @if ($finance && !empty($finance['expenses_by_category'])) @endif @if ($finance && !empty($finance['revenue_by_discipline'])) @endif @endpush