# GPS 출퇴근 (슬라이드 23-27)

## 1. 개요

GPS 기반 모바일 출퇴근 관리 시스템으로, 위치 정보를 활용하여 출근/퇴근을 기록합니다.

## 2. 마이페이지 팝업 > 출퇴근하기 (슬라이드 24)

### 2.1 출퇴근 버튼
- GPS 출퇴근 사용 시에만 표시
- 모바일일 경우에만 버튼 활성화
- 클릭: 출퇴근하기 화면으로 이동

### 2.2 출퇴근 허용 반경
- 기준 화표로부터의 출퇴근 허용 반경을 m 형으로 표시 (기준정보 > 출퇴근관리에서 설정)

### 2.3 현재 위치 버튼
- 클릭: (3-1) 해당 현재 위치를 지도 중심으로 표시

### 2.4 [+] 버튼
- 클릭: 지도 영역 확대

### 2.5 확대/축소 슬라이드바
- 드래그&드랍 또는 클릭: 지도 영역 확대/축소

### 2.6 [-] 버튼
- 클릭: 지도 영역 축소

### 2.7 개인 정보 영역
- 항목: 프로필 이미지, 이름, 부서명, 직급명

### 2.8 현재 시:분:초 표시
- HH:MM:SS

### 2.9 출근하기 버튼
- 클릭:
  1) 출근 위치 미설정 상태일 경우: "출근 위치를 설정해주세요." 알림 Alert 표시
  2) 출근 위치 설정 상태일 경우:
     - (1) 출근 위치가 기준 설정 반경 초과일 경우: "출근 가능 위치가 아닙니다. 출근 위치를 확인해주세요." 알림 Alert 표시
     - [2] GPS 출근 위치 기준 설정 반경 이내: 출근하기 화면으로 이동 (출근 기록 저장)

## 3. 출근하기 (슬라이드 25)

### 3.1 퇴근하기 버튼
- 클릭:
  1) 퇴근 위치 미설정 상태일 경우: "퇴근 위치를 설정해주세요." 알림 Alert 표시
  2) 퇴근 위치 설정 상태일 경우:
     - (1) 퇴근 위치가 기준 설정 반경 초과일 경우: "퇴근 가능 위치가 아닙니다. 퇴근 위치를 확인해주세요." 알림 Alert 표시
     - [2] GPS 퇴근 위치 기준 설정 반경 이내: 퇴근하기 화면으로 이동 (퇴근 기록 저장)

### 3.2 출근 완료 아이콘 이미지 표시

### 3.3 출근 완료 정보
- 항목: 출근 완료 문구, 시:분:초, 일자(요일)

### 3.4 출근 화표의 본사/현장명 표시

### 3.5 확인 버튼
- 클릭: 대시보드로 이동

## 4. 퇴근하기 (슬라이드 26)

### 4.1 퇴근 완료 아이콘 이미지 표시

### 4.2 퇴근 완료 정보
- 항목: 퇴근 완료 문구, 시:분:초, 일자(요일)

### 4.3 퇴근 화표의 본사/현장명 표시

### 4.4 확인 버튼
- 클릭: 대시보드로 이동

## 5. 현장 등록 (슬라이드 27)

### 5.1 위치 정보 설정
- 각 현장의 GPS 중심값으로 설정

### 5.2 입력 필드
| 필드명 | 필수 | 설명 |
|--------|------|------|
| 주소 | Y | 우편번호 찾기 + 상세주소 |
| 경도 | Y | |
| 위도 | Y | |
| 첨부파일 | N | |

---

## 데이터 모델

### Attendance (출퇴근 기록)
```
- id: bigint
- user_id: bigint (FK)
- tenant_id: bigint (FK)
- type: enum('check_in', 'check_out')
- check_time: datetime
- latitude: decimal(10,8)
- longitude: decimal(11,8)
- location_id: bigint (FK, nullable) # 본사/현장
- location_name: string
- is_valid: boolean # 유효 위치 여부
- created_at: timestamp
```

### Location (본사/현장)
```
- id: bigint
- tenant_id: bigint (FK)
- name: string
- address: string
- detail_address: string
- latitude: decimal(10,8)
- longitude: decimal(11,8)
- allowed_radius: int # 허용 반경 (m)
- is_active: boolean
- created_at: timestamp
```

---

## API 도출

### GPS 출퇴근 API
```
POST /api/attendance/check-in           # 출근 기록
POST /api/attendance/check-out          # 퇴근 기록
GET  /api/attendance/today              # 오늘 출퇴근 현황
GET  /api/attendance/status             # 현재 출퇴근 상태
GET  /api/attendance/location/validate  # 위치 유효성 검증
```

### 현장 관리 API
```
GET  /api/locations                     # 현장 목록
POST /api/locations                     # 현장 등록
PUT  /api/locations/{id}                # 현장 수정
DELETE /api/locations/{id}              # 현장 삭제
```

### 출퇴근 설정 API
```
GET  /api/settings/attendance           # 출퇴근 설정 조회
PUT  /api/settings/attendance           # 출퇴근 설정 수정
```
