SimpleHR project
데이터 이관 작업 스펙 (HNT)
conceptedited by Cairni · 방금 · AIv1
개요
대상 회사는 (주) 에이치앤티아웃소싱시스템 (사업자번호 166-81-63798)이며, 6월 16일 기준으로 레거시 데이터의 이관 현황을 정리한 문서다. Simple HR 프로젝트 플랫폼에 최초 테넌트 데이터를 적재하는 방식으로 진행된다. 원본 이관 현황 파일을 기반으로 작성되었다. hnt-migration-status.md
이관 완료 항목
| 항목 | 현황 | 상태 |
|---|---|---|
| 부서 | 6개, 직원 29/29명 배정 | ✔ |
| 직위 | 10개, 22/29명 배정 (7명 레거시 미지정) | ✔ |
| 근로정책 | 7개, 17/29명 직접 배정 (12명 미지정) | ✔ |
| 근무지 | 7개, 인식 반경 100m 통일, GPS 좌표 3건 | ✔ |
| 계약서 양식 | 29/29명 배정 (근로계약서) | ✔ |
| 휴가 잔여일 | 연차 21명 / 총 296일, 사용 4일 | ✔ |
| 출퇴근 기록 | 5,432건 (2025-12 ~ 2026-06) | ✔ |
| 회사 설정 | 대표자(김수일), 주소, 급여일(25일), 로고 | ✔ |
| 양식 | 22건 (CONTRACT 3 + OPTIONAL 17 + REQUIRED 2) | ✔ |
| 공지사항 | 9건 | ✔ |
| 근로계약서 변수 | 빌트인 16개 + 서명 1개 + 수동입력 17개 | ✔ |
| 관리자 유형 | 4종 자동 생성 (최고/조직/중간/일반관리자) — startup backfill | ✔ |
hnt-migration-status.md
계정 구조
| 구분 | 이메일 | 이름 | 역할 | 비밀번호 | 비고 |
|---|---|---|---|---|---|
| 관리자 | france8@hntos.co.kr | 이상재 | ROLE_COMP_ADMIN | 직접 전달 | 최고관리자 유형 자동 배정 |
| 부관리자 | yunbini23@hntos.co.kr | 임윤빈 | ROLE_COMP_ADMIN | 이메일로 설정 | 비밀번호 설정 이메일 발송 대상 |
| 직원 27명 | 각 개인 이메일 | — | ROLE_COMP_USER | 이메일로 설정 | 비밀번호 설정 이메일 발송 대상 |
- 이메일 발송 대상: 이상재 제외 28명 (임윤빈 + 직원 27명)
- 토큰 유효시간: 48시간
- 비밀번호 설정 후
access_token즉시 발급 → 자동 로그인 - 이메일 링크 형식:
{APP_BASE_URL}/set-password/{token} - 초기 비밀번호: 직원 28명
Test1234!@(이메일로 재설정), 관리자 이상재Sklee123!@#(직접 전달)
hnt-migration-status.md
관리자 등급 및 권한 관리 스펙도 함께 참조할 것.
미연결 항목 (배포 후 관리자 설정 필요)
배포 후 미연결 항목AI · 출처 클릭
높음3
근무지 배정 — 0/29명, GPS 출퇴근 불가
hnt-migration-status.md
급여 기초 설정 — 0/29명, 급여명세서 생성 불가
hnt-migration-status.md
회사 직인 미등록 — 계약서 직인란 빈칸
hnt-migration-status.md
중간1
부서-근로정책 배정 0건 — 미지정 12명 스케줄 없음
hnt-migration-status.md
낮음2
직무/직책 마스터 0건, 배정 0명 (레거시에 없음)
hnt-migration-status.md
직무상세 0/29명 — 계약서 job_duty에 직위명 fallback 표시
hnt-migration-status.md
- GPS 출퇴근 기능은 근무지 배정 완료 전까지 사용 불가.
- 회사 직인 미등록 시 계약서 직인란이 빈칸으로 출력됨.
- 직무 관리 항목(직무/직책)은 레거시에 원본 데이터가 없어 마스터 0건 상태.
배포 후 관리자 작업 순서
hnt-migration-status.md
프론트엔드 기능별 준비도
| 기능 | 준비도 | 비고 |
|---|---|---|
| 직원 목록/상세 조회 | ✔ | 직무/직책/직무상세는 빈칸 |
| 출퇴근 기록 조회 | ✔ | 이력 5,432건 |
| 출퇴근 GPS 체크인 | ✘ | 근무지 미배정 |
| 휴가 신청/조회 | ✔ | 21명 연차 잔여일 연결 |
| 계약서 작성/발송 | 부분 | 직인 미등록, 급여항목 수동입력 |
| 급여명세서 | ✘ | EmployeePayBase 0건 (레거시에 급여 데이터 없음) |
| 양식 관리/서류 신청 | ✔ | 22개 양식 (레거시 HTML→markdown 변환) |
| 공지사항 | ✔ | 9건 |
| 부서정책 일괄 설정 | ✔ | 근로정책/근무지 일괄 배정 가능 |
hnt-migration-status.md
근무지 GPS 좌표 현황
| 근무지 | 위도 | 경도 | 인식 반경 | 좌표 출처 |
|---|---|---|---|---|
| G마켓 사무실 | 37.5064466 | 127.059502 | 100m | 레거시 추출 |
| G마켓 재택 (정지영) | 37.5374082 | 126.9673112 | 100m | 레거시 추출 |
| G마켓 재택 (방지혜) | 37.2517031 | 126.9800508 | 100m | 레거시 추출 |
| 킴스분당점 | 미등록 | 미등록 | 100m | 레거시에도 없음 |
| 강남지사 | 미등록 | 미등록 | 100m | 레거시에도 없음 |
| 프롬바이오 | 미등록 | 미등록 | 100m | 레거시에도 없음 |
| 킴스강서점 | 미등록 | 미등록 | 100m | 레거시에도 없음 |
- 좌표 미등록 4곳은 배포 후 관리자가 근무지 설정에서 직접 등록 가능. hnt-migration-status.md
기술 구현 세부사항
멱등성 및 배포 방식
- 테넌트 존재 여부는
business_number='166-81-63798'로 체크, 이미 존재하면 skip. main.pylifespan에서 자동 실행 — 첫 배포 시 1회 적재.- 2차 배포 시: 데이터 적재 확인 후
main.py의 HNT seed 블록(226~239줄) 제거.
양식 보호
"custom": true플래그로contract_template_refresh덮어쓰기 방지. 폼 빌더 스펙 참조.
Startup Backfill
- 관리자 유형 4종, 기본 휴가유형, 휴가잔액, 기본 양식 등 자동 보완.
- 관리자 등급 및 권한 관리 스펙 참조.
hnt-migration-status.md
테스트 코드
| 파일 | 종류 | 검증 대상 |
|---|---|---|
tests/unit/test_contract_template_custom_flag.py | 단위 (9케이스) | _should_update() custom 플래그 보호 |
tests/integration/test_week_schedule_attendance.py | 통합 (2케이스) | 근무일정 API 출퇴근 필드 반환 |
hnt-migration-status.md