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

166 lines
6.8 KiB
Markdown
Executable file
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

# سناریوی حذف کامل `inventory_transfer`
## سوال اصلی
آیا می‌توان `inventory_transfer` را به عنوان `document_type` کاملاً حذف کرد؟
## وضعیت فعلی
### استفاده از `inventory_transfer`:
1. **در `warehouse_service.py`**:
- وقتی یک Warehouse Document با `doc_type='transfer'` پست می‌شود
- یک سند حسابداری با `document_type='inventory_transfer'` ایجاد می‌شود
- این سند در کاردکس و محاسبات موجودی استفاده می‌شود
2. **در `kardex_service.py`**:
- mapping برای نمایش نام: `"inventory_transfer": "انتقال موجودی"`
3. **در `document_repository.py`**:
- mapping برای نمایش نام: `"inventory_transfer": "انتقال موجودی"`
4. **در `kardex_page.dart`**:
- فیلتر برای نمایش در کاردکس: `FilterOption(value: 'inventory_transfer', label: t.warehouseTransfers)`
5. **در `document_model.dart`**:
- case برای نمایش نام سند
## گزینه‌های حذف
### گزینه 1: استفاده از `document_type` دیگر
**استفاده از `manual` یا `warehouse_transfer`:**
**مزایا:**
- حذف کامل `inventory_transfer`
- استفاده از `document_type` موجود یا جدید
**معایب:**
- نیاز به تغییر در تمام mapping‌ها
- نیاز به migration داده‌های موجود
- ممکن است با سایر اسناد manual تداخل داشته باشد
**تغییرات لازم:**
1. تغییر `warehouse_service.py`: استفاده از `document_type='warehouse_transfer'` یا `'manual'`
2. تغییر mapping‌ها در `kardex_service.py` و `document_repository.py`
3. تغییر فیلتر در `kardex_page.dart`
4. تغییر `document_model.dart`
5. Migration داده‌های موجود از `inventory_transfer` به `warehouse_transfer`
### گزینه 2: عدم ایجاد سند حسابداری برای انتقال موجودی
**فلسفه:**
- انتقال موجودی بین انبارها یک عملیات فیزیکی است
- نیازی به ثبت در حسابداری ندارد (چون مبلغی ندارد)
- فقط در موجودی فیزیکی انبار ثبت می‌شود
**مزایا:**
- حذف کامل `inventory_transfer`
- ساده‌تر شدن سیستم
- تفکیک کامل بین حسابداری و انبارداری
**معایب:**
- انتقال موجودی در کاردکس نمایش داده نمی‌شود
- محاسبات موجودی حسابداری شامل انتقال‌ها نمی‌شود
- ممکن است برای گزارش‌گیری مشکل ایجاد کند
**تغییرات لازم:**
1. حذف ایجاد سند حسابداری از `post_warehouse_document`
2. حذف `inventory_transfer` از تمام mapping‌ها
3. حذف فیلتر از `kardex_page.dart`
4. حذف case از `document_model.dart`
### گزینه 3: استفاده از `document_type` جدید: `warehouse_transfer`
**مزایا:**
- نام واضح‌تر و متمایز
- حذف `inventory_transfer`
- عدم تداخل با سایر `document_type`ها
**معایب:**
- نیاز به تغییر در تمام mapping‌ها
- نیاز به migration داده‌های موجود
**تغییرات لازم:**
1. تغییر `warehouse_service.py`: استفاده از `document_type='warehouse_transfer'`
2. تغییر mapping‌ها در `kardex_service.py` و `document_repository.py`
3. تغییر فیلتر در `kardex_page.dart`
4. تغییر `document_model.dart`
5. Migration داده‌های موجود
## توصیه
**گزینه 3 (استفاده از `warehouse_transfer`) پیشنهاد می‌شود:**
1. **نام واضح‌تر**: `warehouse_transfer` بهتر از `inventory_transfer` است
2. **تفکیک بهتر**: نشان می‌دهد که این سند از Warehouse Document ایجاد شده
3. **عدم تداخل**: با سایر `document_type`ها تداخل ندارد
4. **سازگاری**: همچنان در کاردکس و محاسبات موجودی استفاده می‌شود
## فایل‌های نیاز به تغییر
### Backend
1. **`hesabixAPI/app/services/warehouse_service.py`**:
- تغییر `document_type="inventory_transfer"` به `document_type="warehouse_transfer"`
- تغییر prefix کد سند از `"ITR"` به `"WHT"` (اختیاری)
2. **`hesabixAPI/app/services/kardex_service.py`**:
- حذف `"inventory_transfer": "انتقال موجودی"`
- اضافه کردن `"warehouse_transfer": "انتقال موجودی"`
3. **`hesabixAPI/adapters/db/repositories/document_repository.py`**:
- حذف `"inventory_transfer": "انتقال موجودی"`
- اضافه کردن `"warehouse_transfer": "انتقال موجودی"`
### Frontend
4. **`hesabixUI/hesabix_ui/lib/pages/business/kardex_page.dart`**:
- تغییر `FilterOption(value: 'inventory_transfer', ...)` به `FilterOption(value: 'warehouse_transfer', ...)`
5. **`hesabixUI/hesabix_ui/lib/models/document_model.dart`**:
- تغییر `case 'inventory_transfer':` به `case 'warehouse_transfer':`
### Migration
6. **Migration Script**:
- تبدیل تمام اسناد با `document_type='inventory_transfer'` به `document_type='warehouse_transfer'`
## سناریوی جایگزین: حذف کامل (گزینه 2)
اگر تصمیم بگیرید که انتقال موجودی نیازی به ثبت در حسابداری ندارد:
### تغییرات:
1. **`hesabixAPI/app/services/warehouse_service.py`**:
- حذف کامل بخش ایجاد سند حسابداری از `post_warehouse_document`
- فقط تغییر وضعیت Warehouse Document به `posted`
2. **حذف از mapping‌ها**:
- `kardex_service.py`
- `document_repository.py`
3. **حذف از Frontend**:
- `kardex_page.dart` (فیلتر)
- `document_model.dart` (case)
### نتیجه:
- انتقال موجودی فقط در `warehouse_documents` ثبت می‌شود
- در کاردکس و محاسبات موجودی حسابداری نمایش داده نمی‌شود
- تفکیک کامل بین حسابداری و انبارداری
## سوالات برای تصمیم‌گیری
1. **آیا انتقال موجودی باید در کاردکس نمایش داده شود؟**
- اگر بله → گزینه 3 (استفاده از `warehouse_transfer`)
- اگر خیر → گزینه 2 (عدم ایجاد سند حسابداری)
2. **آیا محاسبات موجودی حسابداری باید شامل انتقال‌ها باشد؟**
- اگر بله → گزینه 3
- اگر خیر → گزینه 2
3. **آیا داده‌های موجود از `inventory_transfer` دارید؟**
- اگر بله → نیاز به migration
- اگر خیر → می‌توانید مستقیماً تغییر دهید