@extends('layouts.superadmin') @section('title', 'مراقبة نزاهة التقييمات') @section('page-title', 'مراقبة نزاهة التقييمات (Integrity Monitor)') @section('content') @php // ===================== ADD: Attendance Arabic Mapping ===================== $attendanceLabel = function($v){ return match($v){ 'present' => 'حاضر', 'absent_with_excuse' => 'غائب بعذر', 'absent_without_excuse' => 'غائب بدون عذر', default => 'غير محدد', }; }; $attendanceBadge = function($v) use ($attendanceLabel){ $cls = match($v){ 'present' => 'bg-emerald-500/15 text-emerald-200 border border-emerald-500/20', 'absent_with_excuse' => 'bg-amber-500/15 text-amber-200 border border-amber-500/20', 'absent_without_excuse' => 'bg-rose-500/15 text-rose-200 border border-rose-500/20', default => 'bg-slate-500/15 text-slate-200 border border-slate-500/20', }; return ''.$attendanceLabel($v).''; }; // ===================== END ADD ===================== @endphp
{{-- الهيدر --}}

مراقبة نزاهة التقييمات

كشف تلقائي للتناقضات المنطقية: حاضر بنقاط 0، غياب بنقاط، ملاحظات مع الغياب، حسبة غياب بدون عذر خاطئة، أو وجود غياب رسمي معتمد بدون ضبط الحالة.

{{-- تبديل عرض جدول / كروت --}}
@php $isCards = (request('view','table') === 'cards'); @endphp جدول كروت
{{-- كروت الملخّص --}} @php $items = $rows->getCollection(); $total = (int)($rows->total() ?? 0); $cPresentZero = $items->filter(fn($e)=>in_array('حاضر لكن النقاط = 0', (array)($e->anomaly_reasons ?? []), true))->count(); $cAbsentPoints = $items->filter(function($e){ $reasons = (array)($e->anomaly_reasons ?? []); return collect($reasons)->contains(fn($r)=>str_contains($r,'غياب لكن النقاط > 0')); })->count(); $cAbsentNotes = $items->filter(fn($e)=>collect((array)($e->anomaly_reasons ?? []))->contains('غياب لكن يوجد ملاحظات مقيم'))->count(); $cCalcWrong = $items->filter(function($e){ $reasons = (array)($e->anomaly_reasons ?? []); return collect($reasons)->contains(fn($r)=>str_contains($r,'حسبة الغياب بدون عذر غير صحيحة')); })->count(); @endphp
إجمالي النتائج
{{ $total }}
حاضر + نقاط 0
{{ $cPresentZero }}
غياب + نقاط
{{ $cAbsentPoints }}
غياب + ملاحظات
{{ $cAbsentNotes }}
حسبة خاطئة
{{ $cCalcWrong }}
{{-- الفلاتر --}}
إعادة ضبط النتائج تُعرض كتقييمات “مشبوهة/متناقضة” فقط.
{{-- النتائج: كروت / جدول --}} @if($isCards)
@forelse($rows as $e) @php $reasons = (array)($e->anomaly_reasons ?? []); $userName = $e->user->name ?? ('#'.$e->user_id); $evName = $e->evaluator->name ?? ('#'.$e->evaluator_id); $dateYmd = \Carbon\Carbon::parse($e->evaluation_date)->toDateString(); @endphp
{{ $userName }}
المقيم: {{ $evName }} • {{ $dateYmd }}
النقاط
{{ (int)($e->total_daily_points ?? 0) }}
@foreach($reasons as $r) {{ $r }} @endforeach
واتساب
{{ (int)($e->whatsapp_presence ?? 0) }}
تيكتوك
{{ (int)($e->tiktok_interaction ?? 0) }}
{{-- ===================== UPDATE: Attendance Arabic ===================== --}}
الحضور
{!! $attendanceBadge($e->attendance_status) !!}
{{-- ===================== END UPDATE ===================== --}}
@empty
لا يوجد تناقضات ضمن الفلاتر الحالية.
@endforelse
{{ $rows->links() }}
@else

جدول التناقضات

كل صف هنا يعتبر “مشكلة نزاهة/منطق” ويحتاج مراجعة.

عدد الصفوف: {{ $rows->total() }}
@forelse($rows as $e) @php $reasons = (array)($e->anomaly_reasons ?? []); $dateYmd = \Carbon\Carbon::parse($e->evaluation_date)->toDateString(); @endphp {{-- ===================== UPDATE: Attendance Arabic ===================== --}} {{-- ===================== END UPDATE ===================== --}} @empty @endforelse
التاريخ العضو المقيم الحضور واتساب تيكتوك النقاط الأسباب فتح
{{ $dateYmd }}
{{ $e->user->name ?? ('#'.$e->user_id) }} #{{ $e->id }}
{{ $e->evaluator->name ?? ('#'.$e->evaluator_id) }} {!! $attendanceBadge($e->attendance_status) !!} {{ (int)($e->whatsapp_presence ?? 0) }} {{ (int)($e->tiktok_interaction ?? 0) }} {{ (int)($e->total_daily_points ?? 0) }}
@foreach($reasons as $r) {{ $r }} @endforeach
فتح
لا يوجد تناقضات ضمن الفلاتر الحالية.
{{ $rows->links() }}
@endif
هذه الصفحة “رقابة نزاهة” تمنع تراكم الأخطاء على النقاط والسمعة قبل ما تتحول مشكلة كبيرة.
@endsection