Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,8 @@ make check
- Intent ID·입력 중복, evidence exact substring과 순서
- Train/Validation 중복·누락과 template leakage
- 외국인등록번호·여권번호·전화번호 형태의 개인정보 패턴
- 전체 자동화 테스트 18개
- 6대 Workflow Runtime의 의존성·완료 증빙·HR Gate와 E2E 경로 18건
- 전체 자동화 테스트 25개

## 저장소 구성

Expand Down Expand Up @@ -186,6 +187,7 @@ make check
- [데이터 사용 안내](fowoco-knowledge/data/README.md)
- [Intent 라벨 기준](fowoco-knowledge/docs/INTENT_DATA.md)
- [Agent 연동 계약](fowoco-knowledge/docs/AGENT_INTEGRATION.md)
- [6대 Workflow 공통 실행 계약](fowoco-knowledge/docs/WORKFLOW_RUNTIME.md)
- [공식 데이터 파이프라인](fowoco-knowledge/docs/OFFICIAL_DATA_PIPELINE.md)
- [E-9 신고·연장 Workflow](fowoco-knowledge/docs/E9_REPORTING_WORKFLOWS.md)
- [모델 서빙 실행 방법](fowoco-knowledge/hr-intent-service/README.md)
Expand Down
3 changes: 3 additions & 0 deletions fowoco-knowledge/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

## Unreleased

- 6대 Workflow의 Master/Subflow 관계, 공통 상태·이벤트·단계 의존성·완료 증빙 계약 추가
- Workflow별 정상·정보 누락·수동 검토 경로를 고정한 Runtime E2E Fixture 18건 추가
- 외부기관 처리와 민감 판단의 HR Gate, 병렬 READY 조건, 복합 Intent 분해 정책 검증 추가
- Workflow Slot에 UI·Agent 공용 한글 표시명, 쉬운 표현, 출처 우선순위, 담당 주체와 검증 규칙 추가
- 이름 변형·복합 요청·Intent 경계·OUT_OF_SCOPE·베트남어 안내 E2E Gold 후보 11건 추가
- 여권·외국인등록증 제출 상태를 Knowledge 소유 조회형 Context Slot으로 정의
Expand Down
2 changes: 2 additions & 0 deletions fowoco-knowledge/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ Slot·공식 출처·Guardrail을 조회하고, 데이터 계약과 교차참조
`hr-intent-service/`는 프로젝트 결과 재현과 AI 저장소 인계를 위한 스냅샷입니다.
파일 SHA·학습 데이터 계보·Secret 관리 기준은
[`docs/MODEL_ARTIFACT_POLICY.md`](docs/MODEL_ARTIFACT_POLICY.md)를 따릅니다.
여섯 대표 업무의 단계 의존성·완료 증빙·HR 승인 계약은
[`docs/WORKFLOW_RUNTIME.md`](docs/WORKFLOW_RUNTIME.md)를 기준으로 공유합니다.

## 데이터 기준

Expand Down
18 changes: 18 additions & 0 deletions fowoco-knowledge/data/evaluation/workflow_runtime_cases.jsonl
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{"case_id":"RUNTIME-EXPIRY-001","profile_id":"RUN-EXPIRY-RENEWAL","path":"HAPPY_PATH","trigger_type":"NATURAL_LANGUAGE","provided_slots":["worker_id","due_at","stay_expiry_date","passport_status","arc_status"],"missing_slots":[],"expected_state":"READY","expected_ready_stage_ids":["confirm_contract"],"guardrails":{"human_approval_required":true,"automatic_external_submission":false,"automatic_completion":false}}
{"case_id":"RUNTIME-EXPIRY-002","profile_id":"RUN-EXPIRY-RENEWAL","path":"MISSING_INPUT","trigger_type":"DEADLINE_REACHED","provided_slots":["worker_id"],"missing_slots":["due_at"],"expected_state":"NEEDS_INFO","expected_ready_stage_ids":[],"guardrails":{"human_approval_required":true,"automatic_external_submission":false,"automatic_completion":false}}
{"case_id":"RUNTIME-EXPIRY-003","profile_id":"RUN-EXPIRY-RENEWAL","path":"MANUAL_REVIEW","trigger_type":"OCR_COMPLETED","provided_slots":["worker_id","due_at"],"missing_slots":[],"expected_state":"MANUAL_REVIEW","expected_ready_stage_ids":["collect_identity_documents"],"guardrails":{"human_approval_required":true,"automatic_external_submission":false,"automatic_completion":false}}
{"case_id":"RUNTIME-ONBOARD-001","profile_id":"RUN-WORKER-ONBOARDING","path":"HAPPY_PATH","trigger_type":"OCR_COMPLETED","provided_slots":["source_document_id"],"missing_slots":[],"expected_state":"READY","expected_ready_stage_ids":["ingest_source"],"guardrails":{"human_approval_required":true,"automatic_external_submission":false,"automatic_completion":false}}
{"case_id":"RUNTIME-ONBOARD-002","profile_id":"RUN-WORKER-ONBOARDING","path":"MISSING_INPUT","trigger_type":"NATURAL_LANGUAGE","provided_slots":[],"missing_slots":["source_document_id"],"expected_state":"NEEDS_INFO","expected_ready_stage_ids":[],"guardrails":{"human_approval_required":true,"automatic_external_submission":false,"automatic_completion":false}}
{"case_id":"RUNTIME-ONBOARD-003","profile_id":"RUN-WORKER-ONBOARDING","path":"MANUAL_REVIEW","trigger_type":"OCR_COMPLETED","provided_slots":["source_document_id"],"missing_slots":[],"expected_state":"MANUAL_REVIEW","expected_ready_stage_ids":["extract_and_validate"],"guardrails":{"human_approval_required":true,"automatic_external_submission":false,"automatic_completion":false}}
{"case_id":"RUNTIME-CHANGE-001","profile_id":"RUN-EMPLOYMENT-CHANGE","path":"HAPPY_PATH","trigger_type":"NATURAL_LANGUAGE","provided_slots":["worker_id","change_type","incident_at"],"missing_slots":[],"expected_state":"READY","expected_ready_stage_ids":["capture_and_confirm_incident"],"guardrails":{"human_approval_required":true,"automatic_external_submission":false,"automatic_completion":false}}
{"case_id":"RUNTIME-CHANGE-002","profile_id":"RUN-EMPLOYMENT-CHANGE","path":"MISSING_INPUT","trigger_type":"NATURAL_LANGUAGE","provided_slots":["worker_id"],"missing_slots":["change_type","incident_at"],"expected_state":"NEEDS_INFO","expected_ready_stage_ids":[],"guardrails":{"human_approval_required":true,"automatic_external_submission":false,"automatic_completion":false}}
{"case_id":"RUNTIME-CHANGE-003","profile_id":"RUN-EMPLOYMENT-CHANGE","path":"MANUAL_REVIEW","trigger_type":"DEADLINE_REACHED","provided_slots":["worker_id","change_type","incident_at"],"missing_slots":[],"expected_state":"MANUAL_REVIEW","expected_ready_stage_ids":["capture_and_confirm_incident"],"guardrails":{"human_approval_required":true,"automatic_external_submission":false,"automatic_completion":false}}
{"case_id":"RUNTIME-DOCUMENT-001","profile_id":"RUN-DOCUMENT-REQUEST","path":"HAPPY_PATH","trigger_type":"NATURAL_LANGUAGE","provided_slots":["worker_id","document_type","due_at","submission_channel"],"missing_slots":[],"expected_state":"READY","expected_ready_stage_ids":["prepare_notice"],"guardrails":{"human_approval_required":true,"automatic_external_submission":false,"automatic_completion":false}}
{"case_id":"RUNTIME-DOCUMENT-002","profile_id":"RUN-DOCUMENT-REQUEST","path":"MISSING_INPUT","trigger_type":"NATURAL_LANGUAGE","provided_slots":["worker_id"],"missing_slots":["document_type","due_at","submission_channel"],"expected_state":"NEEDS_INFO","expected_ready_stage_ids":[],"guardrails":{"human_approval_required":true,"automatic_external_submission":false,"automatic_completion":false}}
{"case_id":"RUNTIME-DOCUMENT-003","profile_id":"RUN-DOCUMENT-REQUEST","path":"MANUAL_REVIEW","trigger_type":"WORKER_RESPONSE_RECEIVED","provided_slots":["worker_id","document_type","due_at","submission_channel"],"missing_slots":[],"expected_state":"MANUAL_REVIEW","expected_ready_stage_ids":["verify_or_follow_up"],"guardrails":{"human_approval_required":true,"automatic_external_submission":false,"automatic_completion":false}}
{"case_id":"RUNTIME-PAYROLL-001","profile_id":"RUN-PAYROLL-EXPLANATION","path":"HAPPY_PATH","trigger_type":"OCR_COMPLETED","provided_slots":["worker_id","pay_period","source_document_id"],"missing_slots":[],"expected_state":"READY","expected_ready_stage_ids":["calculate_payroll_difference"],"guardrails":{"human_approval_required":true,"automatic_external_submission":false,"automatic_completion":false}}
{"case_id":"RUNTIME-PAYROLL-002","profile_id":"RUN-PAYROLL-EXPLANATION","path":"MISSING_INPUT","trigger_type":"NATURAL_LANGUAGE","provided_slots":["worker_id"],"missing_slots":["pay_period","source_document_id"],"expected_state":"NEEDS_INFO","expected_ready_stage_ids":[],"guardrails":{"human_approval_required":true,"automatic_external_submission":false,"automatic_completion":false}}
{"case_id":"RUNTIME-PAYROLL-003","profile_id":"RUN-PAYROLL-EXPLANATION","path":"MANUAL_REVIEW","trigger_type":"WORKER_RESPONSE_RECEIVED","provided_slots":["worker_id","pay_period","source_document_id"],"missing_slots":[],"expected_state":"MANUAL_REVIEW","expected_ready_stage_ids":["collect_and_route_question"],"guardrails":{"human_approval_required":true,"automatic_external_submission":false,"automatic_completion":false}}
{"case_id":"RUNTIME-INSTRUCTION-001","profile_id":"RUN-WORK-INSTRUCTION","path":"HAPPY_PATH","trigger_type":"NATURAL_LANGUAGE","provided_slots":["worker_id","effective_at","work_location","work_action"],"missing_slots":[],"expected_state":"READY","expected_ready_stage_ids":["prepare_instruction"],"guardrails":{"human_approval_required":true,"automatic_external_submission":false,"automatic_completion":false}}
{"case_id":"RUNTIME-INSTRUCTION-002","profile_id":"RUN-WORK-INSTRUCTION","path":"MISSING_INPUT","trigger_type":"NATURAL_LANGUAGE","provided_slots":["worker_id","work_action"],"missing_slots":["effective_at","work_location"],"expected_state":"NEEDS_INFO","expected_ready_stage_ids":[],"guardrails":{"human_approval_required":true,"automatic_external_submission":false,"automatic_completion":false}}
{"case_id":"RUNTIME-INSTRUCTION-003","profile_id":"RUN-WORK-INSTRUCTION","path":"MANUAL_REVIEW","trigger_type":"WORKER_RESPONSE_RECEIVED","provided_slots":["worker_id","effective_at","work_location","work_action"],"missing_slots":[],"expected_state":"MANUAL_REVIEW","expected_ready_stage_ids":["follow_up_if_needed"],"guardrails":{"human_approval_required":true,"automatic_external_submission":false,"automatic_completion":false}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
dataset_id: FOWOCO-WORKFLOW-RUNTIME-E2E
version: 1.0.0
path: data/evaluation/workflow_runtime_cases.jsonl
schema: schemas/workflow-runtime-case.schema.json
record_count: 18
sha256: ac096b8b75175b74ccc36476b92a41968fc05d0b10f9c13e21a776082521681a
required_paths: [HAPPY_PATH, MISSING_INPUT, MANUAL_REVIEW]
cases_per_profile: 3
47 changes: 47 additions & 0 deletions fowoco-knowledge/docs/WORKFLOW_RUNTIME.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# 6대 Workflow 공통 실행 계약

## 목적

Intent와 업무 설명만으로는 Server가 어떤 단계를 먼저 열고, 무엇을 기다리고, 언제
완료할지 알 수 없다. `knowledge/workflow_runtime.yaml`은 기존 Catalog를 바꾸지 않고
여섯 대표 업무를 같은 상태·이벤트·의존성 규칙으로 실행하기 위한 계약이다.

## 실행 방법

```text
자연어·기한·OCR·근로자 응답 이벤트
→ Intent별 Runtime Profile 선택
→ 필수 Slot 확인
→ 의존성이 충족된 Stage를 READY로 전환
→ 완료 증빙 저장
→ HR 승인 또는 직접 기관 처리
→ 다음 Stage 개방
```

`depends_on`이 모두 끝난 Stage는 같은 `parallel_group` 안에서 병렬로 열 수 있다.
완료는 결과 문구만으로 확정하지 않고 `completion_evidence`와 `human_gate`를 함께
검사한다.

## 여섯 Profile

| Profile | 종류 | 재사용 관계 |
| --- | --- | --- |
| `RUN-EXPIRY-RENEWAL` | Master | 계약·공통 서류 요청·체류 연장을 연결 |
| `RUN-WORKER-ONBOARDING` | Master | 필요 시 공통 서류 요청 Subflow 사용 |
| `RUN-EMPLOYMENT-CHANGE` | Master | 증빙 보완 시 공통 서류 요청 Subflow 사용 |
| `RUN-DOCUMENT-REQUEST` | Subflow | 다른 Master가 재사용 가능 |
| `RUN-PAYROLL-EXPLANATION` | Master | 급여 계산과 설명 검토 분리 |
| `RUN-WORK-INSTRUCTION` | Master | 안내 승인과 근로자 응답 추적 분리 |

복합 발화는 evidence가 먼저 등장한 Intent를 대표로 표시하되 여러 Workflow 후보로
분리하고, 실행 전 HR 확인을 받는다.

## 안전 기준

- 외부기관 제출·법적 상태·퇴사 확정은 HR 승인 없이 완료하지 않는다.
- 근로자 메시지와 번역문은 HR 승인 뒤에만 전달한다.
- 이벤트 재처리는 같은 멱등성 키로 중복 Task·문서를 만들지 않는다.
- `OUT_OF_SCOPE`는 Runtime Profile이 아니라 수동 처리 분기다.

정상·필수정보 누락·수동 검토 경로는
`data/evaluation/workflow_runtime_cases.jsonl`의 18개 Fixture로 고정한다.
3 changes: 3 additions & 0 deletions fowoco-knowledge/knowledge/manifest.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ files:
easy_korean: knowledge/easy_korean_rules.yaml
multilingual_templates: knowledge/multilingual_templates.yaml
guardrails: knowledge/guardrail_rules.yaml
workflow_runtime: knowledge/workflow_runtime.yaml
datasets:
source_manifest: data/external/source_manifest.yaml
processed_manifest: data/processed/manifest.yaml
Expand All @@ -38,6 +39,8 @@ datasets:
catalog_e2e_manifest: data/evaluation/e2e_catalog_manifest.yaml
catalog_e2e_gold_candidates: data/evaluation/e2e_catalog_cases.jsonl
demo_expiry_renewal: data/demo/expiry_renewal_golden.yaml
workflow_runtime_manifest: data/evaluation/workflow_runtime_manifest.yaml
workflow_runtime_cases: data/evaluation/workflow_runtime_cases.jsonl
artifacts:
intent_models: hr-intent-service/models/artifact-manifest.yaml
intent_model_schema: schemas/model-artifact-manifest.schema.json
Expand Down
Loading