Watch
1
0
Fork
You've already forked Seyyed_arc
0
forked from hesabix/arc
Seyyed_arc/docs/WORKFLOW_IMPROVEMENTS_PROPOSAL.md
2026-04-14 19:34:55 +03:30

1479 lines
41 KiB
Markdown
Executable file
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# پیشنهادات بهبود سیستم اتوماسیون و Workflow
این سند شامل پیشنهادات جامع برای بهبود عملکرد و افزایش تنظیمات هر نود در سیستم workflow است.
---
## 📋 فهرست محتوا
1. [Triggers (محرک‌ها)](#triggers)
2. [Actions (عمل‌ها)](#actions)
3. [Conditions (شرط‌ها)](#conditions)
4. [Loops (حلقه‌ها)](#loops)
5. [بهبودهای کلی موتور Workflow](#بهبودهای-کلی)
---
## 🔷 Triggers
### 1. DocumentCreatedTrigger (ایجاد سند)
#### پیشنهادات بهبود عملکرد:
- **Caching**: کش کردن metadata نوع سند برای کاهش query به دیتابیس
- **Batch Processing**: پردازش دسته‌ای برای چندین سند ایجاد شده همزمان
- **Validation**: اعتبارسنجی داده‌های سند قبل از trigger
- **Retry Mechanism**: مکانیزم retry برای triggerهای ناموفق
#### تنظیمات پیشنهادی جدید:
```yaml
config_schema:
document_type:
type: "string"
description: "نوع سند (اختیاری)"
required: false
min_amount:
type: "number"
description: "حداقل مبلغ سند"
required: false
max_amount:
type: "number"
description: "حداکثر مبلغ سند"
required: false
fiscal_year_filter:
type: "integer"
description: "فیلتر بر اساس سال مالی خاص"
required: false
user_id_filter:
type: "integer"
description: "فیلتر بر اساس کاربر ایجادکننده"
required: false
description_contains:
type: "string"
description: "فیلتر بر اساس کلمات کلیدی در شرح"
required: false
enabled:
type: "boolean"
description: "فعال/غیرفعال کردن trigger"
default: true
cooldown_seconds:
type: "integer"
description: "مدت زمان انتظار بین triggerهای متوالی (ثانیه)"
default: 0
timeout_seconds:
type: "integer"
description: "حداکثر زمان انتظار برای اجرای workflow (ثانیه)"
default: 300
```
---
### 2. InvoiceCreatedTrigger (ایجاد فاکتور)
#### پیشنهادات بهبود عملکرد:
- **Async Processing**: پردازش ناهمزمان برای فاکتورهای بزرگ
- **Invoice Status Filtering**: فیلتر بر اساس وضعیت فاکتور (پیش‌نویس، تایید شده، لغو شده)
- **Payment Status Tracking**: ردیابی وضعیت پرداخت
- **Tax Calculation**: محاسبه خودکار مالیات و اضافه کردن به trigger data
#### تنظیمات پیشنهادی جدید:
```yaml
config_schema:
invoice_type:
type: "string"
description: "نوع فاکتور (sales/purchase)"
required: false
min_amount:
type: "number"
description: "حداقل مبلغ فاکتور"
required: false
max_amount:
type: "number"
description: "حداکثر مبلغ فاکتور"
required: false
status_filter:
type: "array"
description: "فیلتر بر اساس وضعیت فاکتور (draft/confirmed/cancelled)"
items:
type: "string"
required: false
person_type_filter:
type: "string"
description: "فیلتر بر اساس نوع شخص (customer/supplier)"
required: false
currency_id:
type: "integer"
description: "فیلتر بر اساس ارز"
required: false
include_tax_details:
type: "boolean"
description: "شامل جزئیات مالیات در trigger data"
default: false
include_payment_status:
type: "boolean"
description: "شامل وضعیت پرداخت در trigger data"
default: false
batch_mode:
type: "boolean"
description: "پردازش دسته‌ای برای فاکتورهای متعدد"
default: false
```
---
### 3. ReceiptPaymentCreatedTrigger (ایجاد دریافت/پرداخت)
#### پیشنهادات بهبود عملکرد:
- **Payment Method Filtering**: فیلتر بر اساس روش پرداخت
- **Account Filtering**: فیلتر بر اساس حساب بانکی
- **Balance Tracking**: ردیابی موجودی حساب بعد از تراکنش
- **Duplicate Detection**: تشخیص تراکنش‌های تکراری
#### تنظیمات پیشنهادی جدید:
```yaml
config_schema:
type:
type: "string"
description: "نوع (receipt/payment)"
required: false
min_amount:
type: "number"
description: "حداقل مبلغ"
required: false
max_amount:
type: "number"
description: "حداکثر مبلغ"
required: false
payment_method_filter:
type: "array"
description: "فیلتر بر اساس روش پرداخت"
items:
type: "string"
required: false
account_id_filter:
type: "integer"
description: "فیلتر بر اساس حساب بانکی"
required: false
include_balance:
type: "boolean"
description: "شامل موجودی حساب در trigger data"
default: false
check_duplicate:
type: "boolean"
description: "بررسی تراکنش تکراری"
default: false
duplicate_window_hours:
type: "integer"
description: "بازه زمانی بررسی تکراری (ساعت)"
default: 24
```
---
### 4. CheckDueDateTrigger (سررسید چک)
#### پیشنهادات بهبود عملکرد:
- **Time Zone Support**: پشتیبانی از timezone برای تعیین دقیق سررسید
- **Multiple Reminders**: ارسال چندین یادآوری در بازه‌های زمانی مختلف
- **Check Status Tracking**: ردیابی وضعیت چک (وصول شده، برگشت خورده، و...)
- **Priority Levels**: سطح‌بندی اولویت بر اساس مبلغ
#### تنظیمات پیشنهادی جدید:
```yaml
config_schema:
check_type:
type: "string"
description: "نوع چک (received/paid)"
required: false
days_before:
type: "number"
description: "تعداد روز قبل از سررسید"
required: false
days_after:
type: "number"
description: "تعداد روز بعد از سررسید"
required: false
reminder_schedule:
type: "array"
description: "زمان‌بندی یادآوری‌ها (روزهای قبل از سررسید)"
items:
type: "integer"
required: false
min_amount:
type: "number"
description: "حداقل مبلغ چک"
required: false
status_filter:
type: "array"
description: "فیلتر بر اساس وضعیت چک"
items:
type: "string"
required: false
timezone:
type: "string"
description: "Timezone برای محاسبه سررسید"
default: "Asia/Tehran"
include_grace_period:
type: "boolean"
description: "شامل دوره مهلت (grace period)"
default: false
grace_period_days:
type: "integer"
description: "تعداد روز مهلت"
default: 0
```
---
### 5. InventoryLowTrigger (موجودی کم)
#### پیشنهادات بهبود عملکرد:
- **Multi-warehouse Support**: پشتیبانی از چند انبار
- **Dynamic Thresholds**: آستانه‌های پویا بر اساس تاریخچه فروش
- **Forecasting**: پیش‌بینی زمان اتمام موجودی
- **Category-based Filtering**: فیلتر بر اساس دسته‌بندی محصولات
#### تنظیمات پیشنهادی جدید:
```yaml
config_schema:
product_id:
type: "integer"
description: "شناسه محصول (اختیاری)"
required: false
warehouse_id:
type: "integer"
description: "شناسه انبار (اختیاری)"
required: false
threshold_type:
type: "string"
description: "نوع آستانه (fixed/percentage/dynamic)"
enum: ["fixed", "percentage", "dynamic"]
default: "fixed"
threshold_value:
type: "number"
description: "مقدار آستانه"
required: false
threshold_percentage:
type: "number"
description: "درصد آستانه (برای threshold_type=percentage)"
required: false
category_id:
type: "integer"
description: "فیلتر بر اساس دسته‌بندی"
required: false
include_forecast:
type: "boolean"
description: "شامل پیش‌بینی زمان اتمام"
default: false
forecast_days:
type: "integer"
description: "تعداد روز برای پیش‌بینی"
default: 30
check_frequency:
type: "string"
description: "فرکانس بررسی (realtime/hourly/daily)"
enum: ["realtime", "hourly", "daily"]
default: "realtime"
```
---
### 6. PersonCreatedTrigger (ایجاد شخص)
#### پیشنهادات بهبود عملکرد:
- **Person Type Validation**: اعتبارسنجی نوع شخص
- **Duplicate Person Detection**: تشخیص شخص تکراری
- **Data Enrichment**: غنی‌سازی داده‌ها با اطلاعات اضافی
- **Welcome Message**: ارسال پیام خوش‌آمدگویی
#### تنظیمات پیشنهادی جدید:
```yaml
config_schema:
person_type:
type: "string"
description: "نوع شخص (customer/supplier/etc)"
required: false
person_types:
type: "array"
description: "چند نوع شخص"
items:
type: "string"
required: false
check_duplicate:
type: "boolean"
description: "بررسی شخص تکراری"
default: false
duplicate_fields:
type: "array"
description: "فیلدهای بررسی تکراری (mobile/email/national_id)"
items:
type: "string"
required: false
include_credit_limit:
type: "boolean"
description: "شامل اعتبار در trigger data"
default: false
auto_assign_group:
type: "boolean"
description: "اختصاص خودکار به گروه"
default: false
send_welcome_message:
type: "boolean"
description: "ارسال پیام خوش‌آمدگویی"
default: false
```
---
### 7. ScheduledTrigger (زمان‌بندی شده)
#### پیشنهادات بهبود عملکرد:
- **Time Zone Support**: پشتیبانی کامل از timezone
- **Holiday Calendar**: تقویم تعطیلات
- **Business Hours Only**: اجرا فقط در ساعات کاری
- **Retry on Failure**: تلاش مجدد در صورت خطا
#### تنظیمات پیشنهادی جدید:
```yaml
config_schema:
schedule:
type: "string"
description: "زمان‌بندی cron"
required: true
timezone:
type: "string"
description: "Timezone"
default: "Asia/Tehran"
business_hours_only:
type: "boolean"
description: "اجرا فقط در ساعات کاری"
default: false
business_hours_start:
type: "string"
description: "شروع ساعت کاری (HH:mm)"
default: "09:00"
business_hours_end:
type: "string"
description: "پایان ساعت کاری (HH:mm)"
default: "17:00"
exclude_holidays:
type: "boolean"
description: "حذف تعطیلات"
default: false
holiday_calendar_id:
type: "integer"
description: "شناسه تقویم تعطیلات"
required: false
max_execution_time:
type: "integer"
description: "حداکثر زمان اجرا (ثانیه)"
default: 300
retry_on_failure:
type: "boolean"
description: "تلاش مجدد در صورت خطا"
default: false
retry_attempts:
type: "integer"
description: "تعداد تلاش‌های مجدد"
default: 3
retry_delay_seconds:
type: "integer"
description: "تاخیر بین تلاش‌ها (ثانیه)"
default: 60
```
---
### 8. WebhookTrigger (Webhook)
#### پیشنهادات بهبود عملکرد:
- **Authentication**: مکانیزم‌های احراز هویت (API Key, OAuth, Signature)
- **Rate Limiting**: محدود کردن تعداد درخواست
- **Payload Validation**: اعتبارسنجی payload
- **Response Customization**: سفارشی‌سازی پاسخ
#### تنظیمات پیشنهادی جدید:
```yaml
config_schema:
webhook_path:
type: "string"
description: "مسیر webhook"
required: false
method:
type: "string"
description: "روش HTTP"
default: "POST"
required: false
authentication_type:
type: "string"
description: "نوع احراز هویت (none/api_key/bearer/signature)"
enum: ["none", "api_key", "bearer", "signature"]
default: "none"
api_key:
type: "string"
description: "کلید API"
required: false
api_key_header:
type: "string"
description: "نام header برای API key"
default: "X-API-Key"
bearer_token:
type: "string"
description: "توکن Bearer"
required: false
signature_secret:
type: "string"
description: "رمز امضا"
required: false
signature_header:
type: "string"
description: "نام header برای امضا"
default: "X-Signature"
rate_limit:
type: "integer"
description: "حداکثر درخواست در دقیقه"
required: false
validate_payload:
type: "boolean"
description: "اعتبارسنجی payload"
default: false
payload_schema:
type: "object"
description: "Schema برای اعتبارسنجی (JSON Schema)"
required: false
custom_response:
type: "boolean"
description: "استفاده از پاسخ سفارشی"
default: false
response_status_code:
type: "integer"
description: "کد وضعیت پاسخ"
default: 200
response_body:
type: "string"
description: "بدنه پاسخ"
required: false
timeout_seconds:
type: "integer"
description: "Timeout برای پردازش (ثانیه)"
default: 30
```
---
## 🔷 Actions
### 1. SendEmailAction (ارسال ایمیل)
#### پیشنهادات بهبود عملکرد:
- **Template Engine**: موتور قالب برای ایمیل‌ها
- **Attachment Support**: پشتیبانی از پیوست
- **Priority Levels**: سطح اولویت ایمیل
- **Delivery Tracking**: ردیابی تحویل
- **Retry Mechanism**: تلاش مجدد در صورت خطا
#### تنظیمات پیشنهادی جدید:
```yaml
config_schema:
to:
type: "string"
description: "آدرس ایمیل گیرنده"
required: true
cc:
type: "array"
description: "CC"
items:
type: "string"
required: false
bcc:
type: "array"
description: "BCC"
items:
type: "string"
required: false
subject:
type: "string"
description: "موضوع"
required: true
body:
type: "string"
description: "متن ایمیل"
required: true
html_body:
type: "string"
description: "متن HTML"
required: false
template_id:
type: "integer"
description: "شناسه قالب ایمیل"
required: false
template_variables:
type: "object"
description: "متغیرهای قالب"
required: false
attachments:
type: "array"
description: "پیوست‌ها"
items:
type: "object"
properties:
filename:
type: "string"
content:
type: "string"
content_type:
type: "string"
required: false
priority:
type: "string"
description: "اولویت (low/normal/high)"
enum: ["low", "normal", "high"]
default: "normal"
send_at:
type: "string"
description: "ارسال در زمان مشخص (ISO format)"
required: false
track_opens:
type: "boolean"
description: "ردیابی باز شدن ایمیل"
default: false
track_clicks:
type: "boolean"
description: "ردیابی کلیک‌ها"
default: false
retry_on_failure:
type: "boolean"
description: "تلاش مجدد در صورت خطا"
default: true
retry_attempts:
type: "integer"
description: "تعداد تلاش‌های مجدد"
default: 3
retry_delay_seconds:
type: "integer"
description: "تاخیر بین تلاش‌ها"
default: 60
```
---
### 2. SendTelegramAction (ارسال تلگرام)
#### پیشنهادات بهبود عملکرد:
- **Rich Media Support**: پشتیبانی از تصویر، ویدیو، فایل
- **Keyboard Buttons**: دکمه‌های کیبورد
- **Inline Buttons**: دکمه‌های inline
- **Parse Mode**: حالت‌های مختلف پارس (HTML, Markdown)
- **Message Scheduling**: زمان‌بندی پیام
#### تنظیمات پیشنهادی جدید:
```yaml
config_schema:
user_id:
type: "integer"
description: "شناسه کاربر"
required: false
chat_id:
type: "string"
description: "شناسه چت (جایگزین user_id)"
required: false
message:
type: "string"
description: "متن پیام"
required: true
parse_mode:
type: "string"
description: "حالت پارس (HTML/Markdown/None)"
enum: ["HTML", "Markdown", "None"]
default: "None"
disable_web_page_preview:
type: "boolean"
description: "غیرفعال کردن پیش‌نمایش لینک"
default: false
disable_notification:
type: "boolean"
description: "ارسال بی‌صدا"
default: false
photo:
type: "string"
description: "URL یا path تصویر"
required: false
document:
type: "string"
description: "URL یا path فایل"
required: false
keyboard:
type: "array"
description: "کیبورد (دکمه‌ها)"
items:
type: "object"
required: false
inline_keyboard:
type: "array"
description: "کیبورد inline"
items:
type: "object"
required: false
reply_to_message_id:
type: "integer"
description: "پاسخ به پیام خاص"
required: false
send_at:
type: "string"
description: "ارسال در زمان مشخص"
required: false
```
---
### 3. CreateNotificationAction (ایجاد Notification)
#### پیشنهادات بهبود عملکرد:
- **Multiple Channels**: ارسال به چند کانال (in-app, email, SMS, Push)
- **Priority Levels**: سطح اولویت
- **Expiration**: تاریخ انقضا
- **Action Buttons**: دکمه‌های عملیاتی
- **Rich Content**: محتوای غنی (HTML, images)
#### تنظیمات پیشنهادی جدید:
```yaml
config_schema:
user_id:
type: "integer"
description: "شناسه کاربر"
required: false
event_key:
type: "string"
description: "کلید رویداد"
required: true
title:
type: "string"
description: "عنوان"
required: true
message:
type: "string"
description: "پیام"
required: true
channels:
type: "array"
description: "کانال‌های ارسال"
items:
type: "string"
enum: ["inapp", "email", "sms", "push"]
default: ["inapp"]
priority:
type: "string"
description: "اولویت (low/normal/high/urgent)"
enum: ["low", "normal", "high", "urgent"]
default: "normal"
category:
type: "string"
description: "دسته‌بندی"
required: false
icon:
type: "string"
description: "آیکون"
required: false
image_url:
type: "string"
description: "URL تصویر"
required: false
action_buttons:
type: "array"
description: "دکمه‌های عملیاتی"
items:
type: "object"
properties:
label:
type: "string"
action:
type: "string"
url:
type: "string"
required: false
expires_at:
type: "string"
description: "تاریخ انقضا (ISO format)"
required: false
read_after_action:
type: "boolean"
description: "خوانده شده تلقی کردن بعد از کلیک روی دکمه"
default: true
```
---
### 4. CreateDocumentAction (ایجاد سند)
#### پیشنهادات بهبود عملکرد:
- **Template Support**: پشتیبانی از قالب‌های سند
- **Auto Numbering**: شماره‌گذاری خودکار
- **Validation**: اعتبارسنجی قبل از ایجاد
- **Draft Mode**: حالت پیش‌نویس
- **Approval Workflow**: گردش کار تایید
#### تنظیمات پیشنهادی جدید:
```yaml
config_schema:
document_type:
type: "string"
description: "نوع سند"
required: true
date:
type: "string"
description: "تاریخ سند"
required: true
description:
type: "string"
description: "شرح"
required: false
lines:
type: "array"
description: "خطوط سند"
required: true
template_id:
type: "integer"
description: "شناسه قالب"
required: false
auto_numbering:
type: "boolean"
description: "شماره‌گذاری خودکار"
default: true
numbering_sequence:
type: "string"
description: "سری شماره‌گذاری"
required: false
fiscal_year_id:
type: "integer"
description: "سال مالی (در صورت عدم مشخص، سال جاری استفاده می‌شود)"
required: false
status:
type: "string"
description: "وضعیت (draft/confirmed)"
enum: ["draft", "confirmed"]
default: "draft"
require_approval:
type: "boolean"
description: "نیاز به تایید"
default: false
approver_user_id:
type: "integer"
description: "شناسه کاربر تاییدکننده"
required: false
validate_before_create:
type: "boolean"
description: "اعتبارسنجی قبل از ایجاد"
default: true
on_error:
type: "string"
description: "رفتار در صورت خطا (fail/skip/log)"
enum: ["fail", "skip", "log"]
default: "fail"
```
---
### 5. CreateInvoiceAction (ایجاد فاکتور)
#### پیشنهادات بهبود عملکرد:
- **Discount Support**: پشتیبانی از تخفیف
- **Tax Calculation**: محاسبه خودکار مالیات
- **Payment Terms**: شرایط پرداخت
- **Template System**: سیستم قالب
- **Auto Posting**: ثبت خودکار در دفاتر
#### تنظیمات پیشنهادی جدید:
```yaml
config_schema:
invoice_type:
type: "string"
description: "نوع فاکتور"
required: true
person_id:
type: "integer"
description: "شناسه شخص"
required: true
items:
type: "array"
description: "آیتم‌های فاکتور"
required: true
currency_id:
type: "integer"
description: "شناسه ارز"
required: false
date:
type: "string"
description: "تاریخ فاکتور (ISO format)"
required: false
due_date:
type: "string"
description: "تاریخ سررسید"
required: false
payment_terms:
type: "string"
description: "شرایط پرداخت"
required: false
discount_type:
type: "string"
description: "نوع تخفیف (percentage/amount)"
enum: ["percentage", "amount"]
required: false
discount_value:
type: "number"
description: "مقدار تخفیف"
required: false
auto_calculate_tax:
type: "boolean"
description: "محاسبه خودکار مالیات"
default: true
tax_rate:
type: "number"
description: "نرخ مالیات (در صورت عدم خودکار)"
required: false
template_id:
type: "integer"
description: "شناسه قالب"
required: false
status:
type: "string"
description: "وضعیت (draft/confirmed)"
enum: ["draft", "confirmed"]
default: "draft"
auto_post:
type: "boolean"
description: "ثبت خودکار در دفاتر"
default: false
reference_number:
type: "string"
description: "شماره مرجع"
required: false
notes:
type: "string"
description: "یادداشت‌ها"
required: false
```
---
### 6. UpdateInventoryAction (به‌روزرسانی موجودی)
#### پیشنهادات بهبود عملکرد:
- **Batch Updates**: به‌روزرسانی دسته‌ای
- **Transaction Logging**: ثبت لاگ تراکنش
- **Cost Calculation**: محاسبه هزینه
- **Lot/Serial Tracking**: ردیابی سریال/لوت
- **Reservation Support**: پشتیبانی از رزرو
#### تنظیمات پیشنهادی جدید:
```yaml
config_schema:
product_id:
type: "integer"
description: "شناسه محصول"
required: true
warehouse_id:
type: "integer"
description: "شناسه انبار"
required: true
quantity:
type: "number"
description: "تغییر مقدار"
required: true
adjustment_type:
type: "string"
description: "نوع تنظیم (increase/decrease/set)"
enum: ["increase", "decrease", "set"]
default: "increase"
reason:
type: "string"
description: "دلیل تنظیم"
required: false
reference_document_id:
type: "integer"
description: "شناسه سند مرجع"
required: false
reference_document_type:
type: "string"
description: "نوع سند مرجع"
required: false
cost_per_unit:
type: "number"
description: "هزینه هر واحد"
required: false
lot_number:
type: "string"
description: "شماره لوت"
required: false
serial_numbers:
type: "array"
description: "شماره‌های سریال"
items:
type: "string"
required: false
reservation_id:
type: "integer"
description: "شناسه رزرو (برای آزاد کردن رزرو)"
required: false
validate_stock:
type: "boolean"
description: "اعتبارسنجی موجودی قبل از کاهش"
default: true
allow_negative:
type: "boolean"
description: "اجازه موجودی منفی"
default: false
auto_post:
type: "boolean"
description: "ثبت خودکار"
default: true
```
---
### 7. SetVariableAction (تنظیم متغیر)
#### پیشنهادات بهبود عملکرد:
- **Type Casting**: تبدیل نوع خودکار
- **Computed Values**: مقادیر محاسبه‌شده
- **Scoping**: محدوده متغیر (workflow/global)
- **Encryption**: رمزنگاری برای داده‌های حساس
#### تنظیمات پیشنهادی جدید:
```yaml
config_schema:
variable_name:
type: "string"
description: "نام متغیر"
required: true
value:
type: "any"
description: "مقدار متغیر"
required: true
value_type:
type: "string"
description: "نوع مقدار (auto/string/number/boolean/object/array)"
enum: ["auto", "string", "number", "boolean", "object", "array"]
default: "auto"
scope:
type: "string"
description: "محدوده (workflow/global)"
enum: ["workflow", "global"]
default: "workflow"
encrypt:
type: "boolean"
description: "رمزنگاری مقدار"
default: false
expiration_seconds:
type: "integer"
description: "زمان انقضا (ثانیه)"
required: false
computed:
type: "boolean"
description: "مقدار محاسبه‌شده"
default: false
expression:
type: "string"
description: "عبارت محاسبه (برای computed=true)"
required: false
default_value:
type: "any"
description: "مقدار پیش‌فرض در صورت خطا"
required: false
```
---
### 8. LogAction (ثبت لاگ)
#### پیشنهادات بهبود عملکرد:
- **Structured Logging**: لاگ ساختاریافته (JSON)
- **Log Aggregation**: تجمیع لاگ‌ها
- **Log Rotation**: چرخش لاگ‌ها
- **Alert Integration**: یکپارچه‌سازی با سیستم هشدار
#### تنظیمات پیشنهادی جدید:
```yaml
config_schema:
level:
type: "string"
description: "سطح لاگ"
enum: ["debug", "info", "warning", "error", "critical"]
default: "info"
message:
type: "string"
description: "پیام لاگ"
required: true
data:
type: "object"
description: "داده‌های اضافی"
required: false
structured:
type: "boolean"
description: "لاگ ساختاریافته (JSON)"
default: false
include_context:
type: "boolean"
description: "شامل context workflow"
default: true
include_node_results:
type: "boolean"
description: "شامل نتایج nodeها"
default: false
tags:
type: "array"
description: "برچسب‌ها"
items:
type: "string"
required: false
send_alert:
type: "boolean"
description: "ارسال هشدار برای سطح error/critical"
default: false
alert_channels:
type: "array"
description: "کانال‌های هشدار"
items:
type: "string"
required: false
retention_days:
type: "integer"
description: "مدت نگهداری لاگ (روز)"
default: 30
```
---
### 9. HttpRequestAction (ارسال HTTP Request)
#### پیشنهادات بهبود عملکرد:
- **Advanced Auth**: احراز هویت پیشرفته (OAuth, JWT)
- **Request/Response Transformation**: تبدیل درخواست/پاسخ
- **Circuit Breaker**: قطع کننده مدار برای جلوگیری از overload
- **Retry with Exponential Backoff**: تلاش مجدد با تاخیر نمایی
- **Response Caching**: کش کردن پاسخ‌ها
#### تنظیمات پیشنهادی جدید:
```yaml
config_schema:
url:
type: "string"
description: "URL مقصد"
required: true
method:
type: "string"
description: "روش HTTP"
enum: ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"]
default: "POST"
headers:
type: "object"
description: "هدرهای HTTP"
required: false
query_params:
type: "object"
description: "پارامترهای query string"
required: false
body:
type: "any"
description: "بدنه درخواست"
required: false
body_type:
type: "string"
description: "نوع بدنه (json/form/raw)"
enum: ["json", "form", "raw"]
default: "json"
auth_type:
type: "string"
description: "نوع احراز هویت (none/basic/bearer/oauth/jwt)"
enum: ["none", "basic", "bearer", "oauth", "jwt"]
default: "none"
auth_config:
type: "object"
description: "تنظیمات احراز هویت"
required: false
timeout_seconds:
type: "integer"
description: "Timeout (ثانیه)"
default: 30
retry_on_failure:
type: "boolean"
description: "تلاش مجدد در صورت خطا"
default: true
retry_attempts:
type: "integer"
description: "تعداد تلاش‌های مجدد"
default: 3
retry_delay_seconds:
type: "integer"
description: "تاخیر پایه (ثانیه)"
default: 1
exponential_backoff:
type: "boolean"
description: "استفاده از تاخیر نمایی"
default: true
retryable_status_codes:
type: "array"
description: "کدهای وضعیت قابل retry"
items:
type: "integer"
default: [500, 502, 503, 504]
circuit_breaker_enabled:
type: "boolean"
description: "فعال کردن circuit breaker"
default: false
circuit_breaker_threshold:
type: "integer"
description: "آستانه خطا برای باز کردن مدار"
default: 5
cache_response:
type: "boolean"
description: "کش کردن پاسخ"
default: false
cache_ttl_seconds:
type: "integer"
description: "زمان زندگی کش (ثانیه)"
default: 300
cache_key:
type: "string"
description: "کلید کش (در صورت عدم مشخص، از URL و params استفاده می‌شود)"
required: false
transform_request:
type: "boolean"
description: "تبدیل درخواست"
default: false
request_script:
type: "string"
description: "اسکریپت تبدیل درخواست (JavaScript/Python)"
required: false
transform_response:
type: "boolean"
description: "تبدیل پاسخ"
default: false
response_script:
type: "string"
description: "اسکریپت تبدیل پاسخ"
required: false
validate_response:
type: "boolean"
description: "اعتبارسنجی پاسخ"
default: false
response_schema:
type: "object"
description: "Schema برای اعتبارسنجی (JSON Schema)"
required: false
```
---
## 🔷 Conditions
### پیشنهادات بهبود Condition Node
#### پیشنهادات بهبود عملکرد:
- **Complex Conditions**: پشتیبانی از شرط‌های پیچیده (AND, OR, NOT)
- **Multiple Comparisons**: چندین مقایسه همزمان
- **Array Operations**: عملیات روی آرایه (contains, in, not in)
- **String Operations**: عملیات رشته (starts with, ends with, contains, regex)
- **Date/Time Comparisons**: مقایسه تاریخ/زمان
- **Nested Conditions**: شرط‌های تو در تو
#### تنظیمات پیشنهادی جدید:
```yaml
config_schema:
condition_type:
type: "string"
description: "نوع شرط (simple/complex/expression)"
enum: ["simple", "complex", "expression"]
default: "simple"
# برای condition_type=simple
left_value:
type: "any"
description: "مقدار چپ"
required: false
operator:
type: "string"
description: "عملگر"
enum: ["==", "!=", ">", "<", ">=", "<=", "contains", "not_contains", "starts_with", "ends_with", "in", "not_in", "regex", "is_null", "is_not_null"]
default: "=="
right_value:
type: "any"
description: "مقدار راست"
required: false
# برای condition_type=complex
logical_operator:
type: "string"
description: "عملگر منطقی (AND/OR)"
enum: ["AND", "OR"]
default: "AND"
conditions:
type: "array"
description: "لیست شرط‌ها"
items:
type: "object"
required: false
# برای condition_type=expression
expression:
type: "string"
description: "عبارت شرط (JavaScript/Python)"
required: false
case_sensitive:
type: "boolean"
description: "حساس به حروف بزرگ/کوچک"
default: true
date_format:
type: "string"
description: "فرمت تاریخ برای مقایسه"
default: "ISO"
timezone:
type: "string"
description: "Timezone برای مقایسه تاریخ/زمان"
default: "Asia/Tehran"
on_error:
type: "string"
description: "رفتار در صورت خطا (fail/false/true)"
enum: ["fail", "false", "true"]
default: "fail"
```
---
## 🔷 Loops
### پیشنهادات بهبود Loop Node
**توجه**: حلقه‌ها در حال حاضر پیاده‌سازی نشده‌اند. پیشنهادات برای پیاده‌سازی:
#### پیشنهادات بهبود عملکرد:
- **For Each Loop**: حلقه روی آرایه/لیست
- **For Range Loop**: حلقه روی بازه عددی
- **While Loop**: حلقه شرطی
- **Break/Continue**: کنترل جریان
- **Parallel Execution**: اجرای موازی
- **Batch Processing**: پردازش دسته‌ای
#### تنظیمات پیشنهادی جدید:
```yaml
config_schema:
loop_type:
type: "string"
description: "نوع حلقه (for_each/for_range/while)"
enum: ["for_each", "for_range", "while"]
required: true
# برای loop_type=for_each
items_source:
type: "string"
description: "منبع آیتم‌ها (reference به node یا variable)"
required: false
item_variable:
type: "string"
description: "نام متغیر برای هر آیتم"
default: "item"
index_variable:
type: "string"
description: "نام متغیر برای ایندکس"
default: "index"
# برای loop_type=for_range
start:
type: "integer"
description: "شروع"
required: false
end:
type: "integer"
description: "پایان"
required: false
step:
type: "integer"
description: "گام"
default: 1
# برای loop_type=while
condition:
type: "object"
description: "شرط تداوم حلقه"
required: false
max_iterations:
type: "integer"
description: "حداکثر تعداد تکرار (برای جلوگیری از infinite loop)"
default: 1000
parallel_execution:
type: "boolean"
description: "اجرای موازی"
default: false
max_parallel:
type: "integer"
description: "حداکثر تعداد اجرای موازی"
default: 5
batch_size:
type: "integer"
description: "اندازه دسته برای پردازش دسته‌ای"
required: false
break_on_error:
type: "boolean"
description: "توقف در صورت خطا"
default: false
continue_on_error:
type: "boolean"
description: "ادامه در صورت خطا"
default: false
```
---
## 🔷 بهبودهای کلی موتور Workflow
### 1. Performance Optimizations
#### پیشنهادات:
- **Connection Pooling**: Pool اتصالات دیتابیس
- **Async Execution**: اجرای ناهمزمان برای actionهای مستقل
- **Caching**: کش کردن نتایج nodeها برای استفاده مجدد
- **Lazy Loading**: بارگذاری تنبل برای nodeهای بزرگ
- **Batch Processing**: پردازش دسته‌ای workflowهای متعدد
#### پیاده‌سازی:
```python
# مثال: Caching برای node results
class WorkflowEngine:
def __init__(self, ...):
self.result_cache = {}
self.cache_ttl = 300 # 5 minutes
def _execute_node(self, node, context, node_results):
cache_key = self._get_cache_key(node, context)
if cache_key in self.result_cache:
cached_result, timestamp = self.result_cache[cache_key]
if time.time() - timestamp < self.cache_ttl:
return cached_result
# ... execute node ...
self.result_cache[cache_key] = (result, time.time())
return result
```
---
### 2. Error Handling & Resilience
#### پیشنهادات:
- **Retry Policies**: سیاست‌های retry قابل تنظیم
- **Circuit Breaker**: قطع کننده مدار برای جلوگیری از overload
- **Fallback Actions**: actionهای جایگزین در صورت خطا
- **Error Recovery**: بازیابی از خطا
- **Dead Letter Queue**: صف برای workflowهای ناموفق
#### تنظیمات پیشنهادی:
```yaml
workflow_config:
error_handling:
strategy: "fail_fast" # fail_fast, continue, retry
retry_policy:
max_attempts: 3
initial_delay: 1
max_delay: 60
exponential_backoff: true
circuit_breaker:
enabled: true
failure_threshold: 5
timeout_seconds: 60
fallback_action:
enabled: false
action_type: "log"
action_config: {}
dead_letter_queue:
enabled: true
max_retries: 3
```
---
### 3. Monitoring & Observability
#### پیشنهادات:
- **Metrics Collection**: جمع‌آوری معیارها
- **Performance Tracking**: ردیابی عملکرد
- **Slow Query Detection**: تشخیص queryهای کند
- **Resource Usage Monitoring**: نظارت بر استفاده از منابع
- **Alerting**: سیستم هشدار
#### معیارهای پیشنهادی:
- زمان اجرای هر node
- تعداد اجراهای موفق/ناموفق
- میزان خطا (error rate)
- استفاده از حافظه
- استفاده از CPU
- تعداد workflowهای در حال اجرا
---
### 4. Security Enhancements
#### پیشنهادات:
- **Input Validation**: اعتبارسنجی ورودی‌ها
- **Output Sanitization**: پاکسازی خروجی‌ها
- **Access Control**: کنترل دسترسی بر اساس نقش
- **Audit Logging**: ثبت لاگ audit
- **Encryption**: رمزنگاری داده‌های حساس
- **Rate Limiting**: محدود کردن نرخ
---
### 5. Developer Experience
#### پیشنهادات:
- **Template Library**: کتابخانه قالب‌های workflow
- **Workflow Testing**: تست workflow قبل از اجرا
- **Dry Run Mode**: حالت اجرای آزمایشی
- **Visual Debugging**: دیباگ بصری
- **Step-by-step Execution**: اجرای گام به گام
- **Variable Inspector**: بازرسی متغیرها
---
### 6. Scalability
#### پیشنهادات:
- **Horizontal Scaling**: مقیاس‌پذیری افقی
- **Queue System**: سیستم صف برای workflowهای زیاد
- **Distributed Execution**: اجرای توزیع‌شده
- **Load Balancing**: توزیع بار
- **Resource Isolation**: جداسازی منابع
---
## 📊 خلاصه اولویت‌ها
### اولویت بالا (Quick Wins):
1. اضافه کردن retry mechanism به همه actionها
2. اضافه کردن timeout به همه operationها
3. بهبود error handling
4. اضافه کردن logging بهتر
### اولویت متوسط:
1. اضافه کردن فیلترهای بیشتر به triggerها
2. اضافه کردن template system
3. بهبود condition node با شرط‌های پیچیده
4. اضافه کردن monitoring
### اولویت پایین (Long-term):
1. پیاده‌سازی loop node
2. Distributed execution
3. Advanced caching
4. Circuit breaker
---
## 📝 یادداشت‌های پیاده‌سازی
### نکات مهم:
1. همه تنظیمات جدید باید **backward compatible** باشند
2. باید **default values** مناسب برای همه تنظیمات تعریف شود
3. باید **validation** برای همه تنظیمات اضافه شود
4. باید **documentation** کامل برای هر تنظیمات نوشته شود
5. باید **unit tests** برای همه بهبودها نوشته شود
### مراحل پیاده‌سازی:
1. فاز 1: بهبود triggerها (2-3 هفته)
2. فاز 2: بهبود actionها (3-4 هفته)
3. فاز 3: بهبود condition و loop (2-3 هفته)
4. فاز 4: بهبودهای کلی موتور (2-3 هفته)
---
*این سند به صورت مداوم به‌روزرسانی خواهد شد.*