# Implementation Plan - Policy Settings with Department Interaction

This plan outlines the steps to implement the requested settings and integrate them with the `ValidationFacade` and department system.

## 1. Database Schema Updates
- **Departments**: Add `additional_settings` (JSON) column to allow department-specific overrides.
- **Attendance Settings**: Add missing fields if necessary, or transition to using `ValidationFacade` for all items.
- **Request Settings**: Add missing fields if necessary, or transition to using `ValidationFacade`.

## 2. ValidationFacade Enhancement
- Update `ValidationServices` to be context-aware (considering the current user's department).
- Implement a hierarchical lookup: User context -> Department Settings -> Company Settings -> Default values.

## 3. Define Settings Schema
Populate `additional_settings` with the following configuration keys:

### Request Settings - Vacation
- `leave_requests_enabled`
- `leave_requires_notes`
- `leave_requires_attachments`
- `leave_max_monthly_requests`

### Advance Settings
- `advance_requests_enabled`
- `advance_requires_notes`
- `advance_max_monthly_requests`
- `advance_max_amount`
- `advance_max_installments`

### Permission Settings
- `permission_requests_enabled`
- `permission_requires_notes`
- `permission_max_monthly_requests`

### Edit Settings Attendance
- `attendance_edit_enabled`
- `attendance_edit_requires_notes`
- `attendance_edit_max_monthly_requests`

### Remote Work Settings
- `remote_work_enabled`
- `remote_work_requires_notes`
- `remote_work_max_monthly_requests`

### Violation Exemption Settings
- `violation_exemption_enabled`
- `violation_exemption_max_monthly_requests`

### Attendance - Time Settings
- `work_start_time`
- `work_end_time`
- `grace_period_minutes`
- `grace_period_no_deduction_minutes`

### Requirements Location
- `require_location_on_checkin`
- `require_location_on_checkout`
- `require_location_on_break_start`
- `require_location_on_break_end`
- `always_save_location_mobile`

### Overtime and General
- `overtime_calculation_enabled`
- `allow_attendance_outside_hours`
- `count_outside_hours_as_overtime`
- `require_fingerprint_verification`
- `employee_attendance_edit_requires_approval`

## 4. Logic Implementation
- **AttendanceServices**: Update `checkIn`, `checkOut`, and `calculateDelay` to use `ValidationFacade::isValid` for all checks.
- **EmployeeRequestService**: Update `createRequest` and `updateRequest` to use `ValidationFacade::isValid` for enabling types, checking notes/attachments requirements, and monthly limits.

## 5. Interaction between Settings and Departments
- Ensure that when `ValidationFacade::isValid` is called, it identifies the user's department and applies any department-specific overrides.
