الحجوزاتتنفيذ الإدراج الطارئ + إعادة الجدولة المتتالية

تنفيذ الإدراج الطارئ + إعادة الجدولة المتتالية

يطبّق التتابع الذي عاينته /emergency/preview: يُسند العمل الطارئ إلى الفنّي ويدفع الأعمال المُزاحة إلى الخلف (أو، مع `displacement_mode=reassign`، يعيد توفير طاقمها على البدائل المُعايَنة أولًا)، بشكل ذرّي. يدعم Idempotency-Key. يعيد الخادم حساب الخطة تحت قفل ويثبّت كل عمل على status_version الخاص به — وإذا تغيّر أي شيء منذ المعاينة يُرجع 409 EMERGENCY_RESCHEDULE_PLAN_DRIFTED (أعد المعاينة). نفس متن المعاينة + `emergency_expected_version` اختياري. ميزة معزولة (راجع EMERGENCY_RESCHEDULE_DESIGN.md). الخطوات التالية عند 409: EMERGENCY_RESCHEDULE_PLAN_DRIFTED — تغيّر الجدول بين معاينتك وهذا التنفيذ (فاز حجز/نقل آخر بالمسار): استدعِ /preview مجددًا، واعرض الخطة الجديدة، ثم نفّذ. EMERGENCY_RESCHEDULE_SLOT_OCCUPIED — نافذة الوصول محجوبة بمرساة غير قابلة للتحريك (P0/طاقم/متعدد الأيام): فنّي أو وقت آخر. الرموز الأخرى — العلاجات نفسها كما في /candidates.

المعاملات

Idempotency-Keystringheaderاختياري
Unique key making retries safe: a repeat send with the same key replays the original response (header Idempotent-Replayed: true) instead of re-running the operation. Reusing a key with a different body returns 422 IDEMPOTENCY_KEY_REUSE.
displacement_modeenumbodyاختياري
مصير الأعمال المُزاحة: reschedule (الافتراضي) أو reassign — يجب أن يطابق المعاينة.
emergency_expected_versionintegerbodyاختياري
حاجز القفل المتفائل من العمل المُعايَن (0 = التثبيت على النسخة التي يقرؤها الخادم).
emergency_job_idstringbodyمطلوب
معرّف عمل P0 المراد إدراجه.
expected_move_idsarray<string>bodyاختياري
ExpectedMoveIDs — معرّفات الأعمال المُزاحة التي أرجعتها المعاينة (أعد إرسال كلٍّ من data.days[].moves[].job_id وdata.reassignments[].job_id). موصى به: إذا كان التتابع المُعاد حسابه سيمسّ مجموعة مختلفة (عمل حُجز على المسار منذ المعاينة)، يُرفض التنفيذ بـ EMERGENCY_RESCHEDULE_PLAN_DRIFTED بدلًا من إزاحة عمل لم يره المنسّق قط. أغفله لإلغاء هذا الخيار.
modeenumbodyمطلوب
وضع التتابع: overtime | next_day (يجب أن يطابق المعاينة).
start_atstringbodyمطلوب
وقت البدء المطلوب — تاريخ ووقت ساذج بالتوقيت المحلي للنشاط التجاري. يجب أن يكون في المستقبل.
technician_idstringbodyمطلوب
الفنّي المستهدف (يجب أن يكون تابعًا للنشاط التجاري).
POST/v1/job-requests/emergency/commit
curl -X POST "https://api.crisphive.com/v1/job-requests/emergency/commit" \
  -H "Authorization: Bearer chsk_test_4eC8xQ9mZ2pL7Ka0rT" \
  -H "Content-Type: application/json" \
  -d '{
  "displacement_mode": "reschedule",
  "emergency_expected_version": 1,
  "emergency_job_id": "9b2f6c3e-1a4d-4f0a-8f2e-7c5d1b3a9e01",
  "expected_move_ids": [
    "9b2f6c3e-1a4d-4f0a-8f2e-7c5d1b3a9e01"
  ],
  "mode": "overtime",
  "start_at": "2030-06-14T09:00:00",
  "technician_id": "9b2f6c3e-1a4d-4f0a-8f2e-7c5d1b3a9e01"
}'
نص الطلب
{
"displacement_mode": ,
"emergency_expected_version": ,
"emergency_job_id": ,
"expected_move_ids": [
],
"mode": ,
"start_at": ,
"technician_id":
}

الاستجابات