ATP - وضعیت گردشکار پرونده (GET /api/v1/invention-cases/{invention_case_id}/workflow-state/)
Endpoint
GET /api/v1/invention-cases/{invention_case_id}/workflow-state/
هدف آزمون
دریافت projection یکپارچه stage، intake، context، prior-art و revision.
شرایط آزمون
- سرویس core-api در حال اجرا باشد
- هدر Authorization با access token معتبر
- پرونده متعلق به workspace قابل دسترس کاربر باشد
- PostgreSQL و S3 در دسترس باشند (برای projection کامل)
فرآیند آزمون
- ایجاد پرونده و آپلود source document
- poll با فاصله ۲–۵ ثانیه: GET workflow-state
- مقایسه revision بین pollها برای تشخیص تغییر
- بررسی sub_state هر section (information_collection، context_completion، prior_art_review)
- توقف poll وقتی sub_state به حالت terminal یا actionable رسید
معرفی ویژگی
endpoint اصلی UI برای polling وضعیت پرونده. IntakeReadinessService و ContextReadinessService و PriorArtWorkflowProjection در یک پاسخ تجمیع میشوند.
- جایگزین readiness جدا:
/intake-readiness/و/context-readiness/در urls فعلی expose نشدهاند - revision: عدد صحیح یکتا؛ با هر inbox event یا تغییر domain افزایش مییابد
- sub_state: awaiting_upload | extracting | complete | questions_required | failed
- advisory readiness: readiness بهتنهایی current_stage را جابهجا نمیکند
- ui_hints: warnings و recommended_next_action برای رندر UI
سناریوی آزمون
سناریو 1: poll کامل از آپلود تا context ready
- آپلود source document و دریافت extraction_request_id
- poll تا information_collection.sub_state=complete
- POST start-context-extraction
- poll تا context_completion.sub_state=complete
- بررسی can_continue_to_prior_art=true در readiness
سناریو 2: خطا — پرونده قفل یا آرشیو
- قفل کردن پرونده (status=locked)
- GET workflow-state
- بررسی lock_summary.is_locked=true
- بررسی عدم پیشنهاد actionهای مخرب در ui_hints
سناریو 3: intake در حال آمادهسازی
- آپلود source document
- poll workflow-state
- بررسی information_collection.sub_state="extracting"
- بررسی intake.state="preparing"
سناریو 4: سوالات context باز
- دریافت event questions_required از inbox
- poll workflow-state
- بررسی context_completion.sub_state="questions_required"
- بررسی blocking_question_count > 0
قالب API
| مولفه | نوع | نوع داده | اجباری | توضیحات |
|---|---|---|---|---|
| invention_case_id | Path | uuid | بله | شناسه پرونده اختراع |
Swagger
get:
summary: وضعیت گردشکار پرونده
responses:
200:
description: عملیات موفق
401:
description: احراز هویت نامعتبر یا ناقص
نمونه ورودی
curl -X GET "http://localhost:8000/api/v1/invention-cases/{invention_case_id}/workflow-state/" \
-H "Authorization: Bearer <access>" \
-H "Content-Type: application/json"
نمونه خروجی
{
"success": true,
"data": {
"case_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"current_stage": "information_collection",
"revision": 14,
"information_collection": {
"sub_state": "extracting",
"intake": {
"state": "preparing",
"message": "Preparing your next step..."
}
},
"context_completion": {
"sub_state": "not_started",
"readiness": {
"state": "not_started",
"blocking_question_count": 0,
"can_continue_to_prior_art": false
}
},
"prior_art_review": {
"sub_state": "not_started",
"prior_art": { "sub_state": "not_started", "capabilities": {} }
},
"ui_hints": {
"warnings": [],
"recommended_next_action": "Wait for document extraction to finish."
}
}
}
Status Codes
- 200: projection برگردانده شد
- 401: احراز هویت نامعتبر
- 404: پرونده یافت نشد
نتیجه مورد انتظار
پاسخ JSON با revision، sectionهای information_collection/context_completion/prior_art_review و ui_hints. با هر تغییر async (extraction، context، prior-art) revision باید افزایش یابد.
روال صحتسنجی
- بررسی 200 و فیلد revision
- بررسی همخوانی intake.state با وضعیت extraction واقعی
- بررسی افزایش revision پس از completed event
- بررسی can_continue_to_prior_art فقط وقتی context ready است
- بررسی عدم افشای payload خام snapshot در این endpoint
توضیحات
- UI ترجیحاً این endpoint را poll میکند
- برای timeline تفصیلی از workflow-events (SSE) استفاده کنید
- CONTEXT_WORKFLOW.md و PLATFORM_WORKFLOW.md مرجع معماری هستند
جریان یکپارچهسازی
Frontend ──poll──▶ GET workflow-state
│
├─ IntakeReadinessService (documents/extraction)
├─ ContextReadinessService (internal_context)
└─ PriorArtWorkflowProjection (prior_art)
Async side-effects که revision را بالا میبرند:
document.extraction.completed|failed → inbox → intake update
context.extraction.completed|questions_required|failed → inbox
prior_art.search|report completed|failed → DB update