HBGA210_교육 관리
(Hereby) 총무 > 교육 관리
| 앱 | 총무 (HBGA) |
| 대상 사용자 | 조건1 [GA_ADMIN] / 조건2 [SUPER_ADMIN] |
| 프로토타입 | TBU |
| 관련 정책 | [[POL_법정의무교육]] |
| Status | review |
| Owner | 카나 (PM) |
개요
- 사이드바 "총무" 메뉴의 실제 화면 = 법정의무교육 정의 관리(mandatory_trainings).
- 카테고리 탭 5종 + "교육명 검색..." + "+ 교육 추가" + 8컬럼 그리드로 구성한다.
- 그리드에 과태료를 정량 노출(mandatory_trainings.penaltyAmount, 예 "527,852원")해 미이수 리스크를 금액으로 보여준다 — 법무·노무 검수 대상.
- row action = "이수현황"(HBGA211) / "수정" / "삭제".
문서 히스토리
| 날짜 | 작성자 | 팀 | 변경 내용 |
|---|---|---|---|
| 2026-07-06 | 카나 | PM | 최초 작성 |
| 2026-07-10 | 카나 | PM | 라이브 기능 검토 반영 |
| 2026-07-13 | 카나 | PM | 버튼 행동 명세 보강 |
| 2026-07-21 | 카나 | PM | GC700 깊이 재작성 + 확정 스타일 |
Data I/O
Server → Client
| 변수 | 엔티티.컬럼 | 값 없을 때 | 비고 |
|---|---|---|---|
| $ | mandatory_trainings[] (name/category/frequency/requiredHours/targetAudience/penaltyAmount/isActive) | 목록 0건 (Empty 처리) | 8컬럼 그리드 소스 |
| $ | mandatory_trainings.penaltyAmount | 미설정 → 표기 규칙 TBU | 과태료 정량 노출, 법무·노무 검수 |
| $ | 페이지네이션 (추정) | 1페이지 | 예 "총 2건 중 1-2건" |
Client → Server
| 액션 | 전달 값 | tRPC procedure | 권한 토큰 |
|---|---|---|---|
| 교육 추가 | name, category, legalBasis, frequency, requiredHours, targetAudience, penaltyAmount, penaltyDescription, description, isActive | sdk.generalAffairs.training.create() (추정) | ga:training:write (추정) |
| 교육 수정 | 상동 + trainingId | sdk.generalAffairs.training.update() (추정) | ga:training:write (추정) |
| 교육 삭제 | trainingId | sdk.generalAffairs.training.delete() (추정) | ga:training:write (추정) |
화면 플로우
교육 관리 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 노출 조건 | - | 사이드바 "총무" 메뉴 클릭 시 /general-affairs/training 진입. 조건1 [GA_ADMIN] 이상 | [[HBGA100_Shell·사이드바]] | 메뉴 라벨 "총무"=교육 관리 |
| 01 | 초기 상태 | - | 카테고리 탭 "전체" 활성 + 검색 비어있음 + 8컬럼 목록 노출 | ||
| 10 | 카테고리 탭 | Tab | • 카테고리별로 교육 목록을 거르는 탭 5종 "전체" / "법정의무교육" / "인증필수교육" / "전문교육" / "기타" • 클릭 시: 해당 카테고리로 목록 필터 전환 - CASE01 ["전체"]: 전 카테고리 노출 - CASE02 [특정 카테고리]: 일치 교육만 노출 | mandatory_trainings.category | 5종 |
| 20 | 검색 | Search | • 교육명으로 목록을 거르는 입력 • 입력 시: 일치 교육만 표시(client/server filter) - CASE01 [결과 없음]: 빈 목록 | client/server filter | placeholder "교육명 검색..." |
| 30 | 교육 추가 | Button | • 신규 교육 정의를 생성하는 진입 버튼 • 클릭 시: "교육 추가" 모달 오픈 (필드는 하단 모달 사양표) | mandatory_trainings create · 교육 추가 모달 사양표 | mutation |
| 40 | 교육 목록 | Table | • 교육 정의를 8컬럼으로 나열하는 그리드 "교육명 / 카테고리 / 주기 / 필수시간 / 대상 / 과태료 / 상태 / 관리" | mandatory_trainings | |
| ㄴ41 | row 예시 | ListItem | • 목록 행 표기 예시 "555555 / 법정의무교육 / 3년 / 15.0시간 / 7527527527 / 527,852원 / 활성" | 더미 데이터 cleanup 필요 | |
| ㄴ42 | 과태료 | Text | • 미이수 리스크를 금액으로 정량 노출하는 셀. 예 "527,852원" | penaltyAmount / penaltyDescription | 법무·노무 검수 필요 |
| ㄴ43 | row action — 이수현황 | Button | • 해당 교육의 직원별 이수현황으로 이동하는 버튼 • 클릭 시: 이수현황 인라인 서브뷰 전환 (HBGA211) | [[HBGA211_이수현황·이수기록]] | |
| ㄴ44 | row action — 수정 | Button | • 교육 정의를 수정하는 버튼 • 클릭 시: "교육 수정" 모달 오픈 (기존 값 채움) | training update | mutation |
| ㄴ45 | row action — 삭제 | Button | • 교육 정의를 삭제하는 버튼 • 클릭 시: 삭제 실행 | training delete | mutation, TBU: 삭제 컨펌 문구 라이브 미확인 |
| 50 | 페이지네이션 | Pagination | • 목록 페이지 이동 컨트롤 "« ‹ 1 › »" • 클릭 시: 해당 페이지 목록 로드 | "총 2건 중 1-2건" | |
| 60 | AI — 과태료 노출 환산 | AI/Read | • 미이수 교육·만료 임박을 근거로 잠재 과태료를 위험순 환산하는 초안 (greenfield) • 클릭 시: TBU | training + completion | TBU: complianceExposureBrief, 법무·노무 검수 |
교육 추가 모달 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 노출 조건 | - | "+ 교육 추가" 클릭 시 모달 오픈 | 교육 관리 사양표 30 | |
| 10 | 제목 | Text | • 모달 헤더 "교육 추가" | ||
| ㄴ11 | 교육명 | Input | • 교육명 입력 "교육명 *" — 저장 활성화 필수 필드 • 입력 시: 저장 버튼 disabled 해제 조건 충족 | name | 필수 |
| ㄴ12 | 카테고리 | Dropdown | • 카테고리 선택 "카테고리" | category | |
| ㄴ13 | 교육주기 | Input/Dropdown | • 교육주기 입력·선택 "교육주기" | frequency | |
| ㄴ14 | 필수시간 | Input | • 필수 이수시간 입력 "필수시간" | requiredHours | |
| ㄴ15 | 교육대상 | Input | • 교육대상 입력 "교육대상" | targetAudience | |
| ㄴ16 | 법적근거 | Input | • 법적근거 입력 "법적근거" | legalBasis | |
| ㄴ17 | 과태료 (원) | Input | • 과태료 금액 입력 "과태료 (원)" | penaltyAmount | 법무·노무 검수 |
| ㄴ18 | 과태료 설명 | Input | • 과태료 설명 입력 "과태료 설명" | penaltyDescription | |
| ㄴ19 | 설명 | Input Box | • 교육 설명 입력 "설명" | description | |
| ㄴ1A | 활성 | Checkbox | • 활성 여부 토글 "활성" 체크 • 클릭 시: isActive on/off | isActive | |
| 20 | 취소 | Button | • 모달을 닫는 버튼 • 클릭 시: 모달 닫기 (변경 없음) | ||
| 30 | 저장 | Button | • 입력값으로 교육을 생성하는 버튼 • 클릭 시: 생성 실행 (필수 입력 전 disabled) - STEP1 교육명 입력 전 disabled - STEP2 저장 성공 시 목록 갱신 | mandatory_trainings create | mutation, 사람 저장 |
권한·상태 분기 요약
| 시나리오 | 트리거 | 결과 | 비고 |
|---|---|---|---|
조건1 [GA_ADMIN] | "총무" 메뉴 진입 | 교육 목록 노출 | |
CASE01 [교육 추가] | "+ 교육 추가" → 저장 | 교육 정의 생성 → 목록 갱신 | 교육명 전 저장 disabled |
CASE02 [삭제] | row "삭제" 클릭 | 삭제 실행 | 삭제 컨펌 문구 TBU |
Open Question
- 교육 삭제 컨펌 다이얼로그 문구/유무 라이브 미확인 = TBU
- 과태료 미설정 시 그리드 표기 규칙 = TBU
- AI 과태료 노출 환산(complianceExposureBrief) — greenfield, 법무·노무 검수 및 진입 UI = TBU
- 대상 사용자 token 내부 key([GA_ADMIN]/[SUPER_ADMIN]) 미확정 = TBU
- tRPC procedure/권한 토큰 추정 — 사람 확정 필요 = TBU