予約›緊急挿入 + カスケード日程変更のコミット
緊急挿入 + カスケード日程変更のコミット
/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 ジョブの ID です。
expected_move_idsarray<string>body任意
ExpectedMoveIDs — プレビューが返した押しのけ対象ジョブの ID です(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":
}
Bearer