Skip to content

feat: 승인·감사 워크플로우 구현 - #37

Merged
hywznn merged 14 commits into
mainfrom
agent/11-approval-audit
Jul 24, 2026
Merged

feat: 승인·감사 워크플로우 구현#37
hywznn merged 14 commits into
mainfrom
agent/11-approval-audit

Conversation

@hywznn

@hywznn hywznn commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

왜 필요한가요?

Closes #11
Refs #5, #6, #23

AI가 만든 업무를 사람 승인 없이 전달하지 않고, 승인 시점의 내용과 이후 상태 변경을 사업장 범위 안에서 추적하기 위한 기반입니다.

Worker·Document 스키마는 병합된 PR #40의 canonical V3를 사용합니다. 이 PR은 Task·Approval이 소유하는 V4·V5만 추가합니다.

무엇이 바뀌나요?

  • Task·Checklist·전이 이력 V4와 Approval·Submission·Evidence·Audit V5 migration
  • DRAFT → READY_FOR_REVIEW → APPROVED → WAITING_EXTERNAL → COMPLETED 상태 guard
  • 승인 요청·승인·반려·외부 제출·증빙·완료 API 6개
  • 업무 활동 timeline과 ADMIN 감사 검색 API 2개
  • AI 원본·HR 최종본·changed fields·source versions 승인 snapshot
  • snapshot의 여권·외국인등록·전화·계좌·token·password·전체 Prompt 유입 차단
  • JPA version과 승인 대상 content_revision + fingerprint 분리
  • JWT ActorContext 기반 company scope, HR/ADMIN 쓰기, VIEWER timeline, ADMIN audit 권한
  • 상태 변경·승인 record·감사 event의 동일 transaction 처리
  • stale·중복 승인 요청은 pending approval 조회보다 Task version을 먼저 검사해 일관된 409 CONCURRENT_MODIFICATION 반환

#40 Worker 계약 반영

  • 중복 V3__create_worker_core.sql 제거
  • work_status, stay_expiry_date, nationality_code, RESIGNED 계약 반영
  • (worker_id, company_id) tenant-aware FK 유지
  • Worker·WorkerDocument 통합 테스트가 V4·V5 데이터와 함께 실행되도록 정리

대표 API

  • POST /api/v1/tasks/{taskId}/approval-requests
  • POST /api/v1/tasks/{taskId}/approve
  • POST /api/v1/tasks/{taskId}/reject
  • POST /api/v1/tasks/{taskId}/external-submissions
  • POST /api/v1/tasks/{taskId}/evidence
  • POST /api/v1/tasks/{taskId}/complete
  • GET /api/v1/tasks/{taskId}/activities
  • GET /api/v1/audit-events

검증

  • ./gradlew clean test
  • 승인 → 제출 → 증빙 → 완료 대표 HTTP 흐름
  • 반려 후 DRAFT 복귀와 이전 승인 재사용 차단
  • 민감정보 snapshot·감사 저장 실패 시 transaction rollback
  • VIEWER 쓰기 차단, ADMIN 감사 검색, 타 사업장 404
  • stale version·중복 승인 409와 동시 승인 단일 성공
  • 동시 승인 테스트 로컬 반복 실행
  • OpenAPI 8개 operation과 공통 오류 계약
  • 최신 GitHub Actions Test and build 통과

ADR·저장소 경계

리뷰에서 중점 확인할 부분

  • PR feat: 근로자 기본정보·서류 메타데이터 API 구현 #40 canonical V3와 V4·V5 migration 경계
  • 승인 snapshot에 필요한 값은 남기면서 개인정보·Secret을 차단하는 기준
  • Task 전이와 승인 record, 감사 event가 같은 transaction에서 유지되는지
  • 중복 승인 시 일관된 409와 단일 승인·감사 기록이 보장되는지
  • ADMIN/HR/VIEWER와 company scope가 API·application 양쪽에 적용됐는지

@hywznn hywznn added the area:server Spring Boot API·도메인·DB·tenant·Task Workflow 영역; Prompt·모델·Provider 구현 제외 label Jul 23, 2026
@hywznn
hywznn requested a review from chaeliki July 23, 2026 06:57
@hywznn hywznn added priority:P0 MVP 진행을 막는 최우선 핵심 작업 security:privacy 개인정보·접근권한·토큰·보안 영향이 있는 작업 labels Jul 23, 2026
@hywznn

hywznn commented Jul 23, 2026

Copy link
Copy Markdown
Contributor Author

리뷰 전에 확인할 마지막 보완사항입니다.

  • Client가 보내는 requirements_satisfied flag를 제거했습니다.
  • Server가 현재 Task 상태와 DB의 필수 checklist 완료 여부를 직접 계산합니다.
  • 미완료 필수 checklist가 있으면 승인 요청 전체를 422 TASK_REQUIREMENTS_MISSING으로 거부합니다.
  • PostgreSQL migration fixture와 동시 승인 경쟁 test까지 포함해 Test and build가 통과했습니다.

따라서 화면 값을 조작해 READY_FOR_REVIEW로 우회하는 경로는 없습니다.

@chaeliki chaeliki left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

V3 관련해서 조율이 필요할 것 같습니다.
일단 저도 PR 드래프트 올려두고 자러가겠습니다..!! 수고많으셨어요!!

hywznn added 13 commits July 24, 2026 11:13
승인 스냅샷, 외부 제출, 증빙, 감사 이벤트를 V5 마이그레이션과 JPA 저장소로 구성합니다.
사업장 범위 외래키와 상태·버전 제약을 추가하고 감사 이벤트는 일반 수정·삭제 경로 없이 append 방식으로만 기록합니다.
승인 요청·승인·반려·외부 제출·증빙·완료 command를 상태 전이와 같은 transaction에서 처리합니다.
민감정보를 차단하는 snapshot 검증과 fingerprint, request/trace 감사 기록, 사업장 범위 활동 이력과 ADMIN cursor 검색 API를 추가합니다.
JPA 동시성 version과 승인 대상 내용의 content_revision을 분리합니다.
승인은 content revision과 핵심값 fingerprint가 모두 일치할 때만 재사용하고, 중요값 변경 시 revision을 증가시켜 기존 승인을 무효화합니다.
ADR-0003에 맞춰 외부 제출과 완료의 허용 상태도 보정합니다.
요청·응답 필드를 명시적인 snake_case 계약으로 고정하고 보호 API의 401·403 및 409·422 오류를 OpenAPI에 문서화합니다.
Task 상태 전이와 동시성 오류 코드를 Accepted ADR의 안정적인 코드로 통일합니다.
정상 승인·반려 기반 상태 전이, 민감정보 유입 시 transaction rollback, 역할·사업장 격리, stale version, cursor pagination을 HTTP 통합 테스트로 검증합니다.
PostgreSQL migration 계약에도 Worker·Task·Approval·Audit schema와 tenant-aware FK를 추가합니다.
현재 구현 API와 migration 목록을 갱신하고 승인 snapshot, version·revision 구분, 역할·감사 조회 규칙을 초보자도 따라갈 수 있게 설명합니다.
반려된 승인 요청의 재사용 차단, 외부 제출 reference 누락 시 상태 보존, 감사 이벤트 저장 실패 시 Task·Approval·전이 이력 전체 rollback을 통합 테스트합니다.
동일 Task version에 대한 두 승인 요청을 동시에 실행해 하나만 성공하고 다른 요청은 409로 차단되며 승인·감사 기록도 하나만 남는지 반복 검증합니다.
PostgreSQL migration 계약 테스트의 Task INSERT에 필수 created_at·updated_at을 명시해 실제 V4 NOT NULL 제약과 일치시킵니다.
Client가 requirements_satisfied 값을 보내는 계약을 제거하고 Task 상태와 미완료 필수 체크리스트를 서버가 직접 조회해 승인 검토 가능 여부를 판단합니다.
필수 체크리스트가 남은 Task는 승인 요청·상태 전이·감사 기록이 생성되지 않는 통합 테스트를 추가합니다.
@hywznn
hywznn force-pushed the agent/11-approval-audit branch from 00e7f38 to 8e1f8a5 Compare July 24, 2026 02:16
@hywznn
hywznn requested a review from chaeliki July 24, 2026 02:25
@hywznn
hywznn merged commit 00b48e0 into main Jul 24, 2026
1 check passed
@hywznn
hywznn deleted the agent/11-approval-audit branch July 24, 2026 02:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:server Spring Boot API·도메인·DB·tenant·Task Workflow 영역; Prompt·모델·Provider 구현 제외 priority:P0 MVP 진행을 막는 최우선 핵심 작업 security:privacy 개인정보·접근권한·토큰·보안 영향이 있는 작업

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Approval & Audit] 승인·반려·외부제출·증빙·완료·감사 로그 구현

2 participants