자격증/면허
프로세스
- 승인 완료되면 자격증/면허로 넘어가서 등록됨
Works(mobile)
- 결재>문서관리 > 제출 > 옵션으로 자격증/면허 옵션 제공
- 자격증/면허의 경우 다른 파이프라인(프로세스)를 따른다.
- Works UI만 문서 제출과 같은 것으로 한다
자격증/면허 등록 팝업
1️⃣ 자격증/면허 제출 토글이 비활성화 일때
- 필수 : 직원, 자격 유형
- 선택 : 비고 2️⃣ 자격증/면허 제출 토글이 활성화 일때
- 필수
- 직원
- 자격유형
- 면허증명
- 면허번호
- 발급기관
- 발급일
- 원본 파일
- 선택
- 최근 면허 신고일
- 차기 면허 신고일
- 규칙
- 필수 정보의 경우 * 표시가 되어 있어야한다.
- [저장] 버튼 활성화 조건
- 필수 정보를 모두 입력했을 때
리스트
1️⃣ 상단 영역
- 왼쪽
- [엑셀 다운로드]
- 현재 필터 결과 기준으로 엑셀 내보내기
- [엑셀 다운로드]
- 오른쪽
- [등록] ➡️ 자격증/면허 등록 모달 제공
- 직원
- 필수 입력
- 검색으로 변경
- placeholder : 사번 / 이름
- 자격 유형
- 필수 입력
- 옵션: 간호사, 간호조무사, 물리치료사, 작업치료사, 언어치료사, 방사선사, 임상병리사, 약사, 영양사, 사회복지사, 의사, 치과의사, 응급구조사, 요양보호사, 기타
- placeholder : 자격증/면허 유형을 선택하세요.
- 자격증/면허 제출
- 아래 항목은 기본으로 제공되는 내용이며, 자격증/면허 설정에서 수정 가능
- 직원
- [등록] ➡️ 자격증/면허 등록 모달 제공
| 필드 | 필수 | 형식 | placeholder, default | 기타 |
|---|---|---|---|---|
| 면허증명 | O(필수 표시*) | text | placeholder : 간호사 면허증 | |
| 면허번호 | O(필수 표시*) | text | placeholder:제00000호 | |
| 발급기관 | O(필수 표시*) | text | placeholder: 보건복지부 | placeholder로 변경 |
| 발급일 | O(필수 표시*) | datepicker | YYYY.MM.DD. | |
| 파일 | O(필수 표시*) | file upload | 파일을 추가해 주세요. | 파일 업로드하면 미리보기가 보이도록 수정 |
| 최근 면허 신고일 | X | datepicker | YYYY.MM.DD. | |
| 차기 면허 신고일 | X | datepicker | YYYY.MM.DD. | 신고일 입력 시 차기 신고 +3년 12/31 자동 |
| 등록일 | X | datepicker | YYYY.MM.DD. | 문서 결재를 통해 넘어온 경우, 승인된 날짜로 자동으로 되어 있음,수정 가능 |
2️⃣ 필터링
- 자격 유형
- 옵션 : 전체, 간호사, 간호조무사, 물리치료사, 작업치료사, 언어치료사, 방사선사, 임상병리사, 약사, 영양사, 사회복지사, 의사, 치과의사, 응급구조사, 요양보호사, 기타
- 기본 : 전체
- 소속
- 멀티셀렉트 드롭다운
- 기본 : 전체(미선택)
- placeholder :
조직 선택 - 선택한 팀 중 하나라도 소속된 직원만 표시
- 선택 해제(X) → 필터 초기화 · 목록 갱신
- 차기 면허 신고일
- 차기 면허 신고 기한 구간 · 시작일 ~ 종료일
- 기본 : 미입력(전체)
- 검색
- 위치 : 필터 영역 오른쪽
- placeholder :
이름 / 사번 - 결과 없음 :
검색 결과가 없어요.
3️⃣ 요약
- 필터 위로 고정
- 조직 전체 기준 · 리스트 필터와 무관 (pill 요약)
| 항목 예시 | 표시 예 | 설명 |
|---|---|---|
| 간호사 | 3 / 12 | 미제출 수 / 해당 유형 전체 수 |
| 물리치료사 | 1 / 5 | 미제출 수 / 해당 유형 전체 수 |
4️⃣ 리스트 뷰
| 사번 | 이름 | 소속 | 입사일 | 자격유형 | 자격증/면허 이름 | 발급일 | 등록일 | 관리 |
|---|---|---|---|---|---|---|---|---|
| EMP-003 | 홍길동 | 간호팀>1병동 | 2026.06.20. | 간호사 | 간호사 | 2020.06.13. | 2026.06.23. | [보기][삭제] |
- 칼럼 정의
- 사번 : 없으면
-로 표시 - 이름 :
- 소속
- 팀 표시, 상위팀이 있을 경우 >로 표시
- 예시) 간호팀 > 1병동
- 입사일 : 직원 정보에 있는 입사일
- 발급일 : 자격증/면허에 입력된 발급날짜
- 등록일 : Works(mobile)로 등록된 자격증/면허 문서를 문서 제출에서 결재한 날짜
- 관리 : 해당 내용을 관리하기 위한 버튼을 제공하는 컬럼(5️⃣, 6️⃣ 에서 확인)
- 사번 : 없으면
5️⃣ [보기] 버튼으로 제공하는 팝업
- 자격증/면허 수정 팝업 제공
- 자격증/면허 등록 팝업과 동일
- 단, 입력된 정보가 있을 경우 보임
6️⃣ [삭제] 버튼으로 제공하는 팝업
- 팝업
삭제
{성이름}님의 {자격증명} 정보를 삭제할까요? 삭제하면 복구할 수 없어요.
[취소] [삭제]자격증/면허 커스텀 설정 → 새롭게 개발 필요한 화면
- 페이지 위치 : 문서 양식 > 자격증/면허 설정
- 문서 양식 옆의
자격증/면허탭으로 제공
- 문서 양식 옆의
- 1️⃣ 상단 영역
- [유형 추가] (오른쪽 · 공통정책)
- 클릭 시 자격 유형 추가 모달
2️⃣ 유형 추가·수정 모달
- title
- 추가 :
자격 유형 추가 - 수정 :
자격 유형 수정
- 추가 :
- 필드
| 필드 | 필수 | 형식 | 설명 |
|---|---|---|---|
| 이름 * | O | text | placeholder : 간호사, 영양사 등 |
| 설명 | X | text | 유형 안내 |
| 기본 면허증명 | X | text | placeholder : 간호사 면허증 · 유형 선택 시 자동 입력 |
| 상태 | O (표시 없음) | select | 활성 / 비활성 · default 활성 |
- 푸터
- [취소], [X] : 닫기
- [저장] : 필수 입력 시 활성 · 저장 후 목록 최상단(추가) 또는 갱신(수정) ·
자격 유형을 저장했어요.토스트
- 수정일 경우 다른 경우
- 기존 값 prefill
- 이미 대장·결재에 사용 중인 유형도 이름·설명·기본 면허증명·상태 변경 가능
- 이름 변경 시 기존 레코드 유형 라벨 즉시 반영
3️⃣ 리스트 뷰
| 이름 | 설명 | 상태 | 관리 |
|---|---|---|---|
| 간호사 | 간호사 면허 관리 | 활성 | ✏️ 🗑️ |
| 물리치료사 | - | 활성 | ✏️ 🗑️ |
| 영양사(커스텀) | 병원 자체 분류 | 비활성 | ✏️ 🗑️ |
- 컬럼 정의
- 이름 : 유형 표시명 (대장·필터·Works·직원 추가에 노출)
- 설명 : 없으면
- - 상태 :
활성/비활성배지- 비활성 → Works 제출 옵션·직원 추가 유형 체크·대장 필터 미노출
- 기존 대장 레코드는 유지 (읽기 가능)
- 관리 : [수정] [삭제] 아이콘
- 정렬 : 최근 추가 순 (상단)
- 빈 목록 :
등록된 자격 유형이 없어요. 유형을 추가해 주세요.
4️⃣ 기본 제공 유형
- 현재(2026.06.29.)기준으로 자동으로 셋팅되는 유형을 제공
- 조직 최초 진입 시 시스템 기본 유형 일괄 제공 (현행 enum 기준)
- 간호사, 간호조무사, 물리치료사, 작업치료사, 언어치료사, 방사선사, 임상병리사, 약사, 영양사, 사회복지사, 의사, 치과의사, 응급구조사, 요양보호사, 기타
- 기본 유형도 이름·설명·상태 수정 가능
- 기본 유형 삭제/수정 가능
5️⃣ 관리의 [삭제] 버튼이 제공하는 팝업 ① 활성 상태
- title :
삭제 - message :
{유형 이름} 유형을 삭제할 수 없어요. 먼저 비활성 상태로 변경한 뒤 삭제할 수 있어요. - [확인]만 제공
② 비활성 + 해당 유형 사용 이력 있음 (대장 레코드·Works 제출·결재)
- title :
삭제 - message : `{유형 이름} 등록된 기록이 있어요. 등록된 기록이 있으면 삭제할 수 없어요.
- [확인]만 제공
③ 비활성 + 사용 이력 없음
- title :
삭제 - message :
{유형 이름} 유형을 삭제할까요? - [취소], [X] : 해당 팝업 닫힘
⚠️ 구현 현황 · 하드닝 후보 (2026-08-13)
CODE가 진실이에요. 자격증/면허 대장은 공단 자격 신고를 먹이는 도메인이라 조용한 데이터 누락이 특히 위험해요.
EmployeeCertification 은 상태/승인 필드가 없음 — 승인 상태는 파생
EmployeeCertification엔티티에는 status/approval 컬럼이 없어요(employee-certification.entity.ts). 승인 상태는sourceDocumentId+registeredAt두 nullable 컬럼에서 파생돼요.- 관리자 직접 등록 → 즉시 등록(
registeredAt= 오늘,employee-certification.router.ts:213). - Works 제출 → 승인 전까지 대장에서 숨김(대장 조회에
(sourceDocumentId IS NULL OR registeredAt IS NOT NULL)필터 적용). - 등록일(대장 노출일) = 결재 승인일(
team-manager.router.ts:1802registeredAt = approvedAt).
- 관리자 직접 등록 → 즉시 등록(
Works 자격증사본 제출이 비트랜잭션 이중 쓰기 [기능 수정 후보 — 조용한 누락]
- Works 에서 자격증사본을 제출하면 employee-app 이 비트랜잭션 2개 호출을 연달아 해요:
document.upload(Document, category=certification) →employeeCertification.submitMy(생성 후sourceDocumentId로 Document 연결). - 두 번째 호출이 실패하면 링크 없는 Document 만 남아요. 이후 결재 승인 시
EmployeeCertification갱신이 0행이 되어 — 문서는 "승인" 이지만 대장엔 아무것도 안 들어가요(에러 없음).
두 번째 승인 경로 document.review 가 cert→대장 파이프라인을 우회 [판단 필요]
- 정상 cert 승인은 team-manager 경로(
documentManagement.approve)가registeredAt을 세팅해 대장에 노출시켜요(team-manager.router.ts:1802). - 그런데 별도 엔드포인트
document.review(document.router.ts:182-201)는Document.status만 APPROVED/REJECTED 로 바꾸고EmployeeCertification.registeredAt을 건드리지 않아요. 자격증 문서를 이 경로로 승인하면registeredAt이 영구 null → 대장/요약/export 에 영원히 미노출돼요. - 두 승인 엔드포인트의 동작이 비동등해서 잠재적 조용한 파손(silent breakage)이에요.
결재 승인/반려 시 직원 알림 없음
- 문서·자격증 결재는 제출 시에만 결재자에게 알림을 보내고(
document.router.ts:124-128새 문서 제출), 승인/반려 시 직원(제출자)에게 알림이 없어요. 알림 문서alarm.md의 문서/자격증 표는 승인/반려 → 신청자 본인 행을 담고 있으나 미구현이에요(백로그 DOC-BL-029, flow 문서의 optional 표기와 일치). - [확인] : 삭제 · 목록 갱신