한 줄 목표
AI가 만든 업무가 사람 승인 없이 전달되지 않게 하고, AI 원본·HR 수정·승인 버전·상태 변경을 개인정보 없이 추적 가능한 감사 기록으로 남깁니다.
HITL 승인에서 저장할 것
- AI가 제안한 원본 snapshot
- HR이 수정한 최종 snapshot
- 변경된 field 목록과 안전한 before/after 요약
- 승인자, 승인 시각, 승인 대상 Task version
- 승인/반려 사유와
request_id, trace_id
- 사용한 agent/model/prompt/context/workflow version reference
날짜, 금액, 대상 근로자, 문서 종류, 안내 내용처럼 업무 결과에 영향을 주는 핵심 field가 승인 뒤 바뀌면 기존 승인을 무효화하고 READY_FOR_REVIEW로 돌려 재승인을 요구합니다.
UserRole과 ActorType 구분
ADMIN, HR, VIEWER는 로그인 사용자의 UserRole입니다.
HR_USER는 로그인 사용자의 감사 ActorType이며 Audit에 실제 Role snapshot을 함께 남깁니다.
WORKER_LINK는 보안 링크를 사용한 근로자 행동입니다.
AI_AGENT는 AI Run이 만든 제안의 출처일 뿐 로그인·승인 Role이 아닙니다.
SYSTEM_RULE은 만료·재시도·복구 같은 정해진 Server command입니다.
Actor ID가 없거나 공개 token actor인 경우에도 원본 token 대신 안전한 reference만 기록합니다.
소유 API 8개
approval-requests는 필수정보가 충족된 Task를 READY_FOR_REVIEW로 옮깁니다. 반려는 현재 승인 요청을 종료하고 사유를 남긴 뒤 READY_FOR_REVIEW → DRAFT로 되돌립니다. 외부 제출은 제출처·시각·안전한 reference를 저장하고 허용 상태에서 WAITING_EXTERNAL로 전이합니다.
activities가 timeline의 canonical API이므로 별도 /timeline을 만들지 않습니다. Audit API는 actor/event/resource/trace/date cursor filter를 제공하되 원문 내부 payload를 그대로 노출하지 않습니다.
감사 이벤트 최소 필드
id, company_id, actor_type, 안전한 actor_id, 당시 user_role
action, target_type, target_id
request_id, trace_id, event_version
- 마스킹된
change_summary 또는 안전한 snapshot reference
created_at
- IP·User-Agent는 기본 미저장. 필요 시 ADR에서 목적, 접근 역할, 마스킹/hash, 보존기간, 삭제 책임을 함께 확정
JWT, Worker Link 원본 token, 외국인등록번호, 여권번호, 계좌번호, 전화번호, 외부 API Key, 전체 Prompt는 저장하지 않습니다.
구현 범위
반드시 기록할 행동
- Task/AiRun 후보 생성·확정·폐기
- Task 수정과 핵심값 변경
- 승인 요청·승인·반려·승인 무효화
- Worker Link 발급·회전·폐기·조회·응답·문서 제출
- 외부기관 제출·대기, 증빙 연결, 완료·실패·취소
- 필요한 인증 실패와 권한 거부
완료 조건
이번 이슈에서 하지 않는 것
선행/후속 관계
구현 PR
용어 도움말
- HITL: Human-in-the-loop. 중요한 AI 결과를 사람이 검토·승인하는 구조입니다.
- Snapshot: 승인 시점의 내용을 나중 변경과 구분해 보존한 값입니다.
- Projection: 내부 기록에서 화면에 필요한 안전한 field만 골라 만든 조회 모델입니다.
한 줄 목표
AI가 만든 업무가 사람 승인 없이 전달되지 않게 하고, AI 원본·HR 수정·승인 버전·상태 변경을 개인정보 없이 추적 가능한 감사 기록으로 남깁니다.
HITL 승인에서 저장할 것
request_id,trace_id날짜, 금액, 대상 근로자, 문서 종류, 안내 내용처럼 업무 결과에 영향을 주는 핵심 field가 승인 뒤 바뀌면 기존 승인을 무효화하고
READY_FOR_REVIEW로 돌려 재승인을 요구합니다.UserRole과 ActorType 구분
ADMIN,HR,VIEWER는 로그인 사용자의UserRole입니다.HR_USER는 로그인 사용자의 감사ActorType이며 Audit에 실제 Role snapshot을 함께 남깁니다.WORKER_LINK는 보안 링크를 사용한 근로자 행동입니다.AI_AGENT는 AI Run이 만든 제안의 출처일 뿐 로그인·승인 Role이 아닙니다.SYSTEM_RULE은 만료·재시도·복구 같은 정해진 Server command입니다.Actor ID가 없거나 공개 token actor인 경우에도 원본 token 대신 안전한 reference만 기록합니다.
소유 API 8개
POST /api/v1/tasks/{taskId}/approval-requestsPOST /api/v1/tasks/{taskId}/approvePOST /api/v1/tasks/{taskId}/rejectPOST /api/v1/tasks/{taskId}/external-submissionsPOST /api/v1/tasks/{taskId}/evidencePOST /api/v1/tasks/{taskId}/completeGET /api/v1/tasks/{taskId}/activities— 한 업무의 화면용 timelineGET /api/v1/audit-events— ADMIN용 사업장 감사 검색approval-requests는 필수정보가 충족된 Task를READY_FOR_REVIEW로 옮깁니다. 반려는 현재 승인 요청을 종료하고 사유를 남긴 뒤READY_FOR_REVIEW → DRAFT로 되돌립니다. 외부 제출은 제출처·시각·안전한 reference를 저장하고 허용 상태에서WAITING_EXTERNAL로 전이합니다.activities가 timeline의 canonical API이므로 별도/timeline을 만들지 않습니다. Audit API는 actor/event/resource/trace/date cursor filter를 제공하되 원문 내부 payload를 그대로 노출하지 않습니다.감사 이벤트 최소 필드
id,company_id,actor_type, 안전한actor_id, 당시user_roleaction,target_type,target_idrequest_id,trace_id,event_versionchange_summary또는 안전한 snapshot referencecreated_atJWT, Worker Link 원본 token, 외국인등록번호, 여권번호, 계좌번호, 전화번호, 외부 API Key, 전체 Prompt는 저장하지 않습니다.
구현 범위
/api/v1/audit-eventstenant scope, ADMIN 권한, cursor pagination반드시 기록할 행동
완료 조건
ApprovalControlPort를 사용해 검증합니다.DRAFT로 돌아가고 이전 승인 요청을 재사용할 수 없습니다.WAITING_EXTERNAL로 전이할 수 없습니다.이번 이슈에서 하지 않는 것
선행/후속 관계
구현 PR
용어 도움말