# 확인 예시 — 직원 한 명으로 따라가 보기 > 🎓 **교육용 가상 자료** · 가상 회사 「한빛상사(주)」 > 실존 인물·급여와 무관하며, 모든 숫자는 창작입니다. - 작성일: 2026-09-14 - 사용한 자료: **`data/가상_인사총무.json`** (직원 12 · 휴가 6 · 급여 12) - 목적: *"입력을 이렇게 넣으면 결과가 이렇게 나온다"* 를 미리 적어두고, 실제로 맞는지 확인하기 위함 --- ## 숫자는 한 벌입니다 `data/가상_인사총무.json` 과 `인사총무ERP_교육용가상자료.html` 의 데이터는 **완전히 같습니다.** JSON은 앱에서 그대로 뽑아낸 사본이며, 항목명만 한글로 바꾼 것입니다. | | 자료 | 용도 | |---|---|---| | 🖥️ | `인사총무ERP_교육용가상자료.html` | **데이터 정본** · 실습용 앱 | | 📂 | `data/가상_인사총무.json` | 사본 · 데이터 구조 설명용 (항목명 한글) | 문서에 적힌 숫자와 앱 화면의 숫자가 **다르면 그건 오류**입니다. 알려주세요. ### 앱을 여는 방법 2가지 (숫자는 같습니다) | 방법 | 데이터 출처 | 언제 쓰나 | |---|---|---| | HTML 파일 **더블클릭** | 📦 내장 데이터 | **수업할 때** — 가장 간편 | | `node 로컬서버.mjs` → `http://127.0.0.1:8123/` | 📂 JSON 파일 | **데이터 구조를 설명할 때** — 파일을 고치면 화면이 바뀌는 걸 보여줄 수 있음 | 화면 왼쪽 아래에 **지금 어느 데이터를 쓰는지** 항상 표시됩니다. --- ## 1. 고른 직원 — 강도현 `data/가상_인사총무.json` 에서 **사번 E006** 한 명을 골랐습니다. ### 기본 정보 (표 ① 직원) | 항목 | 값 | |---|---| | 사번 | **E006** | | 이름 | 강도현 | | 부서 · 직급 | 영업팀 · 사원 | | 입사일 | 2023-03-06 | | 재직상태 | 재직 | | 연차 부여일수 | 15일 | ### ① 휴가 잔여 일수 강도현의 휴가신청은 **3건**이고, 상태가 각각 다릅니다. | 신청번호 | 종류 | 기간 | 일수 | 상태 | 연차를 깎나? | |---|---|---|---|---|---| | L008 | 연차 | 08-10 ~ 08-12 | 3.0 | **승인** | ✅ 깎음 | | L015 | 연차 | 09-21 ~ 09-22 | 2.0 | 대기 | ❌ 아직 안 깎음 | | L021 | 연차 | 09-01 ~ 09-05 | 5.0 | 반려 | ❌ 안 깎음 | ``` 잔여연차 = 부여 15.0 − 승인된 연차·반차 3.0 = 12.0일 ``` > **12.0이라는 숫자는 파일 어디에도 적혀 있지 않습니다.** > 표 ①의 `연차부여일수`와 표 ②의 **승인 건에서만** 계산해서 나온 값입니다. > 대기 2일·반려 5일은 **합쳐서 7일이나 되는데도 잔여를 전혀 건드리지 않습니다.** ### ② 가상 지급액 (표 ③ 급여명세) | 항목 | 금액 | |---|---| | 급여번호 | `PY202609-E006` | | 귀속연월 | 2026-09 *(9월에 일한 값)* | | 지급일 | 2026-10-10 *(10월에 지급)* | | 기본급 | 3,000,000원 | | 수당 | + 200,000원 | | 공제 | − 100,000원 | | **지급액** | **3,100,000원** | | 상태 | 확정 | ``` 지급액 = 3,000,000 + 200,000 − 100,000 = 3,100,000원 ``` > ⚠️ **실제 세금·4대보험은 계산하지 않았습니다.** `공제`는 설명용 고정 금액 한 항목뿐입니다. > 실제 급여대장이라면 국민연금·건강보험·고용보험·소득세·지방소득세가 각각 따로 들어갑니다. --- ## 2. 승인 가능한 휴가 — 입력값과 예상 결과 강도현의 **잔여 12.0일** 안에 들어오는 신청입니다. ### 🅰️ 연차 5일 — 통과해야 함 | 입력 항목 | 넣을 값 | |---|---| | 신청자 | 강도현 (E006) | | 휴가 종류 | 연차 | | 시작일 | 2026-10-05 | | 종료일 | 2026-10-09 | **예상 결과** | 확인할 것 | 기대값 | |---|---| | 계산된 일수 | **5.0일** (10/5·6·7·8·9) | | 신청 버튼 | ✅ **눌린다** (경고 없음) | | 신청 직후 상태 | **대기** · 처리자·처리일은 **빈칸** | | 신청 직후 잔여 | **12.0일 그대로** ← 아직 승인 전이므로 안 깎임 | | 담당자가 **승인**한 뒤 잔여 | **7.0일** (12.0 − 5.0) | | 담당자가 **반려**한 뒤 잔여 | **12.0일 그대로** | | 직원이 **취소**한 뒤 잔여 | **12.0일 그대로** · 기록은 `⊘ 취소`로 **남음** | ### 🅱️ 반차 0.5일 — 통과해야 함 | 입력 항목 | 넣을 값 | |---|---| | 휴가 종류 | 반차 | | 날짜 | 2026-10-05 | **예상 결과**: 일수 **0.5일** → 신청 가능 → 승인 후 잔여 **11.5일** > 반차는 하루의 절반이라 **0.5일**로 계산됩니다. 종료일은 시작일과 같습니다. ### 🅲 이미 들어있는 대기 6건 처음부터 **대기 상태**로 들어 있는 신청입니다. 담당자 시점에서 바로 승인·반려해 볼 수 있습니다. | 신청번호 | 신청자 | 종류 | 일수 | 현재 잔여 | 판정 | 승인 후 잔여 | |---|---|---|---|---|---|---| | L015 | 강도현 (E006) | 연차 | 2.0 | 12.0 | ✅ 승인 가능 | **10.0** | | L016 | 이하늘 (E003) | 연차 | 2.0 | 12.0 | ✅ 승인 가능 | **10.0** | | L017 | 한지우 (E009) | 연차 | 3.0 | 14.5 | ✅ 승인 가능 | **11.5** | | L018 | 신예린 (E011) | 반차 | 0.5 | 13.0 | ✅ 승인 가능 | **12.5** | | L019 | 정민수 (E004) | 연차 | 3.0 | 13.0 | ✅ 승인 가능 | **10.0** | | L020 | 임재원 (E008) | **병가** | 2.0 | 11.0 | ✅ 승인 가능 | **11.0 유지** ← 병가는 차감 없음 | --- ## 3. 잔여 초과 휴가 — 막혀야 하는 입력 ### 🆇 연차 13일 — 차단되어야 함 | 입력 항목 | 넣을 값 | |---|---| | 신청자 | 강도현 (E006) | | 휴가 종류 | 연차 | | 시작일 | 2026-10-05 | | 종료일 | 2026-10-17 | **예상 결과** | 확인할 것 | 기대값 | |---|---| | 계산된 일수 | **13.0일** | | 판정 | ⛔ **차단** — 잔여 12.0일보다 1일 많음 | | 화면 메시지 | `⚠️ 남은 연차는 12.0일인데 13.0일을 신청했습니다. 잔여연차를 초과할 수 없습니다.` | | 신청 건수 | **늘지 않음** (기록이 아예 안 생김) | | 잔여연차 | **12.0일 그대로** | > 💡 **막는 시점이 중요합니다.** 신청을 받아두고 승인할 때 막는 게 아니라, > **신청 자체를 못 하게** 합니다. 처리할 수 없는 신청이 목록에 쌓이지 않게 하기 위해서입니다. ### 🆈 연차 12일 — 딱 경계, 통과해야 함 잔여와 **정확히 같은** 일수입니다. 이런 경계값에서 실수가 자주 납니다. | 입력 항목 | 넣을 값 | |---|---| | 시작일 ~ 종료일 | 2026-10-05 ~ 2026-10-16 | **예상 결과** | 확인할 것 | 기대값 | |---|---| | 계산된 일수 | **12.0일** | | 판정 | ✅ **통과** — "초과"가 아니라 "딱 맞음"이므로 허용 | | 승인 후 잔여 | **0.0일** | > ⚠️ 12일이 **막히면 버그**입니다. `초과`는 `잔여보다 클 때`이지 `같을 때`가 아닙니다. --- ## 4. 헷갈리기 쉬운 경우 2가지 ### 🆉 병가 20일 — 잔여보다 많은데도 통과해야 함 | 입력 항목 | 넣을 값 | |---|---| | 휴가 종류 | **병가** | | 시작일 ~ 종료일 | 2026-10-05 ~ 2026-10-24 (20일) | **예상 결과** | 확인할 것 | 기대값 | |---|---| | 계산된 일수 | 20.0일 | | 판정 | ✅ **통과** | | 승인 후 잔여 | **12.0일 그대로** | > 잔여 12일인데 20일을 신청했는데도 막히지 않습니다. **병가는 연차에서 차감하지 않기 때문**에 > 잔여와 비교할 이유가 없습니다. 수업에서 가장 많이 나오는 질문이니 꼭 짚어주세요. ### 🆊 날짜 역순 — 차단되어야 함 | 입력 항목 | 넣을 값 | |---|---| | 시작일 | 2026-10-09 | | 종료일 | 2026-10-05 | **예상 결과**: ⛔ 차단 · `⚠️ 종료일이 시작일보다 빠릅니다. 날짜를 확인해 주세요.` --- ## 5. 한눈에 보는 확인표 강도현 (E006) · 잔여 **12.0일** 기준. **앱과 JSON이 같은 숫자**입니다. | # | 입력 | 일수 | 판정 | 신청 후 잔여 | 승인 후 잔여 | |---|---|---|---|---|---| | 🅰️ | 연차 10/05 ~ 10/09 | 5.0 | ✅ 통과 | 12.0 | **7.0** | | 🅱️ | 반차 10/05 | 0.5 | ✅ 통과 | 12.0 | **11.5** | | 🆇 | 연차 10/05 ~ 10/17 | 13.0 | ⛔ **차단** (잔여 초과) | — | 12.0 유지 | | 🆈 | 연차 10/05 ~ 10/16 | 12.0 | ✅ 통과 (딱 경계) | 12.0 | **0.0** | | 🆉 | 병가 10/05 ~ 10/24 | 20.0 | ✅ 통과 (차감 안 함) | 12.0 | **12.0 유지** | | 🆊 | 연차 10/09 ~ 10/05 | — | ⛔ **차단** (날짜 역순) | — | 12.0 유지 | **취소까지 해보는 순서** | 순서 | 동작 | 기대 결과 | |---|---|---| | 1 | 👤 직원 시점에서 연차 5일 신청 | 목록에 `⏳ 대기`로 추가 · 잔여 **12.0 그대로** | | 2 | 그 건을 **취소** | 줄이 **사라지지 않고** `⊘ 취소`로 바뀜 · 잔여 **12.0 그대로** | | 3 | 🧑‍💼 담당자 시점으로 전환 | 「처리할 신청」에 **없고**, 「처리 완료」에 **있음** | | 4 | ↺ **데이터 초기화** | 모든 숫자·상태가 처음으로 복귀 | > 앱에서 확인할 때는 **👤 직원 시점**에서 신청하고 **🧑‍💼 담당자 시점**으로 바꿔 승인하면 됩니다. > 숫자가 꼬이면 **↺ 데이터 초기화** 버튼을 누르세요. --- ## 6. 이 문서의 숫자는 검산했습니다 위 표의 모든 기대값은 손으로 적은 것이 아니라, `data/가상_인사총무.json` 을 읽어 §5-1의 계산 규칙대로 **직접 계산해 확인한 결과**입니다. | 검산한 것 | 결과 | |---|---| | 강도현 잔여 = 15 − 3.0 | **12.0** ✅ | | 지급액 = 300만 + 20만 − 10만 | **3,100,000원** ✅ | | 6가지 입력 판정 (통과/차단) | **6건 모두 기대와 일치** ✅ | | 대기 6건 승인 후 잔여 | 위 §2-🅲 표대로 ✅ | | 앱 화면 숫자 = JSON 계산값 | **일치** ✅ (실제 브라우저에서 확인) | --- ## 7. 함께 보면 좋은 문서 - `데이터안내.md` — 표 3개를 왜 나누고 어떻게 연결하는지 - `data/가상_인사총무.json` — 이 문서가 사용한 원본 자료 - `PRD.md` §5-3 — 신청 차단 규칙의 원문 - `PRD.md` §10 — 앱 전체 성공 기준 (S1~S16)