# پیاده‌سازی کارمزد در بخش دریافت و پرداخت ## تغییرات اعمال شده ### 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 ریال ✅