{{-- Licensor (AGS) portfolio dashboard — whole-system book of business. ATTAINMENT (continuous Maxile/seat data) is surfaced as on-track / close / at-risk. The "Certified (verified)" panel reads ONLY the certifications table and is NEVER derived from Maxile. --}} @php($d = $this->getData()) @php($k = $d['kpis']) @php($att = $d['attainment'])

AGS Math Tutor — Platform portfolio

Whole-system · attainment + seat data
{{-- ── Portfolio KPIs ────────────────────────────────────────────────── --}}
@php($tiles = [ ['Organisations', $k['active_orgs'], null], ['Seats sold', $k['seats_sold'], null], ['Assigned', $k['seats_assigned'], 'primary'], ['Active 14d', $k['seats_active'], 'primary'], ['Utilisation', $k['util_pct'] . '%', $k['util_pct'] < 40 ? 'danger' : 'primary'], ['Students', $k['students_total'], null], ['Teachers', $k['teachers_total'], null], ['Renewals ≤30d', $k['renewals_due'], $k['renewals_due'] > 0 ? 'danger' : null], ]) @foreach ($tiles as [$label, $value, $tone])
$tone === 'danger', 'border-gray-200 dark:border-gray-700' => $tone !== 'danger', ])> {{ $label }} $tone === 'primary', 'text-danger-700' => $tone === 'danger', 'text-gray-900 dark:text-white' => $tone === null, ])>{{ $value }}
@endforeach
Seat funnel: {{ $k['seats_sold'] }} sold → {{ $k['seats_assigned'] }} assigned → {{ $k['seats_active'] }} active (answered in 14d).
{{-- ── Tenant table ──────────────────────────────────────────────────── --}}
Centres & schools
@forelse ($d['tenants'] as $t) @empty @endforelse
Organisation Seats (sold/used/active) Util Renews Students Avg Maxile Last activity Flags
{{ $t['name'] }} · {{ $t['type'] }} {{ $t['seats_sold'] }} / {{ $t['seats_used'] }} / {{ $t['seats_active'] }} $t['util_pct'] < 40])>{{ $t['util_pct'] }}% ! is_null($t['expiry_days']) && $t['expiry_days'] <= 30])> {{ ! is_null($t['expiry_days']) ? $t['expiry_days'] . 'd' : '—' }} {{ $t['students'] }} {{ $t['avg_maxile'] }} {{ $t['last_activity'] ? \Illuminate\Support\Carbon::parse($t['last_activity'])->diffForHumans() : '—' }} @if ($t['at_risk']) At risk @endif @if ($t['upsell']) Upsell @endif @if (! $t['at_risk'] && ! $t['upsell']) — @endif
No centres or schools yet.
At risk = utilisation <40%, expiring ≤30d, or no activity in 14d. Upsell = seats ≥90% assigned.
{{-- ── Attainment rollups (continuous — NOT certification) ───────────── --}}
Attainment · provisional mastery, continuous Maxile
Avg Maxile
{{ $att['avg_maxile'] }}
{{ $att['total'] }} students
On track
{{ $att['on_track'] }}
active in last 14d
Close to passing
{{ $att['close'] }}
≤25 Maxile to next band
At risk
$att['at_risk'] > 0, 'text-gray-900 dark:text-white' => $att['at_risk'] === 0])>{{ $att['at_risk'] }}
inactive 14d
{{-- Level distribution by Maxile band --}} @if (! empty($att['distribution'])) @php($maxCount = max(1, max(array_column($att['distribution'], 'count'))))
Level distribution (Maxile band)
@foreach ($att['distribution'] as $band)
{{ $band['label'] }}
{{ $band['count'] }}
@endforeach
@endif
Attainment is provisional mastery (continuous Maxile), not certification.
{{-- Certified panel retired — certified is account's domain (BOUNDARY.md). --}}