Skip to content

feat: Worker E-9 업무용 4개 날짜·비자정보 확장 - #107

Merged
chaeliki merged 8 commits into
mainfrom
feat/84-worker-e9-fields
Aug 7, 2026
Merged

feat: Worker E-9 업무용 4개 날짜·비자정보 확장#107
chaeliki merged 8 commits into
mainfrom
feat/84-worker-e9-fields

Conversation

@chaeliki

@chaeliki chaeliki commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

왜 필요한가요?

Closes #84

E-9 재계약·연장 판단에 "계약 종료일", "취업활동 가능 종료일", "체류 만료일",
"고용허가 기준 종료일"이 서로 다른 의미인데, 기존 Worker는 contract_end_date와
stay_expiry_date만 있어 한 필드로 여러 의미를 다루면 잘못된 D-day와 서류가
생성될 위험이 있었습니다.

완료된 범위

  • Flyway V29: worker에 visa_type, employment_permit_end_date,
    employment_activity_end_date 컬럼 추가
  • Domain·Entity·Command·DTO·Response 전체 반영 (등록/수정/단건/목록 4개 API)
  • GET /workers 필터를 stayExpiryBefore/contractEndBefore/
    employmentPermitEndBefore/employmentActivityEndBefore 4개로 분리
  • null·날짜 경계·부분 수정·migration 적용 통합 테스트 4개 추가
  • 데모 시드: visa_type="E-9" 33명 전체 반영, employment_permit_end_date/
    employment_activity_end_date를 stay_expiry_date 기반으로 32명에 반영

결정 사항

  • 3개 필드 전부 nullable 기존 필드(contract_end_date 등)와 동일 정책,
    등록 시점에 값을 모를 수 있음
  • visa_type은 String 기존 nationality_code/preferred_language와
    동일 패턴, E-9→E-7-4 전환 등 향후 비자 유형 확장을 코드 배포 없이
    수용하기 위함
  • Worker 도메인엔 필드만 준비, TaskWorkflowService/
    AiCandidateTaskCreationService의 slot 매핑 switch문은 손대지 않음
    knowledge의 required_slots.yaml에 아직 canonical key로
    등록되지 않았고, #81도 현재 3개 필드만 지원

확인 부탁드리는 부분

  1. employment_permit_end_date/employment_activity_end_date 입력 경로:
    #83의 "3년 만료 연장 Case" 예시(재계약/취업활동기간 연장/체류기간 연장
    Task 3개)를 통해, 이 값은 HR이 미리 계산하는 게 아니라 "취업활동기간
    연장" 등 관련 Task가 처리 완료된 결과로 채워지는 흐름으로 이해했습니다.
    맞는 이해인지 확인 부탁드립니다.

  2. "Agent Slot Resolver canonical key 연결"의 범위: knowledge의
    required_slots.yaml과 #81의 "고정 Resolver"를 확인한 결과, 이번 PR은
    필드명을 canonical key 관례에 맞추는 것까지만 하고 실제 등록·연결은
    [AI Run][P0] Agent 요청 Slot 조회·재호출 오케스트레이션 구현 #74/[AI 연동] canonical Slot 조회와 Agent 재호출 구현 #81 후속 작업으로 이해했습니다. 맞는지 확인 부탁드립니다.

  3. AiCandidateTaskCreationService.dueDate(): EMPLOYMENT_PERIOD_EXTENSION
    Task의 dueDate 계산이 stayExpiryDate/contractEndDate만 참고합니다.
    employment_activity_end_date가 knowledge에 등록되면 이 계산에도
    반영을 고려해주시면 좋을 것 같습니다.

어떻게 검증했나요?

  • ./gradlew clean test 전체 통과
  • e9FieldsAreStoredIndependentlyAndNullByDefault 4개 날짜 독립 저장·조회
  • e9FieldsAreNullableAndOmittedFieldsStayNull null 기본값
  • patchUpdatesEmploymentPermitEndDateIndependentlyOfOtherDates 부분 수정
  • e9FieldsAcceptFarFutureDateBoundary 날짜 경계
  • 4개 API(등록/수정/단건/목록) 전체에서 새 필드 반영 여부 코드로 직접 확인

참고

@chaeliki
chaeliki marked this pull request as ready for review August 7, 2026 05:46
@chaeliki
chaeliki requested review from hywznn and krestar August 7, 2026 05:47
@chaeliki chaeliki added area:server Spring Boot API·도메인·DB·tenant·Task Workflow 영역; Prompt·모델·Provider 구현 제외 priority:P0 MVP 진행을 막는 최우선 핵심 작업 security:privacy 개인정보·접근권한·토큰·보안 영향이 있는 작업 type:feature 사용자 또는 Agent가 사용하는 기능 개발 labels Aug 7, 2026
@hywznn

hywznn commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

이해하신 내용 맞습니다
그리고 필드값 늘어난거랑 데모시드에서 해당 부분 추가된 부분도 잘 봤습니다
네이밍이랑 decription 관련해서 친화적으로 바뀐 것도 확인했습니다 굿굿입니다 수고하셨어요

@chaeliki
chaeliki merged commit 2516f3a into main Aug 7, 2026
4 of 5 checks passed
@chaeliki
chaeliki deleted the feat/84-worker-e9-fields branch August 7, 2026 06:05
@chaeliki chaeliki self-assigned this Aug 7, 2026
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 개인정보·접근권한·토큰·보안 영향이 있는 작업 type:feature 사용자 또는 Agent가 사용하는 기능 개발

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Worker][P0] E-9 업무용 4개 날짜·비자정보 확장

2 participants