## 한 줄 목표 업무함에서 여러 Task를 하나의 **Case**로 묶어 보고, Case를 만들 당시의 Workflow 순서와 조건을 Snapshot으로 고정합니다. > 쉽게 말하면: 근로자 한 명의 3년 만료 연장이라는 큰 업무 폴더 안에 재계약·취업활동기간 연장·체류기간 연장 Task를 넣는 기능입니다. ## API 범위 - [x] `GET /api/v1/cases` — 업무함 Case 목록 - [x] `GET /api/v1/cases/{caseId}/projection` — 선택한 Case의 전체 진행 상황 MVP에서는 별도 `POST /cases`를 만들지 않습니다. #24의 Candidate 채택 시 Server가 Case와 Task를 한 Transaction에서 생성하거나 기존 결과를 재사용합니다. ## main에 구현됨 - [x] Case 모델과 Flyway migration - [x] company·worker·제목·상태·우선순위·생성자 관리 - [x] Workflow version·단계 순서·조건 Snapshot - [x] 목록의 근로자 표시명·진행률·현재 Task·D-day·우선순위 - [x] Projection의 Task·Checklist·Document 준비도·Approval·Worker 응답·Evidence - [x] tenant 검사와 페이지네이션 - [x] 취소 Case 표시, 고정 정렬, 현재 Task 선택 규칙 - [x] OpenAPI와 PostgreSQL tenant·migration 검증 완료 PR: #88 ## 남은 연결 - [ ] #24 Candidate 채택 시 Case와 3개 연장 Task 원자적 생성 - [ ] 같은 Candidate 결정 재전송 시 Case·Task 중복 생성 방지 - [ ] 생성된 caseId·taskIds를 CandidateDecision에 연결 - [ ] 대표 흐름 통합 테스트 이 연결이 완료되면 #83을 닫습니다. ## 대표 예시 ```text Case: 응웬반A 3년 만료 연장 ├─ Task 1: 재계약 ├─ Task 2: 취업활동기간 연장 └─ Task 3: 체류기간 연장 ``` Workflow Catalog가 나중에 바뀌어도 이미 시작한 Case는 생성 당시 Snapshot을 사용합니다. ## 작업 경계 - Client 화면 구현 제외 - AI 자동 승인·근로자 자동 발송·기관 자동 제출 제외 - 범용 BPMN 엔진 제외 - 전체 Intent Task 유형 확장은 #85 M4/P1 - Worker 날짜는 #84, Document는 #80 담당 영역 ## 관계 - Parent: #2 - 생성 진입점: #24 Candidate decision - 기존 Case 필터 기반: #71 - Worker 날짜 기반: #84 - 대표 검증: #10
한 줄 목표
업무함에서 여러 Task를 하나의 Case로 묶어 보고, Case를 만들 당시의 Workflow 순서와 조건을 Snapshot으로 고정합니다.
API 범위
GET /api/v1/cases— 업무함 Case 목록GET /api/v1/cases/{caseId}/projection— 선택한 Case의 전체 진행 상황MVP에서는 별도
POST /cases를 만들지 않습니다. #24의 Candidate 채택 시 Server가 Case와 Task를 한 Transaction에서 생성하거나 기존 결과를 재사용합니다.main에 구현됨
완료 PR: #88
남은 연결
이 연결이 완료되면 #83을 닫습니다.
대표 예시
Workflow Catalog가 나중에 바뀌어도 이미 시작한 Case는 생성 당시 Snapshot을 사용합니다.
작업 경계
관계