# 기준정보 (슬라이드 92-104)

## 1. 개요

기준정보 모듈은 직급, 직책, 권한, 근무, 출퇴근, 휴가, 카드, 계좌, 팝업, 게시판, 일반설정, 알림설정을 관리합니다.

## 2. 직급관리 (슬라이드 93, 95)

### 2.1 직급 인풋박스
- 직급 입력 후 추가 버튼 클릭

### 2.2 추가 버튼
- 클릭: (2-1) 직급 목록 최하단에 표시

### 2.3 직급 목록
- 디폴트: 사원, 대리, 과장, 차장, 부장, 이사, 상무, 전무, 부사장, 사장

### 2.4 순서 변경 버튼
- 드래그&드랍: 해당 위치로 순서 변경

### 2.5 수정 버튼
- 클릭: 직급 수정 팝업 표시

### 2.6 삭제 버튼
- 클릭:
  1) 해당 직급으로 사원 설정된 경우: "'직급명'을 사용하고 있는 사원이 있습니다. 다 변경 후 삭제가 가능합니다." 알림 Alert 표시
  2) 해당 직급으로 사원 미설정된 경우: "정말 삭제하시겠습니까?" 확인 Alert 표시, 확인 클릭 시 "삭제가 완료되었습니다." 알림 Alert 표시

### 2.7 직급 수정 팝업
- 직급명 인풋박스: 기존 직급명 표시, 수정 가능

## 3. 직책관리 (슬라이드 94-95)

### 3.1 기능
- 직급관리와 동일한 구조

### 3.2 디폴트 직책
- (없음)

### 3.3 직책 수정 팝업
- 직책명 인풋박스: 기존 직책명 표시, 수정 가능

## 4. 권한관리 (슬라이드 96)

### 4.1 관리자
- 디폴트: 모든 메뉴 권한 설정
- 수정 불가, 삭제 불가

### 4.2 일반
- 디폴트: 대시보드 제외 모든 메뉴 접근 불가

### 4.3 추가 버튼
- 클릭: 권한 추가 팝업 표시

### 4.4 삭제 버튼
- 클릭:
  1) 해당 권한으로 사원 설정된 경우: "'권한명'을 사용하고 있는 사원이 있습니다. 다 변경 후 삭제가 가능합니다." 알림 Alert 표시
  2) 해당 권한으로 사원 미설정된 경우: "정말 삭제하시겠습니까?" 확인 Alert 표시

### 4.5 체크박스
- 클릭: 체크 설정/해제 토글
- 디폴트: 체크 해제 상태

### 4.6 관리
- 읽기 및 수정 권한

### 4.7 읽기
- 읽기만 권한

## 5. 근무관리 (슬라이드 97)

### 5.1 근무 정보
| 필드명 | 설명 |
|--------|------|
| 근무 유형 | 종류: 고정형, 변형, 맞춤형 |
| 기본 소정 근로 시간 | 주 00시간 |
| 연장 근로 시간 | 주 00시간 |
| 연장 근로 한도 | 52시간 미만 |
| 근무 요일 설정 | 클릭: 설정된 체크 활성/비활성 토글, 디폴트: 월~금 활성 |

### 5.2 출근 시간
- 09:00

### 5.3 퇴근 시간
- 18:00

### 5.4 휴게 시간
| 필드명 | 설명 |
|--------|------|
| 총 휴게 시간 | 1시간 |
| 휴게 시간 | 12:00 ~ 13:00 |

## 6. 출퇴근관리 (슬라이드 99)

### 6.1 출퇴근 설정
| 필드명 | 설명 |
|--------|------|
| GPS 출퇴근 | 토글: 기준 좌표로 정해진 거리 기준 이내에 있을 때만 출근/퇴근 등록 가능 |
| 허용 반경 | 주 00m |

### 6.2 본사 위치 정보
| 필드명 | 설명 |
|--------|------|
| 본사 주소 | 우편번호 찾기 + 상세주소 |
| 경도 | |
| 위도 | |

### 6.3 현장 목록
- 추가 버튼: 현장 등록 팝업 표시
- 현장명, 주소, 삭제 버튼

## 7. 휴가관리 (슬라이드 100)

### 7.1 기준 셀렉트 박스
- 종류: 회계연도, 입사일
- 디폴트: 회계연도
- 입사일 선택 시 (2) 영역 비활성화
- 회계연도 기준: 회사의 회계연도를 기준으로 휴가를 부여하고 조회할 수 있습니다.
- 입사일 기준: 사원의 입사일 회계연도 기준으로 휴가를 부여하고 조회할 수 있습니다.

### 7.2 기준일 월/일 설정 영역
- 회계연도 기준 시에만 활성화

### 7.3 기본 연차 설정
- 1년간 출근율 80% 이상이면 15일
- 3년 이상 근속 시 2년에 1일 추가 (최대 25일)
- 1년 미만 또는 출근율 80% 이하인 경우 1일
  - 입사일~회계연도 기준일 사정: 회년도 출근율로 판정 80% 이상이면 15일
  - (3-1) 연차+1년+1일 시작, 이후 2년에 1일 추가
  - 입사일~회계연도 기준으로 전환할 때는 취업규칙 변경, 노사 의견수렴, 전환 시 충북 연차 정산(입사일 기준 vs 회계연도 기준 비교 후 부족분 보전)을 반드시 검토 필요

## 8. 카드관리 (슬라이드 101-102)

### 8.1 카드 목록
| 필드명 | 설명 |
|--------|------|
| 카드사 | |
| 카드번호 | 앞4자리, 끝4자리 표시 |
| 카드명 | |
| 상태 | |
| 사용자 | 부서명 / 이름 / 직책 |
| 작업 | 상세 버튼 |

### 8.2 필터
- 종류: 전체, 사용, 정지
- 디폴트: 전체

### 8.3 카드 상세
| 필드명 | 필수 | 설명 |
|--------|------|------|
| 카드사 | Y | 카드사명 선택 |
| 카드번호 | Y | 1234-1234-1234-1234 |
| 유효기간 | Y | MM/YY |
| 카드 비밀번호 앞 2자리 | Y | 입력 시 마스킹 처리 |
| 카드명 | Y | |
| 상태 | Y | 종류: 사용, 정지. 정지 시 해당 카드의 자동 조회 중단 |
| 사용자 | N | 부서명 / 이름 / 직책. 선택 시 해당 카드의 사용자로 설정 |

## 9. 계좌관리 (슬라이드 103-104)

### 9.1 계좌 목록
| 필드명 | 설명 |
|--------|------|
| 은행 | |
| 계좌번호 | |
| 예금주 | |
| 상태 | |
| 사용자 | 부서명 / 이름 / 직책 |
| 작업 | 상세 버튼 |

### 9.2 필터
- 종류: 전체, 사용, 정지
- 디폴트: 전체

### 9.3 계좌 상세
| 필드명 | 필수 | 설명 |
|--------|------|------|
| 은행 | Y | 은행 선택 |
| 계좌번호 | Y | |
| 예금주 | Y | |
| 계좌명 | Y | |
| 상태 | Y | 종류: 사용, 정지. 정지 시 해당 계좌의 자동 조회 중단 |
| 사용자 | N | 부서명 / 이름 / 직책. 선택 시 해당 계좌의 사용자로 설정 |

---

## 데이터 모델

### Position (직급)
```
- id: bigint
- tenant_id: bigint (FK)
- name: string
- order: int
- created_at: timestamp
```

### JobTitle (직책)
```
- id: bigint
- tenant_id: bigint (FK)
- name: string
- order: int
- created_at: timestamp
```

### Role (권한)
```
- id: bigint
- tenant_id: bigint (FK)
- name: string
- is_system: boolean # 시스템 기본 권한 여부
- permissions: json # 메뉴별 권한 설정
- created_at: timestamp
```

### WorkSetting (근무 설정)
```
- id: bigint
- tenant_id: bigint (FK)
- work_type: enum('fixed', 'flexible', 'custom')
- standard_hours: int # 주당 소정 근로 시간
- overtime_hours: int # 주당 연장 근로 시간
- overtime_limit: int # 연장 근로 한도
- work_days: json # ['mon', 'tue', 'wed', 'thu', 'fri']
- start_time: time
- end_time: time
- break_hours: int
- break_start: time
- break_end: time
```

### AttendanceSetting (출퇴근 설정)
```
- id: bigint
- tenant_id: bigint (FK)
- use_gps: boolean
- allowed_radius: int # 허용 반경 (m)
- headquarters_address: string
- headquarters_latitude: decimal(10,8)
- headquarters_longitude: decimal(11,8)
```

### LeaveSetting (휴가 설정)
```
- id: bigint
- tenant_id: bigint (FK)
- base_type: enum('fiscal_year', 'hire_date')
- fiscal_start_month: int
- fiscal_start_day: int
```

### Card (카드)
```
- id: bigint
- tenant_id: bigint (FK)
- card_company: string
- card_number: string (encrypted)
- expiry_date: string
- card_password: string (encrypted)
- card_name: string
- status: enum('active', 'inactive')
- user_id: bigint (FK, nullable)
- created_at: timestamp
```

### BankAccount (계좌)
```
- id: bigint
- tenant_id: bigint (FK)
- bank_code: string
- account_number: string
- account_holder: string
- account_name: string
- status: enum('active', 'inactive')
- user_id: bigint (FK, nullable)
- created_at: timestamp
```

---

## API 도출

### 직급/직책 API
```
GET    /api/positions                    # 직급 목록
POST   /api/positions                    # 직급 추가
PUT    /api/positions/{id}               # 직급 수정
DELETE /api/positions/{id}               # 직급 삭제
PUT    /api/positions/reorder            # 직급 순서 변경

GET    /api/job-titles                   # 직책 목록
POST   /api/job-titles                   # 직책 추가
PUT    /api/job-titles/{id}              # 직책 수정
DELETE /api/job-titles/{id}              # 직책 삭제
PUT    /api/job-titles/reorder           # 직책 순서 변경
```

### 권한 API
```
GET    /api/roles                        # 권한 목록
POST   /api/roles                        # 권한 추가
GET    /api/roles/{id}                   # 권한 상세
PUT    /api/roles/{id}                   # 권한 수정
DELETE /api/roles/{id}                   # 권한 삭제
GET    /api/menus                        # 메뉴 목록 (권한 설정용)
```

### 설정 API
```
GET    /api/settings/work                # 근무 설정 조회
PUT    /api/settings/work                # 근무 설정 수정
GET    /api/settings/attendance          # 출퇴근 설정 조회
PUT    /api/settings/attendance          # 출퇴근 설정 수정
GET    /api/settings/leave               # 휴가 설정 조회
PUT    /api/settings/leave               # 휴가 설정 수정
```

### 카드/계좌 API
```
GET    /api/cards                        # 카드 목록
POST   /api/cards                        # 카드 등록
GET    /api/cards/{id}                   # 카드 상세
PUT    /api/cards/{id}                   # 카드 수정
DELETE /api/cards/{id}                   # 카드 삭제

GET    /api/bank-accounts                # 계좌 목록
POST   /api/bank-accounts                # 계좌 등록
GET    /api/bank-accounts/{id}           # 계좌 상세
PUT    /api/bank-accounts/{id}           # 계좌 수정
DELETE /api/bank-accounts/{id}           # 계좌 삭제
```
