근로계약서 스펙
개요
근로계약서 기능은 Simple HR 프로젝트 관리자 모드에서 제공되며, 직원별 계약서 작성·연장·날인·리스트 관리를 포함한다. 아래는 26년 06월 01일 기준으로 수집된 미해결(미완료) 수정 요청사항이다. fix-task-0601.md fix-task-0601.md
주요 기능 영역
1. 계약서 작성 및 직원 선택
- 직원선택 비활성화 상태 오류 수정 필요 fix-task-0601.md
- 직원 선택 후 기존 계약서 확인 가능해야 함
- 회사 직인 날인 여부 / 근로자 서명 날인 여부 표시
- 신규 계약서 작성 리스트에서 계약기간을 1차 / 2차 / N차 단위로 구분 표시 fix-task-0601.md
2. 계약 연장
- 현재 근로계약서를 기본으로 계약기간만 변경하여 재날인 처리하는 방식
- 계약기간은 1차 / 2차 / N차 순으로 표시되어야 하며, 현재는 위·아래로 나열됨 (N차 작성 중 상태) fix-task-0601.md
- 계약연장과 수정의 차이 명확화 필요
- 계약연장: 기존 직원별 근로계약서 내용 그대로 오픈 → 수정 후 계약서 전달 → 날인으로 진행 fix-task-0601.md
- 리스트의 계약연장 방식을 아래 3가지로 구분 fix-task-0601.md
3. 날짜 정합성 오류
두 건의 날짜 오류가 보고되었다. fix-task-0601.md
정하린 계약서 상세 - 작성일: 26.05.19 / 작성자: 홍길동 팀장 - 수정일: 26.05.19 / 수정자: 홍길동 팀장 - 서명일: 26.05.14 / 서명자: 정하린 사원 → 작성일보다 서명일이 앞서는 것은 논리적으로 불가 → 유효성 검증 추가 필요 fix-task-0601.md
4. 계약 연장 UI — 날짜 선택 오류
- 새 종료일 입력 시 월(Month) 클릭 → 상단으로, 년(Year) 클릭 → 하단으로 이동하는 버그 존재
- 클릭 시 이동하지 않도록 수정 필요 fix-task-0601.md
5. 근로 시작일/종료일 자동 연동
- 윤소민 계약서: 시작일/종료일과 계약서 내용상 근로개시일이 상이함
- 시작일/종료일 확정 시 근로계약서의 근로일정과 동일하게 자동 생성되도록 수정 필요 fix-task-0601.md
- 파견근로자 근로계약서 양식 별도 구성 필요 fix-task-0601.md
사용자 모드 — 근로계약서
| 항목 | 요구사항 |
|---|---|
| 본인 날인 | 본인이 직접 날인 후 제출 |
| 관리자 승인 | 제출 후 관리자가 승인 |
| 다운로드 | 승인 완료 후 회사 직인 날인 포함 파일 다운로드 가능해야 함 |
fix-task-0601.md
처리 상태 현황
주요 플로우
관련 페이지
계약 유형 코드 매핑 (레거시 보정)
CONTRACT_FULL_TIME 및 CONTRACT_PERMANENT는 레거시 마이그레이션 값으로, 시스템 내 렌더링 시 정규직으로 매핑 처리한다. fix-task-0626 (26년 06월 26일 수정사항)
- 백엔드(
template_context.py) + 프론트엔드 5개 파일에 매핑 추가 - 서명된 계약서의
context_snapshot에 raw enum이 남아있는 경우 렌더링 시점 보정 적용 (ContractOverrideEditor2곳 +contracts미리보기 1곳)
계약 시작일·종료일 수정
직원 상세 드로어에서 계약 시작일·만료일 모두 수정 가능하도록 변경되었다. fix-task-0626 (26년 06월 26일 수정사항)
- 근로계약서 탭 라벨 변경: "시작일" → "계약 시작일", "종료일" → "계약 종료일"
- 계약서 탭에서
end_date수정 시Employee.contract_end_date캐시 동기화 추가 - 통합 테스트(
test_employee_contract_date_edit.py) 추가 - 계약일이
Employee테이블과EmployeeContract테이블에 이중 저장되어 불일치가 발생할 수 있으므로, 배포 전 데이터 보정 절차 필요 (→ 상세 절차는 별도 페이지 참조)
사직서 처리 연계
사직서 제출 → 관리자 승인 → 퇴사 처리 흐름에서 어떤 후속 처리를 해야 하는지 미정의 상태로, 추가 설계 필요. fix-task-0626 (26년 06월 26일 수정사항)
07월 03일 업데이트: 사직서 전체 프로세스(DB 모델, API, 관리자 UI, 결재선 연동, 퇴직 처리)가 완성되었다. 자세한 내용은 사직서 처리 워크플로 스펙 참조. fix-task-0703 (26년 07월 03일 수정사항)
근로계약서 미기입 항목 이슈 (07월 02일)
사용자의 근로계약서에 급여, 근무장소 등 일부 항목이 채워지지 않는 문제가 보고되었다. 변수와 DB 데이터의 매핑이 부분적으로만 적용되어 있어, 전체 변수-DB 매핑 일치 여부 확인이 필요하다. fix-taskNew-0702 (26년 07월 02일 우선수정사항)fix-taskNew-0702
완료 (07월 06일 기준): 사용자 근로계약서 미채워지는 항목(급여, 근무장소 등) 수정 완료. fix-taskNew-0706 (26년 07월 06일 우선수정사항)fix-taskNew-0706
계약서 서명·날인·대표 칸 레이아웃
계약서 내 날인, 서명, 대표 등의 칸은 테이블 형태로 구성하지 않고, 자연스러운 배치(비테이블 레이아웃)로 변경해야 한다. fix-taskNew-0702 (26년 07월 02일 우선수정사항)fix-taskNew-0702 → 07월 03일 완료 처리. fix-task-0703 (26년 07월 03일 수정사항) → 07월 06일 재확인 완료. fix-taskNew-0706 (26년 07월 06일 우선수정사항)
- 액션 아이템 — 전체 수정 요청 추적
- 직원 등록 플로우 — 신규 직원 등록 연계
- 직원 재직 상태 변경 워크플로 — 계약 상태와 연동되는 재직 상태
- 근무 정책 스펙 — 계약서에 반영되는 근로 정책
- 근태 관리 스펙 — 근로 시작일 기준 근태 연동
- 의사결정 로그 — 관련 의사결정 기록
- fix-task-0626 (26년 06월 26일 수정사항) — 계약 유형 매핑·시작일 수정 수정사항 원본
- fix-taskNew-0702 (26년 07월 02일 우선수정사항) — 근로계약서 미기입 항목·서명 레이아웃 이슈 원본
- fix-task-0703 (26년 07월 03일 수정사항) — 계약서 레이아웃 완료·근로계약서 매핑 미완료 확인 원본
- fix-taskNew-0706 (26년 07월 06일 우선수정사항) — 근로계약서 미기입 항목 수정 완료·계약서 레이아웃 재확인 원본
- fix-task-0713 (26년 07월 13일 수정사항) — 근로계약서 수정 불가 확인 요청·auto_renew 불일치 수정·계약형태 변경 요청 원본
- fix-task-0715 수정사항 — auto_renew/renewal_method 불일치 수정 완료·도급직 기본값 통일·계약형태 변경 완료 원본
E2E 테스트 시나리오 — 직원 등록 → 계약서 서명 흐름
근로계약서 수정 불가 이슈 (07월 13일)
근로계약서 수정이 안되는 경우가 생길 수 있어 확인이 필요하다. fix-task-0713 (26년 07월 13일 수정사항)
auto_renew / renewal_method 불일치 수정 (07월 15일 완료)
auto_renew (boolean)과 renewal_method 값이 불일치하는 경우 계약서 목록에서 "자동연장" 표시가 잘못 노출되는 버그가 수정되었다. fix-task-0715 수정사항
- 원인: 유형 옆 "자동연장" 텍스트가
auto_renew(boolean)을 보고 표시되어,renewal_method=MANUAL_RENEW인데auto_renew=true인 데이터에서 잘못 표시됨 - 프론트 수정:
c.auto_renew→c.renewal_method === "AUTO_RENEW"조건으로 변경 (frontend/src/app/admin/employees/contracts/page.tsx) - prod 데이터 보정: 불일치 1건(박준혁, 도급직 시드)
renewal_method를AUTO_RENEW로 수정 완료
도급직 auto_renew 기본값 검토 (07월 13일 → 07월 15일 완료)
현재 도급직(CONTRACT_OUTSOURCE)만 auto_renew=true가 기본값이나 법적 근거가 없다. 모든 계약 유형을 MANUAL_RENEW 기본으로 통일하고 관리자가 직접 선택하게 하는 방안 검토 중이었다. fix-task-0713 (26년 07월 13일 수정사항)
- 수정 완료:
backend/app/services/contract_service.py:627-629— 도급직 자동연장 기본값 로직 제거. 모든 계약 유형에서auto_renew=False로 통일. fix-task-0715 수정사항
계약형태 변경 기능 (07월 13일 요청 → 07월 15일 완료)
계약직 ↔ 정규직 간 계약형태 변경이 가능해야 한다는 요청이 접수되었으며, 07월 15일 수정 완료되었다. fix-task-0713 (26년 07월 13일 수정사항) fix-task-0715 수정사항
E2E 테스트 시나리오 명세 Part 3에서 근로계약서와 직접 연관된 핵심 흐름을 정의한다. E2E 테스트 시나리오 - Part 3. 관리자↔사용자 연계 시나리오
계약서 상태 전이
| 단계 | 액터 | 동작 | 결과 상태 |
|---|---|---|---|
| 1 | 관리자 | 근로계약서 작성 (직원선택, 고용유형, 시작일/종료일, 계약연장방식) | DRAFT — 급여·근로정책 스냅샷 저장 |
| 2 | 관리자 | 계약서 발송 | PENDING_SIGN — 직원에게 "서명 요청" 알림 전송 |
| 3 | 직원 | 첫 로그인 시 require_contract_sign=True gate 표시 (hard — 다른 페이지 접근 차단) | — |
| 4 | 직원 | 전자서명 완료 | PENDING_APPROVAL — 모든 관리자에게 "승인 요청" 알림 전송 |
| 5 | 직원 | 계약서 승인 전 출근 시도 | ATT_CONTRACT_PENDING_APPROVAL 에러로 출퇴근 차단 |
| 6 | 관리자 | 계약서 승인 | ACTIVE — require_contract_sign gate 해제 |
| 7 | 직원 | 승인 후 재로그인 | gate 없이 대시보드 정상 진입 |
E2E 테스트 시나리오 - Part 3. 관리자↔사용자 연계 시나리오