forked from Yara724/api
1563 lines
53 KiB
TypeScript
1563 lines
53 KiB
TypeScript
/**
|
||
* Swagger example bodies for workflow step management
|
||
*/
|
||
|
||
export const createWorkflowStepExamples = {
|
||
example1: {
|
||
summary: 'Request Type Selection Step',
|
||
value: {
|
||
stepKey: 'CREATED',
|
||
type: 'THIRD_PARTY',
|
||
stepNumber: 1,
|
||
isActive: true,
|
||
stepName_fa: 'ایجاد نوع درخواست',
|
||
stepName_en: 'request_type',
|
||
description_fa: 'انتخاب نوع درخواست توسط کاربر (شخص ثالث یا بدنه)',
|
||
description_en: 'Select request type by user (THIRD_PARTY or CAR_BODY)',
|
||
category: 'INITIAL',
|
||
requiredPreviousSteps: [],
|
||
nextPossibleSteps: ['FIRST_BLAME_CONFESSION'],
|
||
allowedRoles: ['user'],
|
||
estimatedDuration: 1,
|
||
fields: [
|
||
{
|
||
id: '507f1f77bcf86cd799439011',
|
||
name_fa: 'نوع درخواست',
|
||
name_en: 'requestType',
|
||
label_fa: 'نوع درخواست',
|
||
label_en: 'Request Type',
|
||
placeholder_fa: 'نوع درخواست خود را انتخاب کنید',
|
||
placeholder_en: 'Select your request type',
|
||
value: [
|
||
{ label_fa: 'شخص ثالث', label_en: 'Third Party', value: 'THIRD_PARTY' },
|
||
{ label_fa: 'بدنه', label_en: 'Car Body', value: 'CAR_BODY' }
|
||
],
|
||
dataType: 'select',
|
||
required: true,
|
||
order: 1,
|
||
isActive: true,
|
||
validation: {
|
||
enum: ['THIRD_PARTY', 'CAR_BODY']
|
||
}
|
||
}
|
||
],
|
||
metadata: {
|
||
icon: 'clipboard-list',
|
||
color: '#8B5CF6'
|
||
}
|
||
}
|
||
},
|
||
example2: {
|
||
summary: 'Blame Confession Step',
|
||
value: {
|
||
stepKey: 'FIRST_BLAME_CONFESSION',
|
||
type: 'THIRD_PARTY',
|
||
stepNumber: 2,
|
||
isActive: true,
|
||
stepName_fa: 'اعتراف طرف اول',
|
||
stepName_en: 'First Party Blame Confession',
|
||
description_fa: 'طرف اول وضعیت تقصیر و اعتراف خود را مشخص میکند',
|
||
description_en: 'First party declares blame status and confession',
|
||
category: 'FIRST_PARTY',
|
||
requiredPreviousSteps: ['CREATED'],
|
||
nextPossibleSteps: ['FIRST_VIDEO'],
|
||
allowedRoles: ['user'],
|
||
estimatedDuration: 2,
|
||
fields: [
|
||
{
|
||
id: '507f1f77bcf86cd799439012',
|
||
name_fa: 'وضعیت تقصیر',
|
||
name_en: 'blameStatus',
|
||
label_fa: 'وضعیت تقصیر',
|
||
label_en: 'Blame Status',
|
||
placeholder_fa: 'وضعیت تقصیر را انتخاب کنید',
|
||
placeholder_en: 'Select blame status',
|
||
value: [
|
||
{ label_fa: 'موافق', label_en: 'Agreed', value: 'AGREED' },
|
||
{ label_fa: 'مخالف', label_en: 'Disagreement', value: 'DISAGREEMENT' }
|
||
],
|
||
dataType: 'select',
|
||
required: true,
|
||
order: 1,
|
||
isActive: true,
|
||
validation: {
|
||
enum: ['AGREED', 'DISAGREEMENT']
|
||
}
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd799439013',
|
||
name_fa: 'اعتراف',
|
||
name_en: 'confess',
|
||
label_fa: 'اعتراف',
|
||
label_en: 'Confession',
|
||
placeholder_fa: 'نوع اعتراف خود را انتخاب کنید',
|
||
placeholder_en: 'Select your confession type',
|
||
value: [
|
||
{ label_fa: 'مقصر', label_en: 'Guilty', value: 'guilty' },
|
||
{ label_fa: 'آسیب دیده', label_en: 'Damaged', value: 'damaged' }
|
||
],
|
||
dataType: 'select',
|
||
required: true,
|
||
order: 2,
|
||
isActive: true,
|
||
validation: {
|
||
enum: ['guilty', 'damaged']
|
||
}
|
||
}
|
||
],
|
||
metadata: {
|
||
icon: 'balance-scale',
|
||
color: '#F59E0B',
|
||
requiresAuth: true
|
||
}
|
||
}
|
||
},
|
||
example3: {
|
||
summary: 'Live Video Capture Step',
|
||
value: {
|
||
stepKey: 'FIRST_VIDEO',
|
||
type: 'THIRD_PARTY',
|
||
stepNumber: 3,
|
||
isActive: true,
|
||
stepName_fa: 'ضبط ویدیو طرف اول',
|
||
stepName_en: 'First Party Video Capture',
|
||
description_fa: 'ضبط ویدیو مستقیم از دوربین توسط طرف اول (گالری مجاز نیست)',
|
||
description_en: 'Live video capture from camera by first party (gallery not allowed)',
|
||
category: 'FIRST_PARTY',
|
||
requiredPreviousSteps: ['FIRST_BLAME_CONFESSION'],
|
||
nextPossibleSteps: ['FIRST_INITIAL_FORM'],
|
||
allowedRoles: ['user'],
|
||
estimatedDuration: 3,
|
||
fields: [
|
||
{
|
||
id: '507f1f77bcf86cd799439014',
|
||
name_fa: 'فایل ویدیو',
|
||
name_en: 'file',
|
||
label_fa: 'ضبط ویدیو',
|
||
label_en: 'Video Recording',
|
||
placeholder_fa: 'ویدیو خود را از دوربین ضبط کنید',
|
||
placeholder_en: 'Record your video from camera',
|
||
value: null,
|
||
dataType: 'video-capture',
|
||
required: true,
|
||
order: 1,
|
||
isActive: true,
|
||
validation: {
|
||
maxSize: 52428800,
|
||
maxDuration: 180,
|
||
allowedTypes: ['video/mp4', 'video/webm'],
|
||
captureMode: 'camera-only',
|
||
allowGallery: false
|
||
}
|
||
}
|
||
],
|
||
metadata: {
|
||
icon: 'video-camera',
|
||
color: '#EF4444',
|
||
captureType: 'live-camera',
|
||
allowGallerySelection: false,
|
||
requiresCamera: true
|
||
}
|
||
}
|
||
},
|
||
example4: {
|
||
summary: 'Main Form Step - Driver & Insurer Details',
|
||
value: {
|
||
stepKey: 'FIRST_INITIAL_FORM',
|
||
type: 'THIRD_PARTY',
|
||
stepNumber: 4,
|
||
isActive: true,
|
||
stepName_fa: 'فرم اصلی اطلاعات راننده و بیمهگذار',
|
||
stepName_en: 'Main Form - Driver & Insurer Information',
|
||
description_fa: 'وارد کردن اطلاعات کامل راننده، بیمهگذار و خودرو',
|
||
description_en: 'Enter complete driver, insurer and vehicle information',
|
||
category: 'FIRST_PARTY',
|
||
requiredPreviousSteps: ['FIRST_VIDEO'],
|
||
nextPossibleSteps: ['FIRST_LOCATION'],
|
||
allowedRoles: ['user'],
|
||
estimatedDuration: 5,
|
||
fields: [
|
||
{
|
||
id: '507f1f77bcf86cd799439015',
|
||
name_fa: 'کد ملی مالک',
|
||
name_en: 'nationalCodeOfOwner',
|
||
label_fa: 'کد ملی مالک',
|
||
label_en: 'National Code of Owner',
|
||
placeholder_fa: 'کد ملی ۱۰ رقمی مالک را وارد کنید',
|
||
placeholder_en: 'Enter 10-digit national code of insurer',
|
||
value: null,
|
||
dataType: 'string',
|
||
required: true,
|
||
order: 1,
|
||
isActive: true,
|
||
validation: {
|
||
pattern: '^[0-9]{10}$',
|
||
minLength: 10,
|
||
maxLength: 10
|
||
}
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd799439016',
|
||
name_fa: 'کد ملی راننده',
|
||
name_en: 'nationalCodeOfDriver',
|
||
label_fa: 'کد ملی راننده',
|
||
label_en: 'National Code of Driver',
|
||
placeholder_fa: 'کد ملی ۱۰ رقمی راننده را وارد کنید',
|
||
placeholder_en: 'Enter 10-digit national code of driver',
|
||
value: null,
|
||
dataType: 'string',
|
||
required: true,
|
||
order: 2,
|
||
isActive: true,
|
||
validation: {
|
||
pattern: '^[0-9]{10}$',
|
||
minLength: 10,
|
||
maxLength: 10
|
||
}
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd799439017',
|
||
name_fa: 'شماره گواهینامه بیمهگذار',
|
||
name_en: 'insurerLicense',
|
||
label_fa: 'شماره گواهینامه بیمهگذار',
|
||
label_en: 'Insurer License Number',
|
||
placeholder_fa: 'شماره گواهینامه بیمهگذار را وارد کنید',
|
||
placeholder_en: 'Enter insurer license number',
|
||
value: null,
|
||
dataType: 'string',
|
||
required: true,
|
||
order: 3,
|
||
isActive: true,
|
||
validation: {
|
||
minLength: 5,
|
||
maxLength: 20
|
||
}
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd799439018',
|
||
name_fa: 'شماره گواهینامه راننده',
|
||
name_en: 'driverLicense',
|
||
label_fa: 'شماره گواهینامه راننده',
|
||
label_en: 'Driver License Number',
|
||
placeholder_fa: 'شماره گواهینامه راننده را وارد کنید',
|
||
placeholder_en: 'Enter driver license number',
|
||
value: null,
|
||
dataType: 'string',
|
||
required: true,
|
||
order: 4,
|
||
isActive: true,
|
||
validation: {
|
||
minLength: 5,
|
||
maxLength: 20
|
||
}
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd799439019',
|
||
name_fa: 'پلاک خودرو',
|
||
name_en: 'plate',
|
||
label_fa: 'پلاک خودرو',
|
||
label_en: 'Vehicle Plate',
|
||
placeholder_fa: 'اطلاعات پلاک خودرو را وارد کنید',
|
||
placeholder_en: 'Enter vehicle plate information',
|
||
value: null,
|
||
dataType: 'object',
|
||
required: true,
|
||
order: 5,
|
||
isActive: true,
|
||
validation: {
|
||
type: 'object',
|
||
properties: {
|
||
leftDigits: { type: 'number', min: 10, max: 99 },
|
||
centerAlphabet: { type: 'string', pattern: '^[آ-ی]{1}$' },
|
||
centerDigits: { type: 'number', min: 100, max: 999 },
|
||
ir: { type: 'number', min: 10, max: 99 }
|
||
}
|
||
}
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd79943901a',
|
||
name_fa: 'راننده همان بیمهگذار است',
|
||
name_en: 'driverIsInsurer',
|
||
label_fa: 'راننده همان بیمهگذار است',
|
||
label_en: 'Driver is Insurer',
|
||
placeholder_fa: '',
|
||
placeholder_en: '',
|
||
value: null,
|
||
dataType: 'boolean',
|
||
required: true,
|
||
order: 6,
|
||
isActive: true,
|
||
validation: {
|
||
type: 'boolean'
|
||
}
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd79943901b',
|
||
name_fa: 'خودرو صفر است',
|
||
name_en: 'isNewCar',
|
||
label_fa: 'خودرو صفر است',
|
||
label_en: 'Is New Car',
|
||
placeholder_fa: '',
|
||
placeholder_en: '',
|
||
value: null,
|
||
dataType: 'boolean',
|
||
required: true,
|
||
order: 7,
|
||
isActive: true,
|
||
validation: {
|
||
type: 'boolean'
|
||
}
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd79943901c',
|
||
name_fa: 'بدون گواهی',
|
||
name_en: 'userNoCertificate',
|
||
label_fa: 'کاربر گواهی ندارد',
|
||
label_en: 'User Has No Certificate',
|
||
placeholder_fa: '',
|
||
placeholder_en: '',
|
||
value: null,
|
||
dataType: 'boolean',
|
||
required: true,
|
||
order: 8,
|
||
isActive: true,
|
||
validation: {
|
||
type: 'boolean'
|
||
}
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd79943901d',
|
||
name_fa: 'تاریخ تولد بیمهگذار',
|
||
name_en: 'insurerBirthday',
|
||
label_fa: 'تاریخ تولد بیمهگذار',
|
||
label_en: 'Insurer Birthday',
|
||
placeholder_fa: 'تاریخ تولد بیمهگذار (timestamp)',
|
||
placeholder_en: 'Insurer birthday (timestamp)',
|
||
value: null,
|
||
dataType: 'number',
|
||
required: true,
|
||
order: 9,
|
||
isActive: true,
|
||
validation: {
|
||
type: 'number',
|
||
min: 0
|
||
}
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd79943901e',
|
||
name_fa: 'تاریخ تولد راننده',
|
||
name_en: 'driverBirthday',
|
||
label_fa: 'تاریخ تولد راننده',
|
||
label_en: 'Driver Birthday',
|
||
placeholder_fa: 'تاریخ تولد راننده را وارد کنید',
|
||
placeholder_en: 'Enter driver birthday',
|
||
value: null,
|
||
dataType: 'string',
|
||
required: true,
|
||
order: 10,
|
||
isActive: true,
|
||
validation: {
|
||
format: 'date'
|
||
}
|
||
}
|
||
],
|
||
metadata: {
|
||
icon: 'clipboard-list',
|
||
color: '#8B5CF6',
|
||
formType: 'detailed',
|
||
hasComplexValidation: true
|
||
}
|
||
}
|
||
},
|
||
example5: {
|
||
summary: 'Location Step - GPS Coordinates',
|
||
value: {
|
||
stepKey: 'FIRST_LOCATION',
|
||
type: 'THIRD_PARTY',
|
||
stepNumber: 5,
|
||
isActive: true,
|
||
stepName_fa: 'موقعیت مکانی حادثه',
|
||
stepName_en: 'Accident Location',
|
||
description_fa: 'ثبت موقعیت جغرافیایی محل وقوع حادثه',
|
||
description_en: 'Record geographical location of accident scene',
|
||
category: 'FIRST_PARTY',
|
||
requiredPreviousSteps: ['FIRST_INITIAL_FORM'],
|
||
nextPossibleSteps: ['FIRST_DESCRIPTION'],
|
||
allowedRoles: ['user'],
|
||
estimatedDuration: 2,
|
||
fields: [
|
||
{
|
||
id: '507f1f77bcf86cd79943901f',
|
||
name_fa: 'عرض جغرافیایی',
|
||
name_en: 'lat',
|
||
label_fa: 'عرض جغرافیایی',
|
||
label_en: 'Latitude',
|
||
placeholder_fa: 'عرض جغرافیایی را وارد کنید',
|
||
placeholder_en: 'Enter latitude',
|
||
value: null,
|
||
dataType: 'number',
|
||
required: true,
|
||
order: 1,
|
||
isActive: true,
|
||
validation: {
|
||
type: 'number',
|
||
min: -90,
|
||
max: 90
|
||
}
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd799439020',
|
||
name_fa: 'طول جغرافیایی',
|
||
name_en: 'lon',
|
||
label_fa: 'طول جغرافیایی',
|
||
label_en: 'Longitude',
|
||
placeholder_fa: 'طول جغرافیایی را وارد کنید',
|
||
placeholder_en: 'Enter longitude',
|
||
value: null,
|
||
dataType: 'number',
|
||
required: true,
|
||
order: 2,
|
||
isActive: true,
|
||
validation: {
|
||
type: 'number',
|
||
min: -180,
|
||
max: 180
|
||
}
|
||
}
|
||
],
|
||
metadata: {
|
||
icon: 'map-pin',
|
||
color: '#10B981',
|
||
requiresGPS: true,
|
||
autoDetectLocation: true
|
||
}
|
||
}
|
||
},
|
||
example6: {
|
||
summary: 'Voice Recording Step',
|
||
value: {
|
||
stepKey: 'FIRST_VOICE',
|
||
type: 'THIRD_PARTY',
|
||
stepNumber: 6,
|
||
isActive: true,
|
||
stepName_fa: 'ضبط صدای طرف اول',
|
||
stepName_en: 'First Party Voice Recording',
|
||
description_fa: 'ضبط توضیحات صوتی توسط طرف اول',
|
||
description_en: 'Voice recording of explanations by first party',
|
||
category: 'FIRST_PARTY',
|
||
requiredPreviousSteps: ['FIRST_LOCATION'],
|
||
nextPossibleSteps: ['FIRST_DESCRIPTION'],
|
||
allowedRoles: ['user'],
|
||
estimatedDuration: 3,
|
||
fields: [
|
||
{
|
||
id: '507f1f77bcf86cd799439021',
|
||
name_fa: 'فایل صوتی',
|
||
name_en: 'file',
|
||
label_fa: 'ضبط صدا',
|
||
label_en: 'Voice Recording',
|
||
placeholder_fa: 'توضیحات صوتی خود را ضبط کنید',
|
||
placeholder_en: 'Record your voice explanation',
|
||
value: null,
|
||
dataType: 'audio-file',
|
||
required: true,
|
||
order: 1,
|
||
isActive: true,
|
||
validation: {
|
||
maxSize: 10485760,
|
||
maxDuration: 300,
|
||
allowedTypes: ['audio/mp3', 'audio/mpeg', 'audio/wav', 'audio/m4a', 'audio/webm']
|
||
}
|
||
}
|
||
],
|
||
metadata: {
|
||
icon: 'microphone',
|
||
color: '#F59E0B',
|
||
recordingType: 'voice',
|
||
requiresMicrophone: true
|
||
}
|
||
}
|
||
},
|
||
example7: {
|
||
summary: 'First Party Description Step',
|
||
value: {
|
||
stepKey: 'FIRST_DESCRIPTION',
|
||
type: 'THIRD_PARTY',
|
||
stepNumber: 7,
|
||
isActive: true,
|
||
stepName_fa: 'توضیحات طرف اول',
|
||
stepName_en: 'First Party Description',
|
||
description_fa: 'ثبت توضیحات و جزئیات حادثه توسط طرف اول',
|
||
description_en: 'Record accident description and details by first party',
|
||
category: 'FIRST_PARTY',
|
||
requiredPreviousSteps: ['FIRST_VOICE'],
|
||
nextPossibleSteps: ['FIRST_INVITE_SECOND'],
|
||
allowedRoles: ['user'],
|
||
estimatedDuration: 4,
|
||
fields: [
|
||
{
|
||
id: '507f1f77bcf86cd799439022',
|
||
name_fa: 'توضیحات',
|
||
name_en: 'desc',
|
||
label_fa: 'توضیحات حادثه',
|
||
label_en: 'Accident Description',
|
||
placeholder_fa: 'توضیحات کامل حادثه را وارد کنید',
|
||
placeholder_en: 'Enter complete accident description',
|
||
value: null,
|
||
dataType: 'textarea',
|
||
required: true,
|
||
order: 1,
|
||
isActive: true,
|
||
validation: {
|
||
minLength: 10,
|
||
maxLength: 2000
|
||
}
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd799439023',
|
||
name_fa: 'تاریخ حادثه',
|
||
name_en: 'accidentDate',
|
||
label_fa: 'تاریخ حادثه',
|
||
label_en: 'Accident Date',
|
||
placeholder_fa: 'تاریخ وقوع حادثه را وارد کنید',
|
||
placeholder_en: 'Enter accident date',
|
||
value: null,
|
||
dataType: 'date',
|
||
required: true,
|
||
order: 2,
|
||
isActive: true,
|
||
validation: {
|
||
format: 'YYYY-MM-DD'
|
||
}
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd799439024',
|
||
name_fa: 'زمان حادثه',
|
||
name_en: 'accidentTime',
|
||
label_fa: 'زمان حادثه',
|
||
label_en: 'Accident Time',
|
||
placeholder_fa: 'زمان وقوع حادثه را وارد کنید',
|
||
placeholder_en: 'Enter accident time',
|
||
value: null,
|
||
dataType: 'time',
|
||
required: true,
|
||
order: 3,
|
||
isActive: true,
|
||
validation: {
|
||
format: 'HH:mm'
|
||
}
|
||
}
|
||
],
|
||
metadata: {
|
||
icon: 'file-text',
|
||
color: '#6366F1'
|
||
}
|
||
}
|
||
},
|
||
example8: {
|
||
summary: 'Invite Second Party Step',
|
||
value: {
|
||
stepKey: 'FIRST_INVITE_SECOND',
|
||
type: 'THIRD_PARTY',
|
||
stepNumber: 8,
|
||
isActive: true,
|
||
stepName_fa: 'دعوت طرف دوم',
|
||
stepName_en: 'Invite Second Party',
|
||
description_fa: 'ارسال دعوتنامه به طرف دوم برای ثبت اطلاعات',
|
||
description_en: 'Send invitation to second party to register information',
|
||
category: 'FIRST_PARTY',
|
||
requiredPreviousSteps: ['FIRST_DESCRIPTION'],
|
||
nextPossibleSteps: ['SECOND_INITIAL_FORM'],
|
||
allowedRoles: ['user'],
|
||
estimatedDuration: 1,
|
||
fields: [],
|
||
metadata: {
|
||
icon: 'user-plus',
|
||
color: '#8B5CF6',
|
||
requiresPhoneNumber: true,
|
||
actionType: 'invitation'
|
||
}
|
||
}
|
||
},
|
||
example9: {
|
||
summary: 'Second Party Main Form',
|
||
value: {
|
||
stepKey: 'SECOND_INITIAL_FORM',
|
||
type: 'THIRD_PARTY',
|
||
stepNumber: 9,
|
||
isActive: true,
|
||
stepName_fa: 'فرم اصلی اطلاعات طرف دوم',
|
||
stepName_en: 'Second Party Main Form',
|
||
description_fa: 'وارد کردن اطلاعات کامل راننده، بیمهگذار و خودرو طرف دوم',
|
||
description_en: 'Enter complete driver, insurer and vehicle information for second party',
|
||
category: 'SECOND_PARTY',
|
||
requiredPreviousSteps: ['FIRST_INVITE_SECOND'],
|
||
nextPossibleSteps: ['SECOND_LOCATION'],
|
||
allowedRoles: ['user'],
|
||
estimatedDuration: 5,
|
||
fields: [
|
||
{
|
||
id: '507f1f77bcf86cd799439025',
|
||
name_fa: 'کد ملی مالک',
|
||
name_en: 'nationalCodeOfOwner',
|
||
label_fa: 'کد ملی مالک',
|
||
label_en: 'National Code of Owner',
|
||
placeholder_fa: 'کد ملی ۱۰ رقمی مالک را وارد کنید',
|
||
placeholder_en: 'Enter 10-digit national code of insurer',
|
||
value: null,
|
||
dataType: 'string',
|
||
required: true,
|
||
order: 1,
|
||
isActive: true,
|
||
validation: {
|
||
pattern: '^[0-9]{10}$',
|
||
minLength: 10,
|
||
maxLength: 10
|
||
}
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd799439026',
|
||
name_fa: 'کد ملی راننده',
|
||
name_en: 'nationalCodeOfDriver',
|
||
label_fa: 'کد ملی راننده',
|
||
label_en: 'National Code of Driver',
|
||
placeholder_fa: 'کد ملی ۱۰ رقمی راننده را وارد کنید',
|
||
placeholder_en: 'Enter 10-digit national code of driver',
|
||
value: null,
|
||
dataType: 'string',
|
||
required: true,
|
||
order: 2,
|
||
isActive: true,
|
||
validation: {
|
||
pattern: '^[0-9]{10}$',
|
||
minLength: 10,
|
||
maxLength: 10
|
||
}
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd799439027',
|
||
name_fa: 'شماره گواهینامه بیمهگذار',
|
||
name_en: 'insurerLicense',
|
||
label_fa: 'شماره گواهینامه بیمهگذار',
|
||
label_en: 'Insurer License Number',
|
||
placeholder_fa: 'شماره گواهینامه بیمهگذار را وارد کنید',
|
||
placeholder_en: 'Enter insurer license number',
|
||
value: null,
|
||
dataType: 'string',
|
||
required: true,
|
||
order: 3,
|
||
isActive: true,
|
||
validation: {
|
||
minLength: 5,
|
||
maxLength: 20
|
||
}
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd799439028',
|
||
name_fa: 'شماره گواهینامه راننده',
|
||
name_en: 'driverLicense',
|
||
label_fa: 'شماره گواهینامه راننده',
|
||
label_en: 'Driver License Number',
|
||
placeholder_fa: 'شماره گواهینامه راننده را وارد کنید',
|
||
placeholder_en: 'Enter driver license number',
|
||
value: null,
|
||
dataType: 'string',
|
||
required: true,
|
||
order: 4,
|
||
isActive: true,
|
||
validation: {
|
||
minLength: 5,
|
||
maxLength: 20
|
||
}
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd799439029',
|
||
name_fa: 'پلاک خودرو',
|
||
name_en: 'plate',
|
||
label_fa: 'پلاک خودرو',
|
||
label_en: 'Vehicle Plate',
|
||
placeholder_fa: 'اطلاعات پلاک خودرو را وارد کنید',
|
||
placeholder_en: 'Enter vehicle plate information',
|
||
value: null,
|
||
dataType: 'object',
|
||
required: true,
|
||
order: 5,
|
||
isActive: true,
|
||
validation: {
|
||
type: 'object',
|
||
properties: {
|
||
leftDigits: { type: 'number', min: 10, max: 99 },
|
||
centerAlphabet: { type: 'string', pattern: '^[آ-ی]{1}$' },
|
||
centerDigits: { type: 'number', min: 100, max: 999 },
|
||
ir: { type: 'number', min: 10, max: 99 }
|
||
}
|
||
}
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd79943902a',
|
||
name_fa: 'راننده همان بیمهگذار است',
|
||
name_en: 'driverIsInsurer',
|
||
label_fa: 'راننده همان بیمهگذار است',
|
||
label_en: 'Driver is Insurer',
|
||
value: null,
|
||
dataType: 'boolean',
|
||
required: true,
|
||
order: 6,
|
||
isActive: true
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd79943902b',
|
||
name_fa: 'خودرو صفر است',
|
||
name_en: 'isNewCar',
|
||
label_fa: 'خودرو صفر است',
|
||
label_en: 'Is New Car',
|
||
value: null,
|
||
dataType: 'boolean',
|
||
required: true,
|
||
order: 7,
|
||
isActive: true
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd79943902c',
|
||
name_fa: 'بدون گواهی',
|
||
name_en: 'userNoCertificate',
|
||
label_fa: 'کاربر گواهی ندارد',
|
||
label_en: 'User Has No Certificate',
|
||
value: null,
|
||
dataType: 'boolean',
|
||
required: true,
|
||
order: 8,
|
||
isActive: true
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd79943902d',
|
||
name_fa: 'تاریخ تولد بیمهگذار',
|
||
name_en: 'insurerBirthday',
|
||
label_fa: 'تاریخ تولد بیمهگذار',
|
||
label_en: 'Insurer Birthday',
|
||
placeholder_fa: 'تاریخ تولد بیمهگذار (timestamp)',
|
||
placeholder_en: 'Insurer birthday (timestamp)',
|
||
value: null,
|
||
dataType: 'number',
|
||
required: true,
|
||
order: 9,
|
||
isActive: true,
|
||
validation: {
|
||
type: 'number',
|
||
min: 0
|
||
}
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd79943902e',
|
||
name_fa: 'تاریخ تولد راننده',
|
||
name_en: 'driverBirthday',
|
||
label_fa: 'تاریخ تولد راننده',
|
||
label_en: 'Driver Birthday',
|
||
placeholder_fa: 'تاریخ تولد راننده را وارد کنید',
|
||
placeholder_en: 'Enter driver birthday',
|
||
value: null,
|
||
dataType: 'string',
|
||
required: true,
|
||
order: 10,
|
||
isActive: true,
|
||
validation: {
|
||
format: 'date'
|
||
}
|
||
}
|
||
],
|
||
metadata: {
|
||
icon: 'clipboard-list',
|
||
color: '#8B5CF6',
|
||
formType: 'detailed',
|
||
hasComplexValidation: true,
|
||
party: 'second'
|
||
}
|
||
}
|
||
},
|
||
example10: {
|
||
summary: 'Second Party Location',
|
||
value: {
|
||
stepKey: 'SECOND_LOCATION',
|
||
type: 'THIRD_PARTY',
|
||
stepNumber: 10,
|
||
isActive: true,
|
||
stepName_fa: 'موقعیت مکانی طرف دوم',
|
||
stepName_en: 'Second Party Location',
|
||
description_fa: 'ثبت موقعیت جغرافیایی طرف دوم',
|
||
description_en: 'Record second party geographical location',
|
||
category: 'SECOND_PARTY',
|
||
requiredPreviousSteps: ['SECOND_INITIAL_FORM'],
|
||
nextPossibleSteps: ['SECOND_VOICE'],
|
||
allowedRoles: ['user'],
|
||
estimatedDuration: 2,
|
||
fields: [
|
||
{
|
||
id: '507f1f77bcf86cd79943902f',
|
||
name_fa: 'عرض جغرافیایی',
|
||
name_en: 'lat',
|
||
label_fa: 'عرض جغرافیایی',
|
||
label_en: 'Latitude',
|
||
placeholder_fa: 'عرض جغرافیایی را وارد کنید',
|
||
placeholder_en: 'Enter latitude',
|
||
value: null,
|
||
dataType: 'number',
|
||
required: true,
|
||
order: 1,
|
||
isActive: true,
|
||
validation: {
|
||
type: 'number',
|
||
min: -90,
|
||
max: 90
|
||
}
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd799439030',
|
||
name_fa: 'طول جغرافیایی',
|
||
name_en: 'lon',
|
||
label_fa: 'طول جغرافیایی',
|
||
label_en: 'Longitude',
|
||
placeholder_fa: 'طول جغرافیایی را وارد کنید',
|
||
placeholder_en: 'Enter longitude',
|
||
value: null,
|
||
dataType: 'number',
|
||
required: true,
|
||
order: 2,
|
||
isActive: true,
|
||
validation: {
|
||
type: 'number',
|
||
min: -180,
|
||
max: 180
|
||
}
|
||
}
|
||
],
|
||
metadata: {
|
||
icon: 'map-pin',
|
||
color: '#10B981',
|
||
requiresGPS: true,
|
||
autoDetectLocation: true,
|
||
party: 'second'
|
||
}
|
||
}
|
||
},
|
||
example11: {
|
||
summary: 'Second Party Voice Recording',
|
||
value: {
|
||
stepKey: 'SECOND_VOICE',
|
||
type: 'THIRD_PARTY',
|
||
stepNumber: 11,
|
||
isActive: true,
|
||
stepName_fa: 'ضبط صدای طرف دوم',
|
||
stepName_en: 'Second Party Voice Recording',
|
||
description_fa: 'ضبط توضیحات صوتی توسط طرف دوم',
|
||
description_en: 'Voice recording of explanations by second party',
|
||
category: 'SECOND_PARTY',
|
||
requiredPreviousSteps: ['SECOND_LOCATION'],
|
||
nextPossibleSteps: ['SECOND_DESCRIPTION'],
|
||
allowedRoles: ['user'],
|
||
estimatedDuration: 3,
|
||
fields: [
|
||
{
|
||
id: '507f1f77bcf86cd799439031',
|
||
name_fa: 'فایل صوتی',
|
||
name_en: 'file',
|
||
label_fa: 'ضبط صدا',
|
||
label_en: 'Voice Recording',
|
||
placeholder_fa: 'توضیحات صوتی خود را ضبط کنید',
|
||
placeholder_en: 'Record your voice explanation',
|
||
value: null,
|
||
dataType: 'audio-file',
|
||
required: true,
|
||
order: 1,
|
||
isActive: true,
|
||
validation: {
|
||
maxSize: 10485760,
|
||
maxDuration: 300,
|
||
allowedTypes: ['audio/mp3', 'audio/mpeg', 'audio/wav', 'audio/m4a', 'audio/webm']
|
||
}
|
||
}
|
||
],
|
||
metadata: {
|
||
icon: 'microphone',
|
||
color: '#F59E0B',
|
||
recordingType: 'voice',
|
||
requiresMicrophone: true,
|
||
party: 'second'
|
||
}
|
||
}
|
||
},
|
||
example12: {
|
||
summary: 'Second Party Description',
|
||
value: {
|
||
stepKey: 'SECOND_DESCRIPTION',
|
||
type: 'THIRD_PARTY',
|
||
stepNumber: 12,
|
||
isActive: true,
|
||
stepName_fa: 'توضیحات طرف دوم',
|
||
stepName_en: 'Second Party Description',
|
||
description_fa: 'ثبت توضیحات و جزئیات حادثه توسط طرف دوم',
|
||
description_en: 'Record accident description and details by second party',
|
||
category: 'SECOND_PARTY',
|
||
requiredPreviousSteps: ['SECOND_VOICE'],
|
||
nextPossibleSteps: ['WAITING_FOR_GUILT_DECISION'],
|
||
allowedRoles: ['user'],
|
||
estimatedDuration: 4,
|
||
fields: [
|
||
{
|
||
id: '507f1f77bcf86cd799439032',
|
||
name_fa: 'توضیحات',
|
||
name_en: 'desc',
|
||
label_fa: 'توضیحات حادثه',
|
||
label_en: 'Accident Description',
|
||
placeholder_fa: 'توضیحات کامل حادثه را وارد کنید',
|
||
placeholder_en: 'Enter complete accident description',
|
||
value: null,
|
||
dataType: 'textarea',
|
||
required: true,
|
||
order: 1,
|
||
isActive: true,
|
||
validation: {
|
||
minLength: 10,
|
||
maxLength: 2000
|
||
}
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd799439033',
|
||
name_fa: 'تاریخ حادثه',
|
||
name_en: 'accidentDate',
|
||
label_fa: 'تاریخ حادثه',
|
||
label_en: 'Accident Date',
|
||
placeholder_fa: 'تاریخ وقوع حادثه را وارد کنید',
|
||
placeholder_en: 'Enter accident date',
|
||
value: null,
|
||
dataType: 'date',
|
||
required: true,
|
||
order: 2,
|
||
isActive: true,
|
||
validation: {
|
||
format: 'YYYY-MM-DD'
|
||
}
|
||
},
|
||
{
|
||
id: '507f1f77bcf86cd799439034',
|
||
name_fa: 'زمان حادثه',
|
||
name_en: 'accidentTime',
|
||
label_fa: 'زمان حادثه',
|
||
label_en: 'Accident Time',
|
||
placeholder_fa: 'زمان وقوع حادثه را وارد کنید',
|
||
placeholder_en: 'Enter accident time',
|
||
value: null,
|
||
dataType: 'time',
|
||
required: true,
|
||
order: 3,
|
||
isActive: true,
|
||
validation: {
|
||
format: 'HH:mm'
|
||
}
|
||
}
|
||
],
|
||
metadata: {
|
||
icon: 'file-text',
|
||
color: '#6366F1',
|
||
party: 'second'
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
export const updateWorkflowStepExamples = {
|
||
example1: {
|
||
summary: 'Update step name and description',
|
||
value: {
|
||
stepName_fa: 'ویدیو طرف اول - بروزرسانی شده',
|
||
stepName_en: 'First Party Video - Updated',
|
||
description_fa: 'توضیحات بروزرسانی شده',
|
||
description_en: 'Updated description',
|
||
category: 'FIRST_PARTY',
|
||
isActive: true
|
||
}
|
||
},
|
||
example2: {
|
||
summary: 'Update video capture field settings',
|
||
value: {
|
||
fields: [
|
||
{
|
||
id: '507f1f77bcf86cd799439014',
|
||
name_fa: 'فایل ویدیو',
|
||
name_en: 'file',
|
||
label_fa: 'ضبط ویدیو',
|
||
label_en: 'Video Recording',
|
||
placeholder_fa: 'ویدیو خود را از دوربین ضبط کنید',
|
||
placeholder_en: 'Record your video from camera',
|
||
value: null,
|
||
dataType: 'video-capture',
|
||
required: true,
|
||
order: 1,
|
||
isActive: true,
|
||
validation: {
|
||
maxSize: 104857600,
|
||
maxDuration: 300,
|
||
allowedTypes: ['video/mp4', 'video/webm'],
|
||
captureMode: 'camera-only',
|
||
allowGallery: false
|
||
}
|
||
}
|
||
]
|
||
}
|
||
},
|
||
example3: {
|
||
summary: 'Update step metadata',
|
||
value: {
|
||
metadata: {
|
||
icon: 'video-camera',
|
||
color: '#10B981',
|
||
priority: 'high',
|
||
captureType: 'live-camera',
|
||
requiresCamera: true
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
export const bulkUpsertWorkflowStepExamples = {
|
||
example1: {
|
||
summary: 'Bulk upsert example',
|
||
value: [
|
||
{
|
||
stepKey: 'FIRST_VIDEO',
|
||
type: 'THIRD_PARTY',
|
||
stepNumber: 3,
|
||
stepName_fa: 'ویدیو طرف اول',
|
||
stepName_en: 'First Party Video',
|
||
category: 'FIRST_PARTY',
|
||
isActive: true
|
||
},
|
||
{
|
||
stepKey: 'FIRST_INITIAL_FORM',
|
||
type: 'THIRD_PARTY',
|
||
stepNumber: 4,
|
||
stepName_fa: 'فرم اولیه طرف اول',
|
||
stepName_en: 'First Party Initial Form',
|
||
category: 'FIRST_PARTY',
|
||
isActive: true
|
||
}
|
||
]
|
||
}
|
||
};
|
||
|
||
export const validateAccessExamples = {
|
||
example1: {
|
||
summary: 'Validate access example',
|
||
value: {
|
||
stepKey: 'FIRST_VIDEO',
|
||
completedSteps: ['CREATED']
|
||
}
|
||
}
|
||
};
|
||
|
||
// ============================================================
|
||
// CLAIM WORKFLOW STEP EXAMPLES
|
||
// ============================================================
|
||
|
||
export const claimWorkflowStepExamples = {
|
||
claimCreated: {
|
||
summary: 'Claim Step 1: CLAIM_CREATED',
|
||
value: {
|
||
"stepKey": "CLAIM_CREATED",
|
||
"type": "CLAIM",
|
||
"stepNumber": 1,
|
||
"isActive": true,
|
||
"stepName_fa": "ایجاد درخواست خسارت",
|
||
"stepName_en": "Create Claim Request",
|
||
"description_fa": "ایجاد درخواست خسارت از پرونده تعیین تقصیر تکمیل شده - فقط طرف آسیبدیده میتواند درخواست دهد",
|
||
"description_en": "Create claim request from completed blame case - only damaged party can proceed",
|
||
"category": "CLAIM",
|
||
"requiredPreviousSteps": [],
|
||
"nextPossibleSteps": ["SELECT_OUTER_PARTS"],
|
||
"allowedRoles": ["user"],
|
||
"estimatedDuration": 1,
|
||
"fields": [],
|
||
"metadata": {
|
||
"icon": "file-plus",
|
||
"color": "#8B5CF6",
|
||
"requiresBlameCase": true,
|
||
"blameStatusRequired": "COMPLETED",
|
||
"bothPartiesMustAccept": true,
|
||
"userMustBeDamagedParty": true
|
||
}
|
||
}
|
||
},
|
||
|
||
selectOuterParts: {
|
||
summary: 'Claim Step 2: SELECT_OUTER_PARTS',
|
||
value: {
|
||
"stepKey": "SELECT_OUTER_PARTS",
|
||
"type": "CLAIM",
|
||
"stepNumber": 2,
|
||
"isActive": true,
|
||
"stepName_fa": "انتخاب قطعات خارجی آسیبدیده",
|
||
"stepName_en": "Select Damaged Outer Parts",
|
||
"description_fa": "انتخاب قطعات خارجی خودرو که در حادثه آسیب دیدهاند (کاپوت، دربها، سپر و...)",
|
||
"description_en": "Select vehicle outer parts damaged in the accident (hood, doors, bumpers, etc.)",
|
||
"category": "CLAIM",
|
||
"requiredPreviousSteps": ["CLAIM_CREATED"],
|
||
"nextPossibleSteps": ["SELECT_OTHER_PARTS"],
|
||
"allowedRoles": ["user"],
|
||
"estimatedDuration": 3,
|
||
"fields": [
|
||
{
|
||
"id": "67fa10c259e15f231a2d1001",
|
||
"name_fa": "قطعات خارجی",
|
||
"name_en": "outerParts",
|
||
"label_fa": "قطعات خارجی آسیبدیده",
|
||
"label_en": "Damaged Outer Parts",
|
||
"placeholder_fa": "قطعات خارجی آسیبدیده را انتخاب کنید",
|
||
"placeholder_en": "Select damaged outer parts",
|
||
"value": [
|
||
{ "label_fa": "کاپوت", "label_en": "Hood", "value": "hood" },
|
||
{ "label_fa": "درب جلو راست", "label_en": "Front Right Door", "value": "front_right_door" },
|
||
{ "label_fa": "درب جلو چپ", "label_en": "Front Left Door", "value": "front_left_door" },
|
||
{ "label_fa": "درب عقب راست", "label_en": "Rear Right Door", "value": "rear_right_door" },
|
||
{ "label_fa": "درب عقب چپ", "label_en": "Rear Left Door", "value": "rear_left_door" },
|
||
{ "label_fa": "سپر جلو", "label_en": "Front Bumper", "value": "front_bumper" },
|
||
{ "label_fa": "سپر عقب", "label_en": "Rear Bumper", "value": "rear_bumper" },
|
||
{ "label_fa": "گلگیر جلو راست", "label_en": "Front Right Fender", "value": "front_right_fender" },
|
||
{ "label_fa": "گلگیر جلو چپ", "label_en": "Front Left Fender", "value": "front_left_fender" },
|
||
{ "label_fa": "گلگیر عقب راست", "label_en": "Rear Right Fender", "value": "rear_right_fender" },
|
||
{ "label_fa": "گلگیر عقب چپ", "label_en": "Rear Left Fender", "value": "rear_left_fender" },
|
||
{ "label_fa": "صندوق عقب", "label_en": "Trunk", "value": "trunk" },
|
||
{ "label_fa": "سقف", "label_en": "Roof", "value": "roof" }
|
||
],
|
||
"dataType": "multiselect",
|
||
"required": true,
|
||
"order": 1,
|
||
"isActive": true,
|
||
"validation": {
|
||
"minItems": 1,
|
||
"maxItems": 13
|
||
}
|
||
}
|
||
],
|
||
"metadata": {
|
||
"icon": "car",
|
||
"color": "#3B82F6",
|
||
"requiresMultipleSelection": true
|
||
}
|
||
}
|
||
},
|
||
|
||
selectOtherParts: {
|
||
summary: 'Claim Step 3: SELECT_OTHER_PARTS',
|
||
value: {
|
||
"stepKey": "SELECT_OTHER_PARTS",
|
||
"type": "CLAIM",
|
||
"stepNumber": 3,
|
||
"isActive": true,
|
||
"stepName_fa": "انتخاب سایر قطعات و اطلاعات بانکی",
|
||
"stepName_en": "Select Other Parts & Bank Information",
|
||
"description_fa": "انتخاب سایر قطعات آسیبدیده (غیر از بدنه)، شماره شبا و کد ملی بیمهگذار",
|
||
"description_en": "Select other damaged parts (non-body), Sheba number and insurer national code",
|
||
"category": "CLAIM",
|
||
"requiredPreviousSteps": ["SELECT_OUTER_PARTS"],
|
||
"nextPossibleSteps": ["UPLOAD_REQUIRED_DOCUMENTS"],
|
||
"allowedRoles": ["user"],
|
||
"estimatedDuration": 4,
|
||
"fields": [
|
||
{
|
||
"id": "67fa10c259e15f231a2d1002",
|
||
"name_fa": "سایر قطعات",
|
||
"name_en": "otherParts",
|
||
"label_fa": "سایر قطعات آسیبدیده",
|
||
"label_en": "Other Damaged Parts",
|
||
"placeholder_fa": "سایر قطعات آسیبدیده را انتخاب کنید",
|
||
"placeholder_en": "Select other damaged parts",
|
||
"value": [
|
||
{ "label_fa": "موتور", "label_en": "Engine", "value": "engine" },
|
||
{ "label_fa": "سیستم تعلیق", "label_en": "Suspension", "value": "suspension" },
|
||
{ "label_fa": "سیستم ترمز", "label_en": "Brake System", "value": "brake_system" },
|
||
{ "label_fa": "سیستم برق", "label_en": "Electrical System", "value": "electrical" },
|
||
{ "label_fa": "رادیاتور", "label_en": "Radiator", "value": "radiator" },
|
||
{ "label_fa": "گیربکس", "label_en": "Transmission", "value": "transmission" },
|
||
{ "label_fa": "اگزوز", "label_en": "Exhaust", "value": "exhaust" },
|
||
{ "label_fa": "چراغ جلو", "label_en": "Headlight", "value": "headlight" },
|
||
{ "label_fa": "چراغ عقب", "label_en": "Taillight", "value": "taillight" },
|
||
{ "label_fa": "آینه", "label_en": "Mirror", "value": "mirror" },
|
||
{ "label_fa": "شیشه", "label_en": "Glass", "value": "glass" }
|
||
],
|
||
"dataType": "multiselect",
|
||
"required": false,
|
||
"order": 1,
|
||
"isActive": true,
|
||
"validation": {
|
||
"minItems": 0,
|
||
"maxItems": 11
|
||
}
|
||
},
|
||
{
|
||
"id": "67fa10c259e15f231a2d1003",
|
||
"name_fa": "شماره شبا",
|
||
"name_en": "shebaNumber",
|
||
"label_fa": "شماره شبا",
|
||
"label_en": "Sheba Number",
|
||
"placeholder_fa": "شماره شبا (24 رقم بدون IR)",
|
||
"placeholder_en": "Sheba number (24 digits without IR)",
|
||
"value": null,
|
||
"dataType": "string",
|
||
"required": true,
|
||
"order": 2,
|
||
"isActive": true,
|
||
"validation": {
|
||
"pattern": "^[0-9]{24}$",
|
||
"minLength": 24,
|
||
"maxLength": 24
|
||
}
|
||
},
|
||
{
|
||
"id": "67fa10c259e15f231a2d1004",
|
||
"name_fa": "کد ملی مالک",
|
||
"name_en": "nationalCodeOfOwner",
|
||
"label_fa": "کد ملی مالک",
|
||
"label_en": "National Code of Owner",
|
||
"placeholder_fa": "کد ملی 10 رقمی مالک",
|
||
"placeholder_en": "10-digit national code of insurer",
|
||
"value": null,
|
||
"dataType": "string",
|
||
"required": true,
|
||
"order": 3,
|
||
"isActive": true,
|
||
"validation": {
|
||
"pattern": "^[0-9]{10}$",
|
||
"minLength": 10,
|
||
"maxLength": 10
|
||
}
|
||
}
|
||
],
|
||
"metadata": {
|
||
"icon": "list",
|
||
"color": "#10B981",
|
||
"requiresBankInfo": true
|
||
}
|
||
}
|
||
},
|
||
|
||
uploadRequiredDocuments: {
|
||
summary: 'Claim Step 4: UPLOAD_REQUIRED_DOCUMENTS',
|
||
value: {
|
||
"stepKey": "UPLOAD_REQUIRED_DOCUMENTS",
|
||
"type": "CLAIM",
|
||
"stepNumber": 4,
|
||
"isActive": true,
|
||
"stepName_fa": "آپلود مدارک مورد نیاز",
|
||
"stepName_en": "Upload Required Documents",
|
||
"description_fa": "آپلود مدارک مورد نیاز برای بررسی خسارت (لیست داینامیک بر اساس قطعات انتخاب شده)",
|
||
"description_en": "Upload required documents for claim review (dynamic list based on selected parts)",
|
||
"category": "CLAIM",
|
||
"requiredPreviousSteps": ["SELECT_OTHER_PARTS"],
|
||
"nextPossibleSteps": ["CAPTURE_PART_DAMAGES"],
|
||
"allowedRoles": ["user"],
|
||
"estimatedDuration": 5,
|
||
"fields": [],
|
||
"metadata": {
|
||
"icon": "upload",
|
||
"color": "#F59E0B",
|
||
"dynamicFields": true,
|
||
"requiresAPI": "/claim-request-management/car-part-image-required/:claimRequestID"
|
||
}
|
||
}
|
||
},
|
||
|
||
capturePartDamages: {
|
||
summary: 'Claim Step 5: CAPTURE_PART_DAMAGES',
|
||
value: {
|
||
"stepKey": "CAPTURE_PART_DAMAGES",
|
||
"type": "CLAIM",
|
||
"stepNumber": 5,
|
||
"isActive": true,
|
||
"stepName_fa": "ثبت تصاویر آسیبهای قطعات",
|
||
"stepName_en": "Capture Part Damages",
|
||
"description_fa": "ثبت تصاویر آسیب برای هر قطعه (یک درخواست به ازای هر قطعه)",
|
||
"description_en": "Capture damage images for each part (one request per part)",
|
||
"category": "CLAIM",
|
||
"requiredPreviousSteps": ["UPLOAD_REQUIRED_DOCUMENTS"],
|
||
"nextPossibleSteps": ["USER_SUBMISSION_COMPLETE"],
|
||
"allowedRoles": ["user"],
|
||
"estimatedDuration": 10,
|
||
"fields": [],
|
||
"metadata": {
|
||
"icon": "camera",
|
||
"color": "#EF4444",
|
||
"dynamicFields": true,
|
||
"requiresAPI": "/claim-request-management/capture-car-part-damage/:claimRequestID/:partId",
|
||
"requiresCamera": true,
|
||
"multipleRequests": true
|
||
}
|
||
}
|
||
},
|
||
|
||
userSubmissionComplete: {
|
||
summary: 'Claim Step 6: USER_SUBMISSION_COMPLETE',
|
||
value: {
|
||
"stepKey": "USER_SUBMISSION_COMPLETE",
|
||
"type": "CLAIM",
|
||
"stepNumber": 6,
|
||
"isActive": true,
|
||
"stepName_fa": "تکمیل ثبت اطلاعات کاربر",
|
||
"stepName_en": "User Submission Complete",
|
||
"description_fa": "اطلاعات کاربر به طور کامل ثبت شد و در انتظار بررسی کارشناس خسارت",
|
||
"description_en": "User information completed, waiting for damage expert review",
|
||
"category": "CLAIM",
|
||
"requiredPreviousSteps": ["CAPTURE_PART_DAMAGES"],
|
||
"nextPossibleSteps": ["EXPERT_DAMAGE_ASSESSMENT"],
|
||
"allowedRoles": ["user", "damage_expert", "admin"],
|
||
"estimatedDuration": 0,
|
||
"fields": [],
|
||
"metadata": {
|
||
"icon": "check-circle",
|
||
"color": "#10B981",
|
||
"readOnly": true,
|
||
"isSystemStep": true
|
||
}
|
||
}
|
||
},
|
||
|
||
expertDamageAssessment: {
|
||
summary: 'Claim Step 7: EXPERT_DAMAGE_ASSESSMENT',
|
||
value: {
|
||
"stepKey": "EXPERT_DAMAGE_ASSESSMENT",
|
||
"type": "CLAIM",
|
||
"stepNumber": 7,
|
||
"isActive": true,
|
||
"stepName_fa": "ارزیابی خسارت توسط کارشناس",
|
||
"stepName_en": "Expert Damage Assessment",
|
||
"description_fa": "بررسی و ارزیابی خسارت توسط کارشناس خسارت",
|
||
"description_en": "Damage review and assessment by damage expert",
|
||
"category": "EXPERT",
|
||
"requiredPreviousSteps": ["USER_SUBMISSION_COMPLETE"],
|
||
"nextPossibleSteps": ["EXPERT_COST_EVALUATION"],
|
||
"allowedRoles": ["damage_expert", "admin"],
|
||
"estimatedDuration": 30,
|
||
"fields": [
|
||
{
|
||
"id": "67fa10c259e15f231a2d1005",
|
||
"name_fa": "وضعیت ارزیابی",
|
||
"name_en": "assessmentStatus",
|
||
"label_fa": "وضعیت ارزیابی",
|
||
"label_en": "Assessment Status",
|
||
"placeholder_fa": "وضعیت ارزیابی را انتخاب کنید",
|
||
"placeholder_en": "Select assessment status",
|
||
"value": [
|
||
{ "label_fa": "تایید شده", "label_en": "Approved", "value": "approved" },
|
||
{ "label_fa": "نیاز به بازنگری", "label_en": "Needs Revision", "value": "needs_revision" },
|
||
{ "label_fa": "رد شده", "label_en": "Rejected", "value": "rejected" }
|
||
],
|
||
"dataType": "select",
|
||
"required": true,
|
||
"order": 1,
|
||
"isActive": true,
|
||
"validation": {
|
||
"enum": ["approved", "needs_revision", "rejected"]
|
||
}
|
||
},
|
||
{
|
||
"id": "67fa10c259e15f231a2d1006",
|
||
"name_fa": "توضیحات کارشناس",
|
||
"name_en": "expertComments",
|
||
"label_fa": "توضیحات کارشناس",
|
||
"label_en": "Expert Comments",
|
||
"placeholder_fa": "توضیحات خود را وارد کنید",
|
||
"placeholder_en": "Enter your comments",
|
||
"value": null,
|
||
"dataType": "textarea",
|
||
"required": true,
|
||
"order": 2,
|
||
"isActive": true,
|
||
"validation": {
|
||
"minLength": 10,
|
||
"maxLength": 2000
|
||
}
|
||
}
|
||
],
|
||
"metadata": {
|
||
"icon": "clipboard-check",
|
||
"color": "#8B5CF6",
|
||
"requiresExpertRole": true
|
||
}
|
||
}
|
||
},
|
||
|
||
expertCostEvaluation: {
|
||
summary: 'Claim Step 8: EXPERT_COST_EVALUATION',
|
||
value: {
|
||
"stepKey": "EXPERT_COST_EVALUATION",
|
||
"type": "CLAIM",
|
||
"stepNumber": 8,
|
||
"isActive": true,
|
||
"stepName_fa": "برآورد هزینه توسط کارشناس",
|
||
"stepName_en": "Expert Cost Evaluation",
|
||
"description_fa": "محاسبه و برآورد هزینه تعمیرات توسط کارشناس",
|
||
"description_en": "Repair cost calculation and estimation by expert",
|
||
"category": "EXPERT",
|
||
"requiredPreviousSteps": ["EXPERT_DAMAGE_ASSESSMENT"],
|
||
"nextPossibleSteps": ["INSURER_REVIEW"],
|
||
"allowedRoles": ["damage_expert", "admin"],
|
||
"estimatedDuration": 20,
|
||
"fields": [
|
||
{
|
||
"id": "67fa10c259e15f231a2d1007",
|
||
"name_fa": "هزینه کل برآورد شده",
|
||
"name_en": "estimatedTotalCost",
|
||
"label_fa": "هزینه کل برآورد شده (ریال)",
|
||
"label_en": "Estimated Total Cost (Rials)",
|
||
"placeholder_fa": "مبلغ را وارد کنید",
|
||
"placeholder_en": "Enter amount",
|
||
"value": null,
|
||
"dataType": "number",
|
||
"required": true,
|
||
"order": 1,
|
||
"isActive": true,
|
||
"validation": {
|
||
"min": 0,
|
||
"max": 999999999999
|
||
}
|
||
},
|
||
{
|
||
"id": "67fa10c259e15f231a2d1008",
|
||
"name_fa": "جزئیات هزینه",
|
||
"name_en": "costBreakdown",
|
||
"label_fa": "جزئیات هزینه",
|
||
"label_en": "Cost Breakdown",
|
||
"placeholder_fa": "جزئیات هزینه را وارد کنید",
|
||
"placeholder_en": "Enter cost breakdown",
|
||
"value": null,
|
||
"dataType": "textarea",
|
||
"required": true,
|
||
"order": 2,
|
||
"isActive": true,
|
||
"validation": {
|
||
"minLength": 20,
|
||
"maxLength": 5000
|
||
}
|
||
}
|
||
],
|
||
"metadata": {
|
||
"icon": "dollar-sign",
|
||
"color": "#F59E0B",
|
||
"requiresExpertRole": true,
|
||
"requiresCostCalculation": true
|
||
}
|
||
}
|
||
},
|
||
|
||
insurerReview: {
|
||
summary: 'Claim Step 9: INSURER_REVIEW',
|
||
value: {
|
||
"stepKey": "INSURER_REVIEW",
|
||
"type": "CLAIM",
|
||
"stepNumber": 9,
|
||
"isActive": true,
|
||
"stepName_fa": "بررسی بیمهگر",
|
||
"stepName_en": "Insurer Review",
|
||
"description_fa": "بررسی نهایی و تایید یا رد خسارت توسط بیمهگر",
|
||
"description_en": "Final review and approval/rejection by insurer",
|
||
"category": "INSURER",
|
||
"requiredPreviousSteps": ["EXPERT_COST_EVALUATION"],
|
||
"nextPossibleSteps": ["CLAIM_COMPLETED"],
|
||
"allowedRoles": ["insurer", "admin"],
|
||
"estimatedDuration": 60,
|
||
"fields": [
|
||
{
|
||
"id": "67fa10c259e15f231a2d1009",
|
||
"name_fa": "تصمیم بیمهگر",
|
||
"name_en": "insurerDecision",
|
||
"label_fa": "تصمیم بیمهگر",
|
||
"label_en": "Insurer Decision",
|
||
"placeholder_fa": "تصمیم خود را انتخاب کنید",
|
||
"placeholder_en": "Select your decision",
|
||
"value": [
|
||
{ "label_fa": "تایید", "label_en": "Approved", "value": "approved" },
|
||
{ "label_fa": "رد", "label_en": "Rejected", "value": "rejected" }
|
||
],
|
||
"dataType": "select",
|
||
"required": true,
|
||
"order": 1,
|
||
"isActive": true,
|
||
"validation": {
|
||
"enum": ["approved", "rejected"]
|
||
}
|
||
},
|
||
{
|
||
"id": "67fa10c259e15f231a2d1010",
|
||
"name_fa": "توضیحات بیمهگر",
|
||
"name_en": "insurerNotes",
|
||
"label_fa": "توضیحات بیمهگر",
|
||
"label_en": "Insurer Notes",
|
||
"placeholder_fa": "توضیحات خود را وارد کنید",
|
||
"placeholder_en": "Enter your notes",
|
||
"value": null,
|
||
"dataType": "textarea",
|
||
"required": true,
|
||
"order": 2,
|
||
"isActive": true,
|
||
"validation": {
|
||
"minLength": 10,
|
||
"maxLength": 2000
|
||
}
|
||
}
|
||
],
|
||
"metadata": {
|
||
"icon": "shield-check",
|
||
"color": "#6366F1",
|
||
"requiresInsurerRole": true,
|
||
"isFinalStep": false
|
||
}
|
||
}
|
||
},
|
||
|
||
claimCompleted: {
|
||
summary: 'Claim Step 10: CLAIM_COMPLETED',
|
||
value: {
|
||
"stepKey": "CLAIM_COMPLETED",
|
||
"type": "CLAIM",
|
||
"stepNumber": 10,
|
||
"isActive": true,
|
||
"stepName_fa": "تکمیل خسارت",
|
||
"stepName_en": "Claim Completed",
|
||
"description_fa": "خسارت به طور کامل بررسی و نتیجهگیری شده است",
|
||
"description_en": "Claim has been fully reviewed and concluded",
|
||
"category": "FINAL",
|
||
"requiredPreviousSteps": ["INSURER_REVIEW"],
|
||
"nextPossibleSteps": [],
|
||
"allowedRoles": ["user", "damage_expert", "insurer", "admin"],
|
||
"estimatedDuration": 0,
|
||
"fields": [],
|
||
"metadata": {
|
||
"icon": "check-circle",
|
||
"color": "#10B981",
|
||
"readOnly": true,
|
||
"isSystemStep": true,
|
||
"isFinalStep": true
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Blame V2 expert resend: same `stepKey`s as the initial THIRD_PARTY blame flow
|
||
* (`FIRST_VOICE` → `FIRST_DESCRIPTION` → `SECOND_VOICE` → `SECOND_DESCRIPTION`).
|
||
* Seed workflow steps once via POST bodies below (or reuse existing rows). Resend only stores
|
||
* ordered keys on `blameCase.expert.resend` — clients resolve full field defs from `workflowSteps`.
|
||
*/
|
||
export const blameResendWorkflowStepExamples = {
|
||
firstVoice: createWorkflowStepExamples.example6,
|
||
firstDescription: createWorkflowStepExamples.example7,
|
||
secondVoice: createWorkflowStepExamples.example11,
|
||
secondDescription: createWorkflowStepExamples.example12,
|
||
stepKeysInOrder: [
|
||
'FIRST_VOICE',
|
||
'FIRST_DESCRIPTION',
|
||
'SECOND_VOICE',
|
||
'SECOND_DESCRIPTION',
|
||
] as const,
|
||
note:
|
||
'Override per party with PartyResendRequestDto.requiredWorkflowStepKeys or ResendItemType.VOICE + DESCRIPTION when calling expert resend V2.',
|
||
} as const;
|