@extends('layouts.adminlte') @section('title', 'SLIP GAJI') @section('page_title', 'SLIP GAJI') @push('styles') @endpush @section('content') @php $profile = $slipProfile; $layout = collect($slipLayout ?? []); $dynamicEarnings = collect($slipDynamicEarnings ?? []); $dynamicDeductions = collect($slipDynamicDeductions ?? []); $bpjsDetailRows = collect($bpjsDetails ?? []); $fmtMoney = fn ($v) => number_format((float) $v, 2, ',', '.'); $fmtNum = fn ($v, $d = 1) => number_format((float) $v, $d, ',', '.'); $gender = strtoupper(trim((string) ($row['gender'] ?? ''))); $jk = $gender === 'P' ? 'P' : ($gender === 'L' ? 'L' : '-'); $statusKawin = trim((string) ($row['tax_family_status'] ?? '-')) ?: '-'; $statusKaryawan = trim((string) ($row['employment_status'] ?? '-')) ?: '-'; $jenisLembur = strtolower((string) ($row['salary_scheme'] ?? '')) === 'all_in' ? 'All In' : 'Normal'; $bankName = trim((string) ($row['bank_name'] ?? '')); $bankAccountNo = trim((string) ($row['bank_account_no'] ?? '')); $bankAccountName = trim((string) ($row['bank_account_name'] ?? '')); $bankAccountLabel = trim((string) ($row['bank_account_label'] ?? '')); $npwpNo = trim((string) ($row['npwp_no'] ?? '')) ?: trim((string) ($row['pph21_npwp_no'] ?? '')) ?: trim((string) ($assignment->karyawan?->npwp_no ?? '')); $rawJamLembur = (float) ($row['overtime_hours'] ?? 0); $jamLembur = (float) ($row['weighted_overtime_hours'] ?? $rawJamLembur); $overtimeRate = (float) ($row['overtime_rate'] ?? ($row['hourly_rate'] ?? 0)); $upahLembur = round((float) ($row['overtime_nominal'] ?? ($overtimeRate * $jamLembur)), 2); $allowFixed = (float) ($row['allowance_fixed'] ?? 0); $tJabatan = (float) ($row['allowance_position'] ?? 0); $tKeahlian = (float) ($row['allowance_skill'] ?? 0); $allowMedicalHousing = (float) ($row['allowance_medical_housing'] ?? 0); $allowOther = (float) ($row['allowance_other'] ?? 0); $allowTotal = (float) ($row['allowance_total'] ?? 0); if ($allowTotal <= 0) { $allowTotal = $allowFixed + $tJabatan + $tKeahlian + $allowMedicalHousing + $allowOther; } $incentive = (float) ($row['incentive_amount'] ?? 0); $reimburse = (float) ($row['reimburse_nominal'] ?? 0); $dedAbsence = (float) ($row['absence_deduction_nominal'] ?? 0); $dedLate = (float) ($row['late_deduction_nominal'] ?? 0); $dedDynamicFromBreakdown = (float) ($row['dynamic_deduction_nominal'] ?? 0); $dedDynamicFromRows = 0.0; foreach ($dynamicDeductions as $c) { $code = strtolower((string) ($c['component_code'] ?? '')); $name = strtolower((string) ($c['component_name'] ?? '')); $text = trim($code . ' ' . $name); $amt = (float) ($c['amount'] ?? 0); if (str_contains($text, 'pph') || str_contains($text, 'jht') || str_contains($text, 'jpk') || str_contains($text, 'kesehatan') || str_contains($text, 'kes') || preg_match('/(^|[^a-z])jp([^a-z]|$)/', $text) === 1) { continue; } $dedDynamicFromRows += $amt; } $dedDynamic = $dedDynamicFromBreakdown > 0 ? $dedDynamicFromBreakdown : round($dedDynamicFromRows, 2); $potKelebihan = round($dedAbsence + $dedLate + $dedDynamic, 2); $grossNominal = (float) ($row['gross_nominal'] ?? ($row['billed_nominal'] ?? 0)); $grossBeforeInternalDeductions = max(0.0, $grossNominal + $dedAbsence + $dedLate); $upahPokok = max(0.0, $grossBeforeInternalDeductions - $allowTotal - $incentive - $upahLembur); $totalUpahPokok = $upahPokok + $upahLembur; $tTidakTetap = $allowFixed + $allowMedicalHousing + $allowOther + $incentive + $reimburse; $totalTunjangan = $tJabatan + $tKeahlian + $tTidakTetap; $koreksiHari = 0.0; $koreksiLembur = 0.0; $totalKoreksi = $koreksiHari + $koreksiLembur; $pph21 = (float) ($row['pph21_nominal'] ?? 0); $jht = 0.0; $jp = 0.0; $jpk = 0.0; $bpjs = (float) ($row['bpjs_nominal'] ?? 0); if ($bpjsDetailRows->isNotEmpty()) { $jht = (float) $bpjsDetailRows->where('component_code', 'JHT')->sum('employee_nominal'); $jp = (float) $bpjsDetailRows->where('component_code', 'JP')->sum('employee_nominal'); $jpk = (float) $bpjsDetailRows->where('component_code', 'JPK')->sum('employee_nominal'); $bpjsSplit = round($jht + $jp + $jpk, 2); if ($bpjs > 0 && abs($bpjsSplit - $bpjs) >= 0.01) { $jpk = round($jpk + ($bpjs - $bpjsSplit), 2); } } elseif ($dynamicDeductions->isNotEmpty()) { foreach ($dynamicDeductions as $c) { $code = strtolower((string) ($c['component_code'] ?? '')); $name = strtolower((string) ($c['component_name'] ?? '')); $text = trim($code . ' ' . $name); $amt = (float) ($c['amount'] ?? 0); if (str_contains($text, 'pph')) { continue; } if (str_contains($text, 'jht')) { $jht += $amt; continue; } if (str_contains($text, 'jpk') || str_contains($text, 'kesehatan') || str_contains($text, 'kes')) { $jpk += $amt; continue; } if (preg_match('/(^|[^a-z])jp([^a-z]|$)/', $text) === 1) { $jp += $amt; continue; } } $pph21 = round($pph21, 2); $jht = round($jht, 2); $jp = round($jp, 2); $jpk = round($jpk, 2); $parsedBpjs = round($jht + $jp + $jpk, 2); if ($bpjs > 0 && abs($parsedBpjs - $bpjs) >= 0.01) { $jht = round($bpjs * 0.5, 2); $jp = round($bpjs * 0.25, 2); $jpk = round($bpjs - $jht - $jp, 2); } } if ($bpjsDetailRows->isEmpty() && $dynamicDeductions->isEmpty()) { $jht = round($bpjs * 0.5, 2); $jp = round($bpjs * 0.25, 2); $jpk = round($bpjs - $jht - $jp, 2); } $totalPotongan = round($pph21 + $bpjs + $potKelebihan, 2); $gajiBersih = round(max(0.0, ($totalUpahPokok + $totalTunjangan + $totalKoreksi) - $totalPotongan), 2); $thp = (float) ($row['net_nominal'] ?? 0); $ot15 = 0.0; $ot2 = 0.0; $ot3 = 0.0; $ot4 = 0.0; if ($rawJamLembur > 0) { $ot15 = min(1.0, $rawJamLembur); $remaining = max(0.0, $rawJamLembur - $ot15); $ot2 = $remaining; } $otNom15 = $ot15 * 1.5; $otNom2 = $ot2 * 2.0; $otNom3 = $ot3 * 3.0; $otNom4 = $ot4 * 4.0; @endphp

{{ $profile?->name ?? 'Slip Gaji' }}

Kembali
{{ $profile?->company_name ?: 'PT. HIKARI TEKNOLOGI INDONESIA' }}
Periode : {{ $row['period_start'] ?? '-' }} S/D {{ $row['period_end'] ?? '-' }} Sts Kawin : {{ $statusKawin }} Tgl Proses : {{ $row['paid_pay_date'] ?? '-' }}
No. Finger : {{ $assignment->karyawan?->employee_code ?: '-' }} Sts Karyawan : {{ $statusKaryawan }} Jenis Lembur : {{ $jenisLembur }}
Nama : {{ $assignment->karyawan?->full_name ?: '-' }} JK : {{ $jk }} Rekening :
Upah Pokok (1) Perhitungan Lembur Potongan (4)
UpahRp {{ $fmtMoney($upahPokok) }} @ 1,5{{ $fmtNum($ot15) }}x1,5{{ $fmtNum($otNom15) }} PPh 21Rp {{ $fmtMoney($pph21) }}
Lembur{{ $fmtNum($jamLembur) }}xRp {{ $fmtMoney($overtimeRate) }}Rp {{ $fmtMoney($upahLembur) }} @ 2{{ $fmtNum($ot2) }}x2,0{{ $fmtNum($otNom2) }} JHT 2%Rp {{ $fmtMoney($jht) }}
TotalRp {{ $fmtMoney($totalUpahPokok) }} @ 3{{ $fmtNum($ot3) }}x3,0{{ $fmtNum($otNom3) }} JP 1%Rp {{ $fmtMoney($jp) }}
Tunjangan (2) @ 4{{ $fmtNum($ot4) }}x4,0{{ $fmtNum($otNom4) }} JPK 1%Rp {{ $fmtMoney($jpk) }}
JabatanRp {{ $fmtMoney($tJabatan) }} Total Lembur {{ $fmtNum($jamLembur) }}
KeahlianRp {{ $fmtMoney($tKeahlian) }} Potongan LainRp {{ $fmtMoney($potKelebihan) }}
Tidak TetapRp {{ $fmtMoney($tTidakTetap) }} TotalRp {{ $fmtMoney($totalPotongan) }}
TotalRp {{ $fmtMoney($totalTunjangan) }} Koreksi (3)
Hari Kerja{{ $fmtNum($row['hk_days'] ?? 0, 0) }}x{{ $fmtMoney(0) }}Rp {{ $fmtMoney($koreksiHari) }}
Lembur{{ $fmtNum($jamLembur) }}x{{ $fmtMoney(0) }}Rp {{ $fmtMoney($koreksiLembur) }}
Gaji Bersih ( 1 + 2 + 3 - 4 ) : Rp {{ $fmtMoney($gajiBersih) }} Total Koreksi : Rp {{ $fmtMoney($totalKoreksi) }} Take Home Pay : Rp {{ $fmtMoney($thp) }}
HK: {{ number_format((float) ($row['hk_days'] ?? 0), 0, ',', '.') }}/{{ number_format((float) ($row['expected_hk_days'] ?? 0), 0, ',', '.') }} | Alpha: {{ number_format((float) ($row['alpha_days'] ?? 0), 0, ',', '.') }} | Cuti: {{ number_format((float) ($row['cuti_days'] ?? 0), 0, ',', '.') }} | Approved: {{ number_format((float) ($row['approved_days'] ?? 0), 0, ',', '.') }} hari / {{ number_format((float) ($row['approved_hours'] ?? 0), 2, ',', '.') }} jam | NPWP: {{ $npwpNo !== '' ? $npwpNo : '-' }} | Generated: {{ $generatedAt ?? '-' }}
@forelse($dynamicEarnings as $c) @empty @endforelse
Komponen Pendapatan Dinamis
Kode Nama Sumber Nominal
{{ $c['component_code'] ?? '-' }} {{ $c['component_name'] ?? '-' }} {{ strtoupper((string) ($c['source'] ?? '-')) }} Rp {{ $fmtMoney($c['amount'] ?? 0) }}
Tidak ada komponen pendapatan dinamis.
@forelse($dynamicDeductions as $c) @empty @endforelse
Komponen Potongan Dinamis
Kode Nama Sumber Nominal
{{ $c['component_code'] ?? '-' }} {{ $c['component_name'] ?? '-' }} {{ strtoupper((string) ($c['source'] ?? '-')) }} Rp {{ $fmtMoney($c['amount'] ?? 0) }}
Tidak ada komponen potongan dinamis.
@if(request()->query('autoprint') === '1') @endif @endsection