hesabixArc/docs/COMMISSION_IMPLEMENTATION.md
2025-10-15 21:21:11 +03:30

80 lines
3 KiB
Markdown

# پیاده‌سازی کارمزد در بخش دریافت و پرداخت
## تغییرات اعمال شده
### 1. سرویس دریافت و پرداخت (`receipt_payment_service.py`)
#### تغییرات اصلی:
- **محاسبه مجموع کارمزدها**: مجموع کارمزدهای همه تراکنش‌ها محاسبه می‌شود
- **ایجاد خطوط کارمزد جداگانه**: برای هر کارمزد، دو خط جداگانه ایجاد می‌شود:
- خط کارمزد برای حساب (بانک/صندوق/تنخواهگردان)
- خط کارمزد برای حساب کارمزد خدمات بانکی (کد 70902)
#### منطق کارمزد:
**در دریافت (Receipt):**
- کارمزد از حساب بانک/صندوق/تنخواهگردان کم می‌شود (Credit)
- کارمزد به حساب کارمزد خدمات بانکی اضافه می‌شود (Debit)
**در پرداخت (Payment):**
- کارمزد به حساب بانک/صندوق/تنخواهگردان اضافه می‌شود (Debit)
- کارمزد از حساب کارمزد خدمات بانکی کم می‌شود (Credit)
#### کدهای حساب:
- بانک: `10203`
- صندوق: `10202`
- تنخواهگردان: `10201`
- چک دریافتی: `10403`
- چک پرداختی: `20202`
- **کارمزد خدمات بانکی: `70902`**
### 2. نمایش خطوط کارمزد
در تابع `document_to_dict`:
- خطوط کارمزد با فلگ `is_commission_line: true` تشخیص داده می‌شوند
- خطوط کارمزد همیشه در `account_lines` نمایش داده می‌شوند
## نحوه استفاده
### فرانت‌اند:
```dart
// در InvoiceTransaction
final transaction = InvoiceTransaction(
// ... سایر فیلدها
commission: 5000, // کارمزد به ریال
);
```
### API:
```json
{
"account_lines": [
{
"transaction_type": "bank",
"amount": 1000000,
"commission": 5000,
"bank_id": "123"
}
]
}
```
## نتیجه
✅ کارمزد از فرانت به سرور ارسال می‌شود
✅ کارمزد به عنوان سطر جداگانه در `document_lines` ثبت می‌شود
✅ کارمزد برای بانک، صندوق و تنخواهگردان به صورت جداگانه ثبت می‌شود
✅ کارمزد در حساب کارمزد خدمات بانکی (کد 70902) ثبت می‌شود
✅ تعادل حسابداری حفظ می‌شود
## مثال عملی
**دریافت 1,000,000 ریال از شخص با کارمزد 5,000 ریال:**
1. خط اصلی: شخص بستانکار 1,000,000 ریال
2. خط اصلی: بانک بدهکار 1,000,000 ریال
3. خط کارمزد: بانک بستانکار 5,000 ریال (کم شدن کارمزد)
4. خط کارمزد: کارمزد خدمات بانکی بدهکار 5,000 ریال (اضافه شدن کارمزد)
**مجموع:** شخص = 1,000,000 ریال، بانک = 995,000 ریال، کارمزد خدمات بانکی = 5,000 ریال ✅