@can('payroll.view') @if (Route::has('erp.payroll.index')) Payroll runs @endif @endcan
{{ $staff->initials }}

{{ $staff->name }}

{{ $staff->designation ?? 'No designation' }}

Employee no
{{ $staff->employee_no ?? '—' }}
Role
{{ $staff->role_label }}
Region
{{ $staff->region ?? '—' }}
Joined
{{ $staff->date_joined?->format('d M Y') ?? '—' }}
Pay grade
@if ($staff->payGrade) {{ $staff->payGrade->code }} @if ($staff->pay_step) · step {{ $staff->pay_step }} @endif @else — @endif
@if ($staff->payGrade?->national_payroll_code)
National code
{{ $staff->payGrade->national_payroll_code }}
@endif
Email
{{ $staff->email }}
Phone
{{ $staff->phone ?? '—' }}
National ID
{{ $staff->national_id ?? '—' }}
KRA PIN
{{ $staff->kra_pin ?? '—' }}
NSSF no
{{ $staff->nssf_no ?? '—' }}
SHIF no
{{ $staff->shif_no ?? '—' }}
@if ((float) $staff->insurance_premium_monthly > 0)
Insurance premium
{{ money($staff->insurance_premium_monthly, false) }}/month
@endif
Licence
{{ $staff->license_no ?? '—' }} @if ($staff->license_expiry) expires {{ $staff->license_expiry->format('d M Y') }} @endif
Emergency
{{ $staff->emergency_contact_name ?? '—' }} @if ($staff->emergency_contact_phone) {{ $staff->emergency_contact_phone }} @endif
@if ($staff->unionMembership)
Union
{{ $staff->unionMembership->union_name }} {{ money($staff->unionMembership->monthly_dues, false) }}/month
@endif
@if ($staff->notes)

{{ $staff->notes }}

@endif
@if ($entitlements->isEmpty()) Balances appear once the year's leave policy is allocated. @else @foreach ($entitlements as $entitlement) @endforeach
Type Entitled Used Pending Balance
{{ $entitlement->leaveType?->name }} @unless ($entitlement->leaveType?->is_paid) Unpaid @endunless {{ (float) $entitlement->allocated + (float) $entitlement->carried_forward }} {{ (float) $entitlement->used_days }} {{ (float) $entitlement->pending_days }} {{ $entitlement->balance }}
@if (Route::has('hr.leave.index')) Open leave records → @endif @endif
@if ($allowances->isEmpty())

No standing allowance is assigned.

@else
    @foreach ($allowances as $assignment)
  • {{ $assignment->allowance?->name }}

    {{ $assignment->allowance?->kind_label }} @if ($assignment->allowance?->kind === 'percent') · {{ (float) $assignment->allowance->amount }}% of {{ $assignment->allowance->basis_label }} @endif

    {{ $assignment->amount_override !== null ? money($assignment->amount_override, false) : money($assignment->allowance?->amount, false) }}
  • @endforeach
@endif
@if ($acknowledgements->isEmpty())

No policy acknowledgement on file.

@else
    @foreach ($acknowledgements as $acknowledgement)
  • {{ $acknowledgement->policy }}

    Version {{ $acknowledgement->version }}

    @if ($acknowledgement->is_acknowledged) @else @endif
  • @endforeach
@endif
@can('hrm.staff.manage') Changing the pay grade or step records a progression entry automatically.
@csrf @method('PUT') @if ($errors->any())
    @foreach ($errors->all() as $message)
  • {{ $message }}
  • @endforeach
@endif
@endcan @if ($contracts->isEmpty()) Record the current terms so payroll and the file agree. @else
@foreach ($contracts as $contract) @if ($contract->status === 'active' && auth()->user()->can('hrm.contracts.manage')) @endif @endforeach
Contract Period Basic salary Status Action
{{ $contract->title }} {{ $contract->contract_no }} {{ $contract->employment_type_label }} {{ $contract->start_date?->format('d M Y') }} – {{ $contract->end_date?->format('d M Y') ?? 'open' }} {{ money($contract->basic_salary, false) }} @if ($contract->status === 'active' && $contract->end_date && $contract->end_date->lte(today()->addDays(60))) Expiring @elseif ($contract->status === 'active') In force @else Closed @endif
Close this contract
@csrf
@endif @can('hrm.contracts.manage')
Record a new contract
@csrf
@endcan
@if ($documents->isEmpty()) Contracts, licences, certificates and disciplinary letters live here. @else
@foreach ($documents as $document) @endforeach
Document Category Expires Action
{{ $document->title }} {{ $document->uploadedBy?->name }} · {{ $document->created_at?->format('d M Y') }} @if ($document->expires_at) {{ $document->expires_at->format('d M Y') }} @if ($document->is_expired) Expired @endif @else No expiry @endif
View Download @can('hrm.documents.manage')
@csrf @method('DELETE')
@endcan
@endif @can('hrm.documents.manage')
Upload a document
@csrf

PDF, image or Word document up to 10 MB. Held on the private disk.

@endcan
@if ($jobHistory->isEmpty())

No prior roles recorded.

@else
    @foreach ($jobHistory as $job)
  • {{ $job->designation }}

    {{ $job->department?->name ?? 'Unassigned' }} · {{ $job->employment_type_label }}

    {{ $job->started_on?->format('M Y') }} – {{ $job->ended_on?->format('M Y') ?? 'present' }}
  • @endforeach
@endif @can('hrm.staff.manage')
Add a role change
@csrf
@endcan
@if ($leaveRequests->isEmpty())

No leave requested yet.

@else
    @foreach ($leaveRequests as $leave)
  • {{ $leave->leaveType?->name }}

    {{ $leave->start_date?->format('d M') }} – {{ $leave->end_date?->format('d M Y') }} · {{ (float) $leave->days }} day{{ (float) $leave->days === 1.0 ? '' : 's' }}

  • @endforeach
@endif
@if ($attendance->isEmpty())

No attendance recorded.

@else @foreach ($attendance as $day) @endforeach
Date In Out Hours Status
{{ $day->date?->format('d M') }} {{ $day->clock_in?->format('H:i') ?? '—' }} {{ $day->clock_out?->format('H:i') ?? '—' }} {{ (float) $day->worked_hours }}
@endif
@if ($payslips->isEmpty())

No payslip has been issued to this staff member.

@else
@foreach ($payslips as $payslip) @endforeach
Period Gross Deductions Net pay Status Run
{{ $payslip->payrollRun?->period_label ?? '—' }} {{ money($payslip->gross_salary, false) }} {{ money($payslip->total_deductions, false) }} {{ money($payslip->net_pay, false) }} @if ($payslip->payrollRun && Route::has('erp.payroll.show')) Open run @else — @endif
@endif
@if ($goals->isEmpty())

No goals set for this year.

@else
    @foreach ($goals as $goal)
  • {{ $goal->title }}

    {{ $goal->kra }} · weight {{ $goal->weight }}%

  • @endforeach
@endif
@if ($appraisals->isEmpty())

No appraisal recorded.

@else
    @foreach ($appraisals as $appraisal)
  • {{ $appraisal->period_year }} · {{ $appraisal->period_label }}

    Reviewer: {{ $appraisal->reviewer?->name ?? '—' }}

    @if ($appraisal->overall_rating) {{ $appraisal->overall_rating }}/5 @endif
  • @endforeach
@endif
@if ($loans->isEmpty())

No loan or advance on record.

@else
    @foreach ($loans as $loan)
  • {{ $loan->loan_no }} · {{ $loan->kind_label }}

    Balance {{ money($loan->balance, false) }} of {{ money($loan->principal, false) }} · {{ money($loan->monthly_deduction, false) }}/month

  • @endforeach
@endif
@if ($claims->isEmpty())

No expense claim submitted.

@else
    @foreach ($claims as $claim)
  • {{ $claim->category_label }} claim

    {{ $claim->claim_no }} · {{ money($claim->amount, false) }} · {{ $claim->created_at?->format('d M Y') }}

  • @endforeach
@endif
@if ($checklists->isNotEmpty())
@foreach ($checklists as $task) @endforeach
Task Kind Due State
{{ $task->title }} {{ $task->kind_label }} {{ $task->due_date?->format('d M Y') ?? '—' }} @if ($task->is_done) @else @endif
@endif