@php $companyPayload = (array) ($payload['company'] ?? []); $employeePayload = (array) ($payload['employee'] ?? []); $termsPayload = (array) ($payload['terms'] ?? []); $contractPayload = (array) ($payload['contract'] ?? []); $documentPayload = (array) ($payload['document'] ?? []); $attachments = collect($payload['attachments'] ?? [])->filter(fn ($item) => is_array($item))->values(); $notice = session('signature_notice'); $display = function ($value, string $fallback = '-') { $text = trim((string) ($value ?? '')); return $text !== '' ? $text : $fallback; }; $statusClass = match (true) { !empty($statusPayload['is_signed']) => 'is-success', !empty($statusPayload['is_expired']) => 'is-danger', ($statusPayload['status'] ?? '') === 'opened' => 'is-primary', default => 'is-warning', }; $noticeClass = 'is-info'; if (is_array($notice)) { $noticeClass = match (($notice['type'] ?? 'info')) { 'success' => 'is-success', 'danger' => 'is-danger', default => 'is-info', }; } $rangeStatusClass = match (($contractPayload['range_status'] ?? 'current_only')) { 'continuous' => 'is-success', 'gap' => 'is-warning', 'overlap' => 'is-danger', default => 'is-primary', }; $documentSections = collect($documentPayload['sections'] ?? [])->filter(fn ($item) => is_array($item))->values(); $documentGeneratedAt = $display($documentPayload['generated_at'] ?? null); $templateType = $display($companyPayload['template_type'] ?? null, 'pkwt'); $templateLabel = match (trim((string) ($companyPayload['template_type'] ?? 'pkwt'))) { 'offering_letter' => 'Offering Letter', 'kontrak_harian' => 'Form Kontrak Harian', 'perjanjian_bersama' => 'Perjanjian Bersama', 'pkwtt' => 'PKWTT', 'masa_persiapan' => 'Masa Persiapan', 'pkwt' => 'PKWT', default => strtoupper($display($companyPayload['template_type'] ?? null, 'Dokumen')), }; $documentKind = trim((string) ($documentPayload['kind'] ?? $signatureRequest->request_type ?? 'contract')); $isOfferingLetter = $documentKind === 'offering_letter' || $templateType === 'offering_letter'; $currentContractNo = $display($contractPayload['current_contract_no'] ?? null); $documentStatusValue = $isOfferingLetter ? 'Offering Letter Aktif' : $currentContractNo; $extensionDocumentNo = $display($contractPayload['extension_document_no'] ?? null, 'Belum diisi'); $componentRows = collect($termsPayload['components'] ?? [])->filter(fn ($item) => is_array($item))->values(); $birthLabel = trim( $display($employeePayload['birth_place'] ?? null, '') . (($employeePayload['birth_place'] ?? null) && ($employeePayload['birth_date'] ?? null) ? ', ' : '') . $display($employeePayload['birth_date'] ?? null, '') ); if ($birthLabel === '') { $birthLabel = '-'; } $jabatanLabel = trim( $display($employeePayload['jabatan_code'] ?? null, '') . (($employeePayload['jabatan_code'] ?? null) && ($employeePayload['jabatan_name'] ?? null) ? ' - ' : '') . $display($employeePayload['jabatan_name'] ?? null, '') ); if ($jabatanLabel === '') { $jabatanLabel = '-'; } $emergencyLabel = trim( $display($employeePayload['emergency_contact_name'] ?? null, '-') . ' / ' . $display($employeePayload['emergency_contact_relation'] ?? null, '-') . ' / ' . $display($employeePayload['emergency_contact_phone'] ?? null, '-') ); @endphp

{{ $signatureRequest->title ?: 'Permintaan Tanda Tangan Digital' }}

Halaman ini dipakai untuk persetujuan tanda tangan digital karyawan. Sebelum menandatangani, baca dulu {{ $isOfferingLetter ? 'ringkasan offering letter, biodata snapshot, rincian kompensasi, dan lampiran yang disediakan.' : 'ringkasan rentang kontrak, biodata snapshot, isi dokumen, dan lampiran yang disediakan.' }}

Ringkasan Dokumen

Dokumen ini menggunakan snapshot data yang dibekukan saat link dibuat. Perubahan data master setelah itu tidak otomatis mengubah isi dokumen ini.

{{ $statusPayload['label'] ?? 'Status' }}
@if(is_array($notice) && !empty($notice['message']))
{{ $notice['message'] }}
@endif
Template Dokumen
{{ $templateLabel }}
Jenis template yang dipakai saat link dibuat.
Nomor Dokumen
{{ $extensionDocumentNo }}
{{ $isOfferingLetter ? 'Referensi utama offering letter / approval yang sedang dibuka.' : 'Referensi utama dokumen perpanjangan / approval yang sedang dibuka.' }}
{{ $isOfferingLetter ? 'Status Dokumen' : 'Nomor Kontrak Saat Ini' }}
{{ $documentStatusValue }}
{{ $isOfferingLetter ? 'Untuk offering letter, field ini bisa dipakai sebagai referensi internal jika perusahaan membutuhkan nomor lama.' : 'Diambil dari referensi kontrak terakhir yang tersedia saat request dibuat.' }}
Link Berlaku Sampai
{{ !empty($statusPayload['expires_at']) ? \Carbon\Carbon::parse($statusPayload['expires_at'])->format('d/m/Y H:i') : '-' }}
Jika lewat masa berlaku, admin perlu generate link baru.
Snapshot Dibuat
{{ $documentGeneratedAt }}
Waktu render biodata dan dokumen dibekukan untuk request ini.
Pihak Pertama / Perusahaan
{{ $display($companyPayload['company_name'] ?? null) }}
{{ $display($companyPayload['company_address'] ?? null) }}
Perwakilan HR / Signer Internal
{{ $display($companyPayload['hr_name'] ?? null) }}
{{ $display($companyPayload['hr_title'] ?? null) }}
Snapshot tetap

Biodata, alamat KTP, nomor HP, kontak darurat, isi dokumen, dan komponen gaji dinamis pada halaman ini adalah versi yang dibekukan saat link dibuat. Jika ada data salah, jangan lanjut sign. Minta admin memperbaiki master data dan membuat link baru.

{{ $display($contractPayload['range_status'] ?? null, 'snapshot') }}

{{ $isOfferingLetter ? 'Masa Berlaku Dokumen' : 'Rentang Kontrak' }}

{{ $isOfferingLetter ? 'Bagian ini menampilkan status aktif karyawan dan tanggal efektif offering letter yang dibekukan pada dokumen ini.' : 'Bagian ini menampilkan range kontrak yang sedang tercatat dan range perpanjangan yang disiapkan untuk dokumen ini.' }}

{{ $display($contractPayload['range_label'] ?? null, 'Belum ada analisa range') }}
{{ $isOfferingLetter ? 'Status Saat Ini' : 'Kontrak Saat Ini' }}
{{ $display($contractPayload['current_range_label'] ?? null) }}
Mulai: {{ $display($contractPayload['current_start_date'] ?? null) }}
Selesai: {{ $display($contractPayload['current_end_date'] ?? null, $isOfferingLetter ? 'Aktif' : '-') }}
{{ $isOfferingLetter ? 'Efektif Dokumen' : 'Perpanjangan / Range Baru' }}
{{ $display($contractPayload['extension_range_label'] ?? null) }}
Mulai: {{ $display($contractPayload['extension_start_date'] ?? null, 'Belum diisi') }}
Selesai: {{ $display($contractPayload['extension_end_date'] ?? null, $isOfferingLetter ? 'Mengikuti dokumen aktif' : 'Belum diisi') }}
{{ $isOfferingLetter ? 'Status Berlaku' : 'Durasi' }}
{{ $display($contractPayload['duration_label'] ?? null) }}
{{ $isOfferingLetter ? 'Dokumen berlaku mengikuti tanggal efektif dan kebijakan perusahaan yang tercantum pada offering letter ini.' : $display($contractPayload['duration_days'] ?? null, '-') . ' hari total pada range yang sedang dipakai dokumen.' }}
{{ $isOfferingLetter ? 'Status Karyawan' : 'Status Masa Berlaku' }}
{{ $display($contractPayload['alert_label'] ?? null) }}
{{ $isOfferingLetter ? 'Ringkasan ini dipakai untuk memvalidasi bahwa offering letter dibuat untuk karyawan yang masih aktif.' : 'Sisa hari berdasarkan data kontrak aktif: ' . $display($contractPayload['days_left'] ?? null, '-') . '.' }}

Biodata Snapshot Karyawan

Data berikut dipakai sebagai identitas yang melekat pada dokumen ini. Nomor KTP, alamat KTP, nomor HP, dan kontak darurat ditampilkan agar karyawan bisa memverifikasi datanya sebelum sign.

Identitas Tetap
Nama Lengkap {{ $display($employeePayload['full_name'] ?? null) }} ID Finger {{ $display($employeePayload['finger_id'] ?? null) }}
NIK / Nomor KTP {{ $display($employeePayload['nik_no'] ?? null) }} Status Kerja {{ $display($employeePayload['employment_status'] ?? null) }}
Agama {{ $display($employeePayload['religion'] ?? null) }} Pendidikan {{ $display($employeePayload['education_level'] ?? null) }}
Tempat / Tgl Lahir {{ $birthLabel }} Tgl Masuk {{ $display($employeePayload['hire_date'] ?? null) }}
Jabatan {{ $jabatanLabel }} Area Kerja {{ $display($employeePayload['area_label'] ?? null) }}
No. HP {{ $display($employeePayload['phone'] ?? null) }} Email {{ $display($employeePayload['email'] ?? null) }}
Kontak Darurat {{ $emergencyLabel }} NPWP {{ $display($employeePayload['npwp_no'] ?? null, 'Kosong') }}
Alamat KTP {{ $display($employeePayload['address_ktp'] ?? null) }}
Alamat Tinggal / Domisili {{ $display($employeePayload['address_domicile'] ?? null) }}

{{ $isOfferingLetter ? 'Isi Dokumen / Rincian Offering Letter' : 'Isi Dokumen / Rincian Kontrak' }}

{{ $isOfferingLetter ? 'Bagian ini adalah isi offering letter hasil render snapshot. Jika teks HR perlu versi resmi final, tahap berikutnya bisa kita hubungkan ke template dokumen dan generate PDF final dari isi yang sama.' : 'Bagian ini adalah isi dokumen hasil render snapshot. Jika teks kontrak perlu lebih formal, tahap berikutnya bisa kita hubungkan ke template dokumen HR dan generate PDF final dari isi yang sama.' }}

{{ $display($documentPayload['title'] ?? null, 'Dokumen Snapshot') }}
@if($documentSections->isNotEmpty())
@foreach($documentSections as $index => $section)

{{ $index + 1 }}. {{ trim((string) ($section['heading'] ?? 'Bagian Dokumen')) }}

@foreach((array) ($section['paragraphs'] ?? []) as $paragraph)

{{ trim((string) $paragraph) }}

@endforeach
@endforeach
@else

Belum ada isi dokumen yang tersimpan pada request ini.

@endif @if(trim((string) ($termsPayload['compensation_summary'] ?? '')) !== '' || trim((string) ($termsPayload['work_schedule'] ?? '')) !== '' || trim((string) ($termsPayload['additional_clauses'] ?? '')) !== '')
Rincian Upah / Hak
{{ $display($termsPayload['compensation_summary'] ?? null) }}
Jam Kerja
{{ $display($termsPayload['work_schedule'] ?? null) }}
Aturan Tambahan
{{ $display($termsPayload['additional_clauses'] ?? null, '-') }}
@endif @if($componentRows->isNotEmpty())
Komponen Gaji Dinamis
Komponen ini dibekukan saat link dibuat agar nilai pada dokumen digital tidak berubah di tengah proses persetujuan.
@foreach($componentRows as $component) @endforeach
Komponen Nominal Efektif Mulai Efektif Selesai
{{ $display(($component['label'] ?? null) ?: (($component['code'] ?? '-') . ' - ' . ($component['name'] ?? '-'))) }} {{ $display($component['amount_label'] ?? null) }} {{ $display($component['effective_start'] ?? null, '-') }} {{ $display($component['effective_end'] ?? null, '-') }}
@endif

Lampiran Dokumen

Jika tersedia, lampiran kontrak / dokumen pendukung ditampilkan di sini sebagai referensi tambahan sebelum tanda tangan dilakukan.

{{ $attachments->count() }} lampiran
@if($attachments->isNotEmpty())
@foreach($attachments as $attachment)
{{ $display($attachment['title'] ?? null, $attachment['file_name'] ?? 'Lampiran Dokumen') }}
Tipe: {{ $display($attachment['document_type'] ?? null) }} | Ref: {{ $display($attachment['reference_no'] ?? null, '-') }} | Tanggal: {{ $display($attachment['document_date'] ?? null, '-') }}
@if(!empty($attachment['file_url'])) Lihat Lampiran @else File tidak tersedia @endif
@endforeach
@else

Belum ada lampiran kontrak yang ikut dilampirkan ke request ini.

@endif
@if(!empty($statusPayload['is_signed']))

Tanda Tangan Sudah Diterima

Dokumen ini sudah ditandatangani. Informasi di bawah adalah identitas signer yang tercatat pada saat submit.

Signed
Nama Penandatangan
{{ $display($signatureRequest->signer_name ?? null) }}
Email
{{ $display($signatureRequest->signer_email ?? null) }}
No. HP
{{ $display($signatureRequest->signer_phone ?? null) }}
Waktu Signed
{{ optional($signatureRequest->signed_at)->format('d/m/Y H:i') ?: '-' }}
IP dan browser signer juga sudah tersimpan sebagai evidence internal perusahaan.
@if($signatureImageUrl)
Preview Tanda Tangan Tanda tangan digital
@endif @elseif(!empty($statusPayload['is_expired']))

Link Sudah Kedaluwarsa

Masa berlaku permintaan tanda tangan ini sudah habis. Hubungi admin / HR untuk meminta link baru jika dokumen ini masih perlu ditandatangani.

Expired
@else

Isi Data Penandatangan

Pastikan nama dan tanda tangan sesuai identitas karyawan. Jika biodata atau range kontrak pada halaman ini tidak sesuai, hentikan proses dan minta admin membuat link baru.

Tahap Akhir
@csrf
Tulis tanda tangan di area bawah. Bisa pakai mouse, touch screen, atau stylus. Bagian ini adalah tahap terakhir setelah seluruh biodata dan rincian kontrak diperiksa.
@endif
@if(empty($statusPayload['is_signed']) && empty($statusPayload['is_expired'])) @endif