Skip to content

HBGA211_이수현황·이수기록

(Hereby) 총무 > 이수현황·이수기록

총무 (HBGA)
대상 사용자조건1 [GA_ADMIN] / 조건2 [SUPER_ADMIN]
프로토타입TBU
관련 정책[[POL_법정의무교육]]
Statusreview
Owner카나 (PM)

개요

  • 교육 목록(HBGA210)에서 "이수현황" 진입 시의 인라인 서브뷰(모달 아님).
  • 특정 교육의 직원별 이수기록(training_completions)을 조회한다.
  • "+ 이수기록 추가" 모달로 신규 기록을 저장하고, "← 목록"으로 교육 관리 목록에 복귀한다.
  • 제목은 "{교육명} - 이수현황"(예 "555555 - 이수현황"), 데이터 없으면 "데이터가 없어요.".

문서 히스토리

날짜작성자변경 내용
2026-07-06카나PM최초 작성
2026-07-10카나PM라이브 기능 검토 반영
2026-07-13카나PM버튼 행동 명세 보강
2026-07-21카나PMGC700 깊이 재작성 + 확정 스타일
2026-07-21카나PMTC 크로스체크 확정분 반영 (🟡)

Data I/O

Server → Client

변수엔티티.컬럼값 없을 때비고
$mandatory_trainings (name)-제목 "{교육명} - 이수현황"에 name 표시
$training_completions[] (employeeId/completedDate/expiryDate/hours/provider/certificateNumber/notes)"데이터가 없어요."직원별 이수기록 목록. 목록 소스 = generalAffairs.training.completions (FK mandatoryTrainingId) (TC 확정: 05:5.3)

Client → Server

액션전달 값tRPC procedure권한 토큰
이수기록 추가{mandatoryTrainingId, employeeId, completedDate, expiryDate, hours, notes} (+provider/certificateNumber)generalAffairs.training.addCompletion() (TC 확정: 05:5.3) — 이전 추정 trainingCompletion.create 는 실재하지 않음(정정). FK = mandatoryTrainingIdGA_ADMIN

화면 플로우

이수현황 사양표

번호항목/기능명타입사양 및 기능 설명연관/영향 범위비고
00노출 조건-교육 row "이수현황" 선택 시 인라인 서브뷰로 전환 (모달 아님)[[HBGA210_교육 관리]]
01초기 상태-백링크 + 제목 + "+ 이수기록 추가" + 직원별 이수기록 목록(또는 Empty) 노출
10목록 복귀Button• 교육 관리 목록으로 돌아가는 백링크
• 클릭 시: "← 목록" → 교육 목록 복귀
[[HBGA210_교육 관리]]
20제목Text• 대상 교육명을 표기하는 헤더 "{교육명} - 이수현황" (예 "555555 - 이수현황")mandatory_trainings.name
30이수기록 추가Button• 신규 이수기록을 생성하는 진입 버튼
• 클릭 시: "이수기록 추가" 모달 오픈 (필드는 하단 모달 사양표)
training_completions create · 이수기록 추가 모달 사양표
40이수기록 목록Table• 직원별 이수기록을 나열하는 그리드 (training_completions[])training_completions컬럼 라이브 미확인
60AI — 이수증 OCR 초안AI/Suggest• 이수증 이미지/PDF에서 교육기관·수료번호·이수일·이수시간을 추출해 폼을 채우는 초안 (greenfield)
• 클릭 시: TBU
training_completionsTBU: ga.completionOcrDraft, 사람 저장
40-EEmptyText• 이수기록 없을 때 노출 "데이터가 없어요."실재 empty 문구

이수기록 추가 모달 사양표

번호항목/기능명타입사양 및 기능 설명연관/영향 범위비고
00노출 조건-"+ 이수기록 추가" 클릭 시 모달 오픈이수현황 사양표 30
10제목Text• 모달 헤더 "이수기록 추가"
ㄴ11직원 선택Dropdown/Search• 이수 직원을 선택하는 필수 필드 "직원 선택 *"
• 입력 시: 저장 활성 조건 충족
Employee / employeeId필수
ㄴ12이수일DatePicker• 이수일을 지정하는 필수 필드 "이수일 *"
• 입력 시: 저장 활성 조건 충족
completedDate필수
ㄴ13만료일DatePicker• 만료일 지정 "만료일"expiryDate
ㄴ14이수시간Input• 이수시간 입력 "이수시간"hours (numeric 5,1)
ㄴ15교육기관Input• 교육기관 입력 "교육기관"provider
ㄴ16수료번호Input• 수료번호 입력 "수료번호"certificateNumber감사 증빙
ㄴ17비고Input Box• 비고 입력 "비고"notes
ㄴ18이수증 첨부Upload• 이수증 이미지/PDF를 첨부하는 업로드
• 클릭 시: TBU
문서 저장소TBU: 라이브 미확인
20취소Button• 모달을 닫는 버튼
• 클릭 시: 모달 닫기 (변경 없음)
30저장Button• 입력값으로 이수기록을 생성하는 버튼
• 클릭 시: generalAffairs.training.addCompletion({mandatoryTrainingId, employeeId, completedDate, expiryDate, hours, notes}) 실행 (필수 입력 전 disabled)
 - STEP1 직원·이수일 입력 전 disabled
 - STEP2 저장 성공 시 이수현황 갱신
generalAffairs.training.addCompletion (FK mandatoryTrainingId)mutation, 사람 저장 (TC 확정: 05:5.3)

권한·상태 분기 요약

시나리오트리거결과비고
조건1 [GA_ADMIN]교육 row "이수현황" 진입이수현황 서브뷰 노출
CASE01 [이수기록 있음]서브뷰 로드직원별 이수기록 목록 노출
CASE02 [이수기록 없음]서브뷰 로드"데이터가 없어요." 노출실재 empty 문구
CASE03 [기록 추가]"+ 이수기록 추가" → 저장이수기록 생성 → 목록 갱신직원·이수일 전 저장 disabled

Open Question

  • 이수기록 목록 컬럼 구성(직원/이수일/만료일/이수시간 등) 라이브 미확인 = TBU
  • 이수증 첨부(업로드·저장소) 라이브 미확인 = TBU
  • AI 이수증 OCR 초안(ga.completionOcrDraft) — greenfield, 진입 UI = TBU
  • 대상 사용자 token 내부 key([GA_ADMIN]/[SUPER_ADMIN]) 미확정 = TBU
  • tRPC procedure/권한 토큰 추정 — 사람 확정 필요 = TBU