معماری جریان تقصیر و خسارت

تمام جریان‌های فعال — V1 (قدیمی) · V2 · V3 · V4 · V5 · V6 — به همراه نقش‌ها، پیشوندهای مسیر و ترتیب مراحل

راهنما و نقش‌ها

نقش‌ها به تفکیک جریان
جریان بازیگر تقصیر بازیگر خسارت / بررسی
V1 / V2 (کاربر) USER USER + DAMAGE_EXPERT
پنل کارشناس تقصیر EXPERT FIELD_EXPERT —
پنل کارشناس خسارت — DAMAGE_EXPERT FIELD_EXPERT FILE_REVIEWER FILE_MAKER
V2 کارشناس میدانی (mirror) FIELD_EXPERT FIELD_EXPERT
V3 FIELD_EXPERT FIELD_EXPERT
V4 FILE_MAKER FILE_REVIEWER
V5 FILE_MAKER FILE_REVIEWER + FILE_MAKER (تأیید نهایی)
V6 CALL_CENTER + USER (از طریق لینک) USER + DAMAGE_EXPERT (جریان استاندارد V2)
پیشوندهای مسیر (Route Prefix)
جریان پیشوند تقصیر پیشوند خسارت / بررسی
V1 (قدیمی) blame-request-management/ claim-request-management/
V2 کاربر v2/blame-request-management/ v2/claim-request-management/
V2 کارشناس میدانی (mirror) v2/expert-initiated/blame-request-management/ همان کنترلر (بدون پیشوند جداگانه)
پنل کارشناس تقصیر V2 v2/expert-blame/ v2/expert-claim/
V3 v3/expert-initiated/blame-request-management/ همان کنترلر
V4 v4/file-maker/blame-request-management/ v4/file-reviewer/blame-request-management/
V5 v5/file-maker/blame-request-management/ v5/file-reviewer/blame-request-management/ + v5/file-maker/claim-approval/
V6 v6/call-center-blame/ (اپراتور) + v2/blame-request-management/ (کاربر لینک) v2/claim-request-management/

جریان V1 / V2 — تقصیر و خسارت کاربر‌محور

جریان کاربری استاندارد. هر طرف روی دستگاه خودش اپ را باز می‌کند. طرف اول اطلاعات تقصیر را پر می‌کند و طرف دوم را با لینک SMS دعوت می‌کند. بررسی کارشناسی تقصیر اختیاری است. پس از تکمیل تقصیر، طرف خسارت‌دیده پرونده خسارت باز می‌کند که توسط کارشناس قیمت‌گذاری می‌شود. V1 = مسیرهای قدیمی (منسوخ) · V2 = همان منطق با پیشوند v2/.

فاز تقصیر
بازیگر:USER Guard: GlobalGuard
1
ایجاد درخواست
POST /
↓
2
اعتراف تقصیر
POST /blame-confession/:id
↓
2a
[فقط CAR_BODY] فرم بدنه خودرو
POST /car-body-form/:id
↓
3
فرم اولیه (پلاک یا VIN)
POST /initial-form/:id or /initial-form-vin/:id
↓
4
جزئیات: موقعیت · صدا · توضیح
POST /add-detail-location, /upload-voice, /add-detail-description
↓
5
افزودن طرف دوم (ارسال لینک SMS)
POST /add-second-party/:phone/:id/:frontendRoute
↓
6
طرف دوم مراحل ۲–۴ را پر می‌کند
طرف دوم با دستگاه خودش وارد می‌شود
↓
7
امضا (هر دو طرف)
PUT /sign/:id
تصویر امضا + فلگ isAccept ارسال می‌شود
↓
8
[اختیاری] بررسی کارشناس تقصیر
via v2/expert-blame — assign → reply/resend
کارشناس پرونده را قفل می‌کند، ممکن است ارسال مجدد بخواهد، رأی نهایی می‌دهد
↓
9
تقصیر تکمیل شد (COMPLETED)
طرف مقصر مشخص شد
فاز خسارت
بازیگر:USER (طرف خسارت‌دیده) + DAMAGE_EXPERT
1
ایجاد خسارت از تقصیر
POST v2/claim-request-management/create-from-blame/:blameId
↓
2
انتخاب قطعات بیرونی
PATCH /select-outer-parts/:claimId
↓
3
انتخاب سایر قطعات + اطلاعات بانکی
PATCH /select-other-parts/:claimId
↓
4
آپلود مدارک
POST /upload-document/:claimId
↓
5
کپچر قطعات (عکس + زوایا)
POST /capture-part/:claimId
↓
6
فیلم دور خودرو (walk-around)
PATCH /car-capture/:claimId
→ WAITING_FOR_DAMAGE_EXPERT
↓
7
کارشناس خسارت بررسی و قیمت‌گذاری می‌کند
via v2/expert-claim — assign → reply / price-drop
↓
8
کاربر قیمت را تأیید / اعتراض / امتیاز می‌دهد
PUT /owner-insurer-approval/sign or /objection or /user-rating

جریان V2 — کارشناس میدانی (Mirror، حضوری)

FIELD_EXPERT در صحنه تصادف تمام مراحل را به نمایندگی از هر دو طرف پر می‌کند. پیشوند مسیر دقیقاً آینه‌ی API کاربری است — v2/expert-initiated/blame-request-management/ — تا فرانت‌اند بتواند صفحات یکسانی را با تعویض پیشوند استفاده کند. اولین طرف ثبت‌شده همیشه مقصر است. پس از هر دو امضا، تقصیر بلافاصله تکمیل می‌شود (بدون صف بررسی کارشناسی).

فاز تقصیر
بازیگر:FIELD_EXPERT Guard: LocalActorAuthGuard
1
ایجاد (creationMethod=IN_PERSON)
POST /
↓
2
ارسال و تأیید OTP (مقصر)
POST /send-party-otp/:id → /verify-party-otp/:id
↓
3
اعتراف تقصیر (مقصر)
POST /blame-confession/:id
↓
3a
[فقط CAR_BODY] فرم بدنه خودرو
POST /car-body-form/:id
↓
4
فرم اولیه / استعلام (مقصر)
POST /run-inquiries/:id or /run-inquiries-vin/:id
↓
5
آپلود ویدیو (طرف اول / مقصر)
POST /upload-video/:id
↓
6
جزئیات: موقعیت · صدا · توضیح (مقصر)
POST /add-detail-location, /upload-voice, /add-detail-description
↓
7
افزودن طرف دوم (بدون لینک SMS)
POST /add-second-party/:phone/:id/
↓
8
OTP + استعلام + جزئیات (زیان‌دیده) — تکرار مراحل ۲–۶
فقط THIRD_PARTY
↓
9
امضای FIRST سپس امضای SECOND
PUT /sign/:id (دو بار، partyRole=FIRST / SECOND)
↓
10
فیلدهای حادثه → تقصیر تکمیل شد
POST /accident-fields/:id
بدون صف بررسی — پرونده فوری بسته می‌شود
فاز خسارت (همان کارشناس)
بازیگر:FIELD_EXPERT
1
ایجاد خسارت از تقصیر
POST v2/expert-initiated/claim-request-management/create-from-blame/:blameId
↓
2
انتخاب قطعات بیرونی + سایر قطعات
PATCH /select-outer-parts, /select-other-parts
↓
3
آپلود مدارک
POST /upload-document/:claimId
↓
4
کپچر قطعات
POST /capture-part/:claimId
↓
5
فیلم دور خودرو (walk-around)
PATCH /car-capture/:claimId
→ WAITING_FOR_DAMAGE_EXPERT
↓
6
کارشناس خسارت بررسی می‌کند (جریان عادی)
via v2/expert-claim

جریان V3 — کارشناس میدانی (ترتیب مراحل بازچینی‌شده)

بازیگر یکسان با V2 میرور (FIELD_EXPERT)، نتیجه یکسان، اما مراحل بازچینی شده‌اند: تمام مراحل روایی طرفین (OTP، استعلام، صدا، موقعیت، توضیح، امضا) ابتدا برای هر دو طرف انجام می‌شود، سپس مراحل ارزیابی خسارت (فیلدهای حادثه، مدارک، انتخاب قطعات، کپچر، ویدیو) در یک پاس جداگانه دنبال می‌شوند. تقصیر و خسارت هر دو در یک کنترلر: v3/expert-initiated/blame-request-management/.

بازیگر:FIELD_EXPERT Guard: LocalActorAuthGuard

مراحل روایی طرفین (تقصیر)

1
ایجاد (IN_PERSON)
POST /
↓
2
ارسال + تأیید OTP (مقصر)
POST /send-party-otp → /verify-party-otp
↓
3
[CAR_BODY] فرم بدنه خودرو
POST /car-body-form/:id
↓
4
اجرای استعلام (مقصر + ایجاد خودکار خسارت)
POST /run-inquiries/:id or /run-inquiries-vin/:id
↓
5
موقعیت · توضیح · صدا (مقصر)
POST /add-detail-location, /add-detail-description, /upload-voice
↓
6
امضا (مقصر)
PUT /sign/:id
↓
7
OTP + استعلام + جزئیات (زیان‌دیده)
فقط THIRD_PARTY؛ CAR_BODY مراحل ۷–۸ را رد می‌کند
↓
8
امضا (زیان‌دیده)
PUT /sign/:id

مراحل ارزیابی خسارت

9
فیلدهای حادثه
POST /accident-fields/:id
↓
10
دریافت شناسه خسارت مرتبط
GET /claim-id/:requestId
↓
11
آپلود مدارک (گواهینامه، کارت خودرو)
POST /upload-document/:claimId
↓
12
انتخاب قطعات بیرونی
PATCH /select-outer-parts/:claimId
↓
13
انتخاب سایر قطعات
PATCH /select-other-parts/:claimId
↓
14
کپچر عکس قطعات + زوایا
POST /capture-part/:claimId
↓
15
فیلم دور خودرو (walk-around)
PATCH /car-capture/:claimId
↓
16
آپلود ویدیو تقصیر (آخرین مرحله)
POST /upload-video/:requestId
→ WAITING_FOR_EXPERT (THIRD_PARTY) یا COMPLETED (CAR_BODY)

جریان V4 — نقش‌های جداگانه: FileMaker + FileReviewer

دو بازیگر کار یکسان V3 را در دو کنترلر جداگانه انجام می‌دهند. FileMaker (v4/file-maker/blame-request-management/) مراحل روایی طرفین (OTP، استعلام، جزئیات، امضا) و آپلود مدارک اولیه را انجام می‌دهد. FileReviewer (v4/file-reviewer/blame-request-management/) ارزیابی خسارت را انجام می‌دهد. ویدیو تقصیر نهایی (upload-video) در V4 بی‌عملکرد است — تقصیر از طریق car-capture تکمیل می‌شود.

فاز FileMaker
بازیگر:FILE_MAKER v4/file-maker/blame-request-management/
1
ایجاد (IN_PERSON)
POST /
↓
2
ارسال + تأیید OTP (مقصر)
POST /send-party-otp → /verify-party-otp
↓
3
[CAR_BODY] فرم بدنه خودرو
POST /car-body-form/:id
↓
4
اجرای استعلام (مقصر + ایجاد خودکار خسارت)
POST /run-inquiries/:id or /run-inquiries-vin/:id
↓
5
موقعیت · توضیح · صدا (مقصر)
POST /add-detail-location, /add-detail-description, /upload-voice
↓
6
امضا (مقصر)
PUT /sign/:id (partyRole=FIRST)
↓
7
OTP + استعلام + جزئیات + امضا (زیان‌دیده)
فقط THIRD_PARTY
↓
8
آپلود مدارک (گواهینامه، کارت خودرو)
POST /upload-document/:claimId
از claim-id/:requestId برای دریافت claimId استفاده می‌شود
↓
✓
FileMaker تمام شد — پرونده مهر شد
FileReviewer می‌تواند پرونده را بردارد
فاز FileReviewer
بازیگر:FILE_REVIEWER v4/file-reviewer/blame-request-management/
1
دریافت شناسه خسارت مرتبط
GET /claim-id/:requestId
↓
2
فیلدهای حادثه
POST /accident-fields/:requestId
↓
3
بررسی نیازمندی‌های کپچر
GET /capture-requirements/:claimId
↓
4
آپلود مدارک (شاسی / موتور)
POST /upload-document/:claimId
↓
5
انتخاب قطعات بیرونی
PATCH /select-outer-parts/:claimId
↓
6
انتخاب سایر قطعات
PATCH /select-other-parts/:claimId
↓
7
کپچر عکس قطعات + زوایا
POST /capture-part/:claimId
↓
8
فیلم دور خودرو (walk-around)
PATCH /car-capture/:claimId
خسارت → WAITING_FOR_DAMAGE_EXPERT · تقصیر → COMPLETED
↓
9
کارشناس خسارت بررسی و قیمت‌گذاری می‌کند
via v2/expert-claim
↓
10
امضای صاحب پرونده بر قیمت‌گذاری (FileReviewer به نمایندگی از کاربر)
PUT /claim-sign/:claimId
ارسال agree + branchId + تصویر امضا
↓
—
upload-video — بی‌عملکرد
POST /upload-video/:requestId (تقصیر قبلاً COMPLETED شده)

جریان V5 — مانند V4 + دروازه تأیید FileMaker

مراحل FileMaker با V4 یکسان است، با این تفاوت که requiresFileMakerApproval=true هنگام ایجاد ست می‌شود. مراحل FileReviewer نیز با V4 یکسان است. تنها تفاوت در انتهای جریان است: پس از تکمیل بررسی کارشناس خسارت و امضای صاحب پرونده، خسارت به جای ارسال مستقیم به فناوران به وضعیت WAITING_FOR_FILE_MAKER_APPROVAL منتقل می‌شود. FileMaker سپس تأیید (→ فناوران) یا رد می‌کند (→ بازگشت به WAITING_FOR_DAMAGE_EXPERT، حداکثر ۲ بار رد).

بازیگران:FILE_MAKERFILE_REVIEWERDAMAGE_EXPERT FILE_MAKER (تأیید)

مراحل FileMaker (یکسان با V4)

همان ترتیب زیر v5/file-maker/blame-request-management/ — بدون تغییر.

1–8
یکسان با FileMaker در V4
ستون چپ V4 را ببینید
↓
✓
FileMaker تمام شد — پرونده مهر شد

مراحل FileReviewer + دنباله تأیید

1–10
یکسان با FileReviewer در V4 (مراحل ۱–۱۰)
v5/file-reviewer/blame-request-management/
↓
11
خسارت → WAITING_FOR_FILE_MAKER_APPROVAL
(به جای ارسال مستقیم به فناوران)
↓
12
FileMaker تأیید یا رد می‌کند
POST v5/file-maker/claim-approval/approve/:claimId
POST v5/file-maker/claim-approval/reject/:claimId
رد → بازگشت به WAITING_FOR_DAMAGE_EXPERT · حداکثر ۲ بار رد
↓
✓
ارسال به فناوران (در صورت تأیید)

جریان V6 — شروع از مرکز تماس (Call-Center)

اپراتور CALL_CENTER اطلاعات طرف مقصر را تلفنی دریافت می‌کند (پلاک + کد ملی یا شاسی/VIN)، استعلام بیمه را اجرا می‌کند، سپس لینک تقصیر را از طریق SMS ارسال می‌کند. طرف مقصر لینک را باز می‌کند و فرم را از طریق جریان استاندارد V2 تکمیل می‌کند — اما مرحله فرم اولیه/استعلام به‌طور خودکار رد می‌شود (skipInitialFormStep=true) چون اپراتور قبلاً آن را اجرا کرده است. برای فایل‌های THIRD_PARTY، فقط اطلاعات طرف مقصر توسط اپراتور جمع‌آوری می‌شود. جریان خسارت پس از تکمیل تقصیر، جریان استاندارد V2 خسارت است.

فاز اپراتور
بازیگر:CALL_CENTER Guard: LocalActorAuthGuard · v6/call-center-blame/
1
ایجاد پرونده تقصیر
POST /create
بدنه: { type: "THIRD_PARTY" | "CAR_BODY" }
↓
2
اجرای استعلام برای مقصر (پلاک یا VIN)
POST /run-inquiry/:requestId
POST /run-inquiry-vin/:requestId
اپراتور پلاک + کد ملی دریافت‌شده از تماس‌گیرنده را ارسال می‌کند
↓
3
ارسال لینک تقصیر به مقصر از طریق SMS
POST /send-link/:requestId
بدنه: { phoneNumber }. در صورت نیاز کاربر ثبت می‌شود، به عنوان طرف اول ذخیره و SMS ارسال می‌شود.
↓
✓
اپراتور تمام شد
پیگیری از طریق GET /my-files و GET /blame/:requestId
فاز کاربر (جریان استاندارد V2، استعلام رد شده)
بازیگر:USER از طریق لینک SMS ← v2/blame-request-management/
1
اعتراف تقصیر
POST /blame-confession/:id
↓
2
مرحله فرم اولیه / استعلام — رد شده
skipInitialFormStep=true چون اپراتور قبلاً اجرا کرده
↓
3
جزئیات: موقعیت · صدا · توضیح (مقصر)
↓
4
افزودن طرف دوم (THIRD_PARTY: ارسال SMS)
POST /add-second-party/:phone/:id/:frontendRoute
↓
5
طرف دوم مراحل عادی را روی دستگاه خودش پر می‌کند
فقط THIRD_PARTY
↓
6
امضا (هر دو طرف)
PUT /sign/:id
↓
7
[اختیاری] بررسی کارشناس تقصیر
via v2/expert-blame
↓
8
تقصیر تکمیل شد → جریان خسارت استاندارد V2
طرف زیان‌دیده خسارت را از طریق v2/claim-request-management/ باز می‌کند

پنل‌های بررسی کارشناسی (مشترک در V1–V6)

پنل کارشناس تقصیر — v2/expert-blame/
بازیگر:EXPERTFIELD_EXPERT
متد مسیر هدف
GET / فهرست پرونده‌های تقصیر برای بررسی
GET /:id جزئیات پرونده
POST /:id/assign دریافت و قفل‌کردن پرونده
PUT /reply/submit/:id ثبت رأی نهایی
PUT /reply/resend/:id درخواست ارسال مجدد مدارک
PUT /reply/inPerson/:id ثبت رأی بازدید حضوری
GET /report/unified-file-statuses کاتالوگ وضعیت‌ها و تعداد
پنل کارشناس خسارت — v2/expert-claim/
بازیگر:DAMAGE_EXPERTFIELD_EXPERTFILE_REVIEWERFILE_MAKER
متد مسیر هدف
GET /requests فهرست صف خسارت
GET /request/:id جزئیات خسارت
POST /assign/:id دریافت و قفل‌کردن
PUT /reply/submit/:id ثبت ارزیابی خسارت
PUT /reply/resend/:id درخواست ارسال مجدد
GET/PUT /request/:id/price-drop محاسبه کاهش قیمت
PATCH /validate-factors/:id اعتبارسنجی ضرایب تعمیر
PATCH /:id/visit درخواست بازدید حضوری

مقایسه جریان‌ها در یک نگاه

بُعد V1 / V2 کاربر V2 کارشناس میدانی V3 V4 V5 V6
چه کسی تقصیر را پر می‌کند؟ هر طرف روی دستگاه خودش FIELD_EXPERT برای هر دو FIELD_EXPERT برای هر دو FILE_MAKER FILE_MAKER CALL_CENTER (استعلام) + USER (بقیه، از طریق لینک)
چه کسی ارزیابی می‌کند؟ کاربر، سپس کارشناس بررسی می‌کند FIELD_EXPERT FIELD_EXPERT (همان جلسه) FILE_REVIEWER FILE_REVIEWER USER + DAMAGE_EXPERT (خسارت استاندارد V2)
بررسی کارشناس تقصیر؟ صف اختیاری خیر — تکمیل فوری پس از accident-fields WAITING_FOR_EXPERT پس از upload-video COMPLETED پس از car-capture COMPLETED پس از car-capture صف اختیاری (مانند V2 کاربر)
بررسی خسارت DAMAGE_EXPERT DAMAGE_EXPERT DAMAGE_EXPERT DAMAGE_EXPERT ← امضای صاحب پرونده (FileReviewer) DAMAGE_EXPERT ← امضا ← تأیید FileMaker DAMAGE_EXPERT (استاندارد V2)
مرحله استعلام کاربر initial-form را پر می‌کند کارشناس run-inquiries به ازای هر طرف کارشناس run-inquiries به ازای هر طرف FileMaker run-inquiries به ازای هر طرف FileMaker run-inquiries به ازای هر طرف اپراتور از قبل پر می‌کند؛ کاربر رد می‌کند
مرحله upload-video در جریان V2 کاربر وجود ندارد بله — upload-video برای هر طرف (mirror) بله — آخرین مرحله → WAITING_FOR_EXPERT بی‌عملکرد (تقصیر با car-capture تکمیل شد) بی‌عملکرد (تقصیر با car-capture تکمیل شد) مربوط نیست
پیشوند مسیر تقصیر v2/blame-request-management/ v2/expert-initiated/blame.../ v3/expert-initiated/blame.../ v4/file-maker/blame.../ v5/file-maker/blame.../ v6/call-center-blame/
پیشوند مسیر ارزیابی v2/claim-request-management/ همان کنترلر همان کنترلر v4/file-reviewer/blame.../ v5/file-reviewer/blame.../ v2/claim-request-management/