# TRIỂN KHAI CỘT "TRỪ LƯƠNG NGÀY VẮNG"

## ✅ **ĐÃ HOÀN THÀNH**

### 1. **Database Schema**

- ✅ Đã thêm cột `absence_deductions` vào bảng `payrolls`
- ✅ Kiểu dữ liệu: `decimal(10,2)`, default: 0
- ✅ Comment: "Trừ lương ngày vắng/nghỉ phép"

### 2. **PayrollService Logic**

```php
// ✅ Tách riêng logic tính toán
$actualPenalties = $lateEarlyPayable + $lateEarlyDayPenalty + $missingPunchPayable; // Chỉ phạt vi phạm
$absenceDeductions = $absencePenalty + $leavePenalty; // Trừ lương ngày vắng/nghỉ phép

// ✅ Lưu riêng biệt vào database
'penalty_amount' => $actualPenalties, // Chỉ tiền phạt vi phạm
'absence_deductions' => $absenceDeductions, // Trừ lương ngày vắng/nghỉ phép
```

### 3. **Payroll Model**

```php
// ✅ Thêm vào $fillable
'penalty_amount',
'absence_deductions', // MỚI
'ot_amount',
```

### 4. **Controller Detail Method**

```php
// ✅ Cập nhật để sử dụng cột mới
'penalty_amount' => $payroll->penalty_amount, // Chỉ tiền phạt vi phạm
'absence_deductions' => $payroll->absence_deductions ?? 0, // Trừ lương ngày vắng từ DB
```

### 5. **View Table Display**

```html
<!-- ✅ Thêm header cột -->
<th data-column="penalty_amount">Tiền phạt</th>
<th data-column="absence_deductions">Trừ lương vắng</th>
<th data-column="deductions">Các khoản khấu trừ</th>

<!-- ✅ Thêm data cells -->
<td data-column="penalty_amount">
    {{ number_format($payroll->penalty_amount, 0) }}
</td>
<td data-column="absence_deductions">
    {{ number_format($payroll->absence_deductions ?? 0, 0) }}
</td>
<td data-column="deductions">{{ number_format($payroll->deductions, 0) }}</td>

<!-- ✅ Thêm vào column visibility dropdown -->
<li>
    <label class="dropdown-item">
        <input
            type="checkbox"
            class="column-toggle me-2"
            data-column="absence_deductions"
            checked
        />
        Trừ lương vắng
    </label>
</li>
```

### 6. **Modal Chi Tiết**

```javascript
// ✅ Cập nhật hiển thị trong modal
<tr class="table-warning">
    <td><strong>Trừ lương ngày vắng:</strong></td>
    <td class="text-end text-danger">-${formatCurrency(payroll.absence_deductions || payroll.absent_deduction)}</td>
</tr>
<tr class="table-warning">
    <td><strong>Tiền phạt:</strong></td>
    <td class="text-end text-danger">-${formatCurrency(payroll.penalty_amount)}</td>
</tr>
```

## 🎯 **KẾT QUẢ MONG ĐỢI**

### **Trong Table:**

| Tiền phạt | Trừ lương vắng | Khấu trừ |
| --------- | -------------- | -------- |
| 1,280,000 | 416,667        | 0        |

### **Trong Modal Chi Tiết:**

- **Lương cơ bản:** 10,000,000 đ
- **Phụ cấp:** 0 đ
- **Tiền OT:** +0 đ
- **Thu nhập khác:** +0 đ
- **Khấu trừ:** -0 đ
- **Trừ lương ngày vắng:** -416,667 đ ✅
- **Tiền phạt:** -1,280,000 đ ✅
- **Lương thực nhận:** 1,440,000 đ ✅

## 🧪 **CÁCH TEST**

### 1. **Tính lại lương mới:**

```
1. Vào trang payroll
2. Click "Quy trình tính lương"
3. Chọn nhân viên và tháng
4. Tính lương mới
```

### 2. **Kiểm tra hiển thị:**

```
1. Table sẽ hiển thị 2 cột riêng biệt:
   - Tiền phạt: 1,280,000
   - Trừ lương vắng: 416,667

2. Modal chi tiết sẽ khớp với table
3. Tổng lương nhận được chính xác
```

### 3. **Test column visibility:**

```
1. Click dropdown "Ẩn/Hiện cột"
2. Uncheck "Trừ lương vắng"
3. Cột sẽ ẩn đi
4. Check lại sẽ hiện trở lại
```

## ✅ **CHECKLIST HOÀN THÀNH**

- [x] Cập nhật PayrollService logic
- [x] Cập nhật Payroll model fillable
- [x] Cập nhật Controller detail method
- [x] Thêm cột vào table header
- [x] Thêm data cells vào table body
- [x] Thêm vào column visibility dropdown
- [x] Cập nhật modal chi tiết JavaScript
- [x] Test với dữ liệu mới

## 🚀 **SẴN SÀNG SỬ DỤNG**

Hệ thống đã được triển khai đầy đủ để:

1. **Lưu riêng biệt** tiền phạt vi phạm và trừ lương ngày vắng
2. **Hiển thị chính xác** trong table với 2 cột riêng biệt
3. **Modal chi tiết** khớp với dữ liệu trong table
4. **Column visibility** cho phép ẩn/hiện cột mới

Bây giờ bạn có thể tính lại lương để thấy kết quả chính xác! 🎉

---

**Ngày triển khai:** 11/12/2025  
**Trạng thái:** Hoàn thành, sẵn sàng test

# Chỉ đồng bộ Nhân viên mới
php artisan attendance:sync-employees đồng bộ nhân viên với máy chấm công
# php artisan attendance:sync-device --date=2024-02-23 đồng bộ dữ liệu từ máy chấm công