Skip to content

체류기간 만료 경과 긴급 확인 흐름 구현 - #198

Merged
hywznn merged 1 commit into
mainfrom
feat/184-expired-stay
Aug 16, 2026
Merged

체류기간 만료 경과 긴급 확인 흐름 구현#198
hywznn merged 1 commit into
mainfrom
feat/184-expired-stay

Conversation

@hywznn

@hywznn hywznn commented Aug 16, 2026

Copy link
Copy Markdown
Member

왜 필요한가요?

기록상 체류기간이 지났다는 사실만으로 근로자를 퇴사 처리하거나 적법 체류 여부를 판단하면 안 됩니다. 담당자가 공식 결과를 확인할 수 있도록 긴급 확인 Case를 만들고, 확인 전에는 고용상태를 그대로 유지해야 합니다.

Depends on fowoco/knowledge#54
Closes #184

무엇이 바뀌나요?

  • stay_expiry_date < todayACTIVE·ON_LEAVE 근로자를 매일 또는 수동으로 스캔합니다.
  • (company_id, worker_id, source_stay_expiry_date)로 중복 Case를 차단합니다.
  • APPROVED / APPLICATION_PENDING / UNKNOWN / NOT_APPLIED / EMPLOYMENT_ENDED 상태와 증빙·재확인일을 별도 저장합니다.
  • 승인 결과가 확인된 경우에만 Worker의 새 체류만료일을 갱신합니다.
  • 고용 종료는 HR 확인 시각과 공식 메모가 있어야 하며 WF-CHG-001을 자동 실행하지 않고 후보로만 반환합니다.
  • PostgreSQL RLS 환경의 일일 스캔은 최소 후보만 반환하는 SECURITY DEFINER bootstrap을 사용하고, 실제 저장은 사업장별 독립 transaction에서 수행합니다.
  • Knowledge projection을 0.3.1로 맞추고 일반 체류연장과 만료 경과 예외 Workflow의 생성 경계를 분리합니다.

API

  • POST /api/v1/stay-verifications/scan
  • GET /api/v1/stay-verifications
  • PATCH /api/v1/stay-verifications/{stayVerificationId}

안전장치

  • 날짜 경과만으로 Worker.work_status 변경 금지
  • 승인 결과 또는 공식 확인 메모 없는 확정 상태 거부
  • expected_version 동시성 검증
  • 증빙 서류의 worker·company 소유권 검증
  • actor·시각·이전/변경 상태 감사로그 기록
  • test profile의 스케줄러 비활성화로 공유 Fixture 오염 방지

Migration

  • V54__create_stay_verification_case.sql
  • V55__prepare_expired_stay_scan.sql (PostgreSQL)

다음 Server Migration은 V56부터 사용합니다.

검증

  • ./gradlew clean test — 658 tests, 성공
  • StayVerificationIntegrationTest — 멱등 스캔·tenant 격리·증빙·승인·고용 종료 분기 성공
  • PostgreSQL 16 임시 DB에서 PostgreSqlMigrationTests 성공
  • git diff --check 성공

후속 연동

  • Client #346에서 긴급 확인 목록과 상태 입력 UI를 이 API에 연결합니다.
  • AI #50은 WF-STY-EXC-001의 설명·질문 보조만 담당하며 법적 결론과 자동 퇴사 판단을 하지 않습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(stay): 체류기간 만료 예외 Case 생성과 상태 분기

1 participant