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

449 lines
16 KiB
Markdown
Executable file

# بررسی ثبت‌های حسابداری فاکتورها
## خلاصه بررسی
این گزارش نتیجه بررسی کامل سیستم ایجاد فاکتورها و ثبت‌های حسابداری مرتبط است. بررسی شامل موارد زیر می‌شود:
- انواع فاکتورها (فروش، خرید، برگشت از فروش، برگشت از خرید، مصرف مستقیم، ضایعات، تولید)
- ثبت مالیات و تخفیف
- ثبت تراکنش‌های پرداخت (بانک، صندوق، تنخواه، چک، شخص)
- تعادل حسابداری اسناد
---
## 1. بررسی انواع فاکتورها
### 1.1 فاکتور فروش (INVOICE_SALES)
**ثبت‌های حسابداری:**
```
Dr. حساب شخص (10401) - مبلغ کل با مالیات
Cr. حساب درآمد (50001) - مبلغ ناخالص (قبل از تخفیف)
Dr. حساب تخفیفات فروش (50003) - مبلغ تخفیف
Cr. حساب مالیات خروجی (20101) - مبلغ مالیات
```
**بررسی:**
- ✅ ثبت‌های حسابداری صحیح است
- ✅ شخص به مبلغ کل با مالیات بدهکار می‌شود
- ✅ درآمد به مبلغ ناخالص (قبل از تخفیف) بستانکار می‌شود
- ✅ تخفیف به صورت جداگانه ثبت می‌شود (بدهکار)
- ✅ مالیات به صورت جداگانه ثبت می‌شود (بستانکار)
**تعادل:**
- بدهکار: شخص (total_with_tax) + تخفیف
- بستانکار: درآمد (gross) + مالیات
- net = gross - discount
- total_with_tax = net + tax
- ✅ تعادل برقرار است: (gross - discount + tax) = total_with_tax
**فروش اقساطی:**
- ✅ اگر طرح اقساط وجود داشته باشد، سود اقساط به دریافتنی اضافه می‌شود
- ✅ سود تحقق‌نیافته در حساب جداگانه ثبت می‌شود
**پورسانت فروشنده:**
- ✅ اگر فروشنده مشخص باشد، هزینه پورسانت ثبت می‌شود
- ✅ حساب پورسانت بدهکار و حساب پرداختنی فروشنده بستانکار می‌شود
---
### 1.2 برگشت از فروش (INVOICE_SALES_RETURN)
**ثبت‌های حسابداری:**
```
Cr. حساب شخص (10401) - مبلغ کل با مالیات
Dr. حساب برگشت از فروش (50002) - مبلغ ناخالص
Cr. حساب تخفیفات فروش (50003) - مبلغ تخفیف (برگشت)
Dr. حساب مالیات خروجی (20101) - مبلغ مالیات (تعدیل)
```
**بررسی:**
- ✅ ثبت‌های حسابداری صحیح است
- ✅ شخص به مبلغ کل با مالیات بستانکار می‌شود (کاهش دریافتنی)
- ✅ برگشت از فروش به مبلغ ناخالص بدهکار می‌شود
- ✅ تخفیف برگشت می‌شود (بستانکار)
- ✅ مالیات تعدیل می‌شود (بدهکار)
**تعادل:**
- بدهکار: برگشت از فروش (gross) + مالیات
- بستانکار: شخص (total_with_tax) + تخفیف
- ✅ تعادل برقرار است
**پورسانت فروشنده:**
- ✅ پورسانت فروشنده تعدیل می‌شود (معکوس)
---
### 1.3 فاکتور خرید (INVOICE_PURCHASE)
**ثبت‌های حسابداری:**
```
Dr. حساب GRNI (30101) - مبلغ ناخالص (قبل از تخفیف)
Cr. حساب تخفیفات خرید (40003) - مبلغ تخفیف
Dr. حساب مالیات ورودی (10104) - مبلغ مالیات
Cr. حساب شخص (20201) - مبلغ کل با مالیات
```
**بررسی:**
- ✅ ثبت‌های حسابداری صحیح است
- ✅ GRNI به مبلغ ناخالص بدهکار می‌شود
- ✅ تخفیف خرید به صورت جداگانه ثبت می‌شود (بستانکار)
- ✅ مالیات ورودی بدهکار می‌شود
- ✅ شخص به مبلغ کل با مالیات بستانکار می‌شود (افزایش پرداختنی)
**تعادل:**
- بدهکار: GRNI (gross) + مالیات
- بستانکار: تخفیف + شخص (total_with_tax)
- ✅ تعادل برقرار است
**نکته مهم:**
- COGS و موجودی در پست حواله انبار ثبت می‌شود (نه در فاکتور)
- این رویکرد صحیح است و از جداسازی نگرانی‌ها (separation of concerns) پیروی می‌کند
---
### 1.4 برگشت از خرید (INVOICE_PURCHASE_RETURN)
**ثبت‌های حسابداری:**
```
Cr. حساب GRNI (30101) - مبلغ ناخالص (برگشت)
Dr. حساب تخفیفات خرید (40003) - مبلغ تخفیف (برگشت)
Cr. حساب مالیات ورودی (10104) - مبلغ مالیات (تعدیل)
Dr. حساب شخص (20201) - مبلغ کل با مالیات
```
**بررسی:**
- ✅ ثبت‌های حسابداری صحیح است
- ✅ GRNI به مبلغ ناخالص بستانکار می‌شود (کاهش GRNI)
- ✅ تخفیف برگشت می‌شود (بدهکار)
- ✅ مالیات ورودی تعدیل می‌شود (بستانکار)
- ✅ شخص به مبلغ کل با مالیات بدهکار می‌شود (کاهش پرداختنی)
**تعادل:**
- بدهکار: تخفیف + شخص (total_with_tax)
- بستانکار: GRNI (gross) + مالیات
- ✅ تعادل برقرار است
---
### 1.5 مصرف مستقیم (INVOICE_DIRECT_CONSUMPTION)
**ثبت‌های حسابداری:**
- ❌ **هیچ ثبت حسابداری در فاکتور ایجاد نمی‌شود**
- ثبت‌های موجودی و COGS فقط در پست حواله انبار انجام می‌شود
**بررسی:**
- ⚠️ **مشکل احتمالی:** اگر حواله انبار پست نشود، هیچ ثبت حسابداری ایجاد نمی‌شود
- این می‌تواند منجر به عدم ثبت هزینه مصرف مستقیم شود
**پیشنهاد:**
- بررسی شود که آیا باید ثبت حسابداری هزینه مصرف مستقیم در فاکتور ایجاد شود یا خیر
---
### 1.6 ضایعات (INVOICE_WASTE)
**ثبت‌های حسابداری:**
- ❌ **هیچ ثبت حسابداری در فاکتور ایجاد نمی‌شود**
- ثبت‌های موجودی و هزینه ضایعات فقط در پست حواله انبار انجام می‌شود
**بررسی:**
- ⚠️ **مشکل احتمالی:** مشابه مصرف مستقیم
---
### 1.7 تولید (INVOICE_PRODUCTION)
**ثبت‌های حسابداری:**
- ❌ **هیچ ثبت حسابداری در فاکتور ایجاد نمی‌شود**
- ثبت‌های موجودی و WIP فقط در پست حواله انبار انجام می‌شود
**بررسی:**
- ⚠️ **مشکل احتمالی:** مشابه مصرف مستقیم و ضایعات
---
## 2. بررسی ثبت تراکنش‌های پرداخت
### 2.1 منطق ایجاد سند دریافت/پرداخت
**تعیین نوع سند:**
```python
is_receipt = invoice_type in {INVOICE_SALES, INVOICE_PURCHASE_RETURN}
```
**بررسی:**
- ✅ فاکتور فروش → سند دریافت (دریافت وجه از مشتری)
- ✅ برگشت از خرید → سند دریافت (دریافت وجه از تامین‌کننده)
- ✅ فاکتور خرید → سند پرداخت (پرداخت وجه به تامین‌کننده)
- ✅ برگشت از فروش → سند پرداخت (پرداخت وجه به مشتری)
**نوع حساب شخص:**
```python
person_is_receivable = invoice_type in {INVOICE_SALES, INVOICE_SALES_RETURN}
```
**بررسی:**
- ✅ فاکتور فروش → حساب دریافتنی (10401)
- ✅ برگشت از فروش → حساب دریافتنی (10401)
- ✅ فاکتور خرید → حساب پرداختنی (20201)
- ✅ برگشت از خرید → حساب پرداختنی (20201)
---
### 2.2 ثبت تراکنش بانک
**در سند دریافت:**
```
Dr. حساب بانک (10203)
Cr. حساب شخص (10401 یا 20201)
```
**در سند پرداخت:**
```
Dr. حساب شخص (10401 یا 20201)
Cr. حساب بانک (10203)
```
**بررسی:**
- ✅ منطق صحیح است
- ✅ در دریافت: بانک بدهکار می‌شود (افزایش دارایی)
- ✅ در پرداخت: بانک بستانکار می‌شود (کاهش دارایی)
---
### 2.3 ثبت تراکنش صندوق
**در سند دریافت:**
```
Dr. حساب صندوق (10202)
Cr. حساب شخص (10401 یا 20201)
```
**در سند پرداخت:**
```
Dr. حساب شخص (10401 یا 20201)
Cr. حساب صندوق (10202)
```
**بررسی:**
- ✅ منطق صحیح است
---
### 2.4 ثبت تراکنش تنخواه
**در سند دریافت:**
```
Dr. حساب تنخواه (10201)
Cr. حساب شخص (10401 یا 20201)
```
**در سند پرداخت:**
```
Dr. حساب شخص (10401 یا 20201)
Cr. حساب تنخواه (10201)
```
**بررسی:**
- ✅ منطق صحیح است
---
### 2.5 ثبت تراکنش چک
**چک دریافتی در سند دریافت:**
```
Cr. حساب اسناد دریافتنی (10403) - چک خارج شد
Cr. حساب شخص (10401) - تسویه بدهی
Dr. حساب بانک/صندوق (10203/10202) - اگر چک به بانک/صندوق سپرده شود
```
**چک پرداختی در سند پرداخت:**
```
Dr. حساب اسناد پرداختنی (20202) - چک پرداخت شد
Dr. حساب شخص (20201) - تسویه بدهی
Cr. حساب بانک/صندوق (10203/10202) - اگر چک از بانک/صندوق پرداخت شود
```
**بررسی:**
- ✅ منطق صحیح است
- ✅ نوع چک بررسی می‌شود (خط 1372-1386)
- ✅ چک دریافتی فقط در فاکتور فروش/برگشت از خرید استفاده می‌شود
- ✅ چک پرداختی فقط در فاکتور خرید/برگشت از فروش استفاده می‌شود
**نکته:**
- اگر چک به بانک/صندوق سپرده شود، یک خط اضافی برای بانک/صندوق ایجاد می‌شود (خط 800-851)
- این منطق صحیح است
---
### 2.6 کارمزد تراکنش‌ها
**در سند دریافت:**
```
Dr. حساب کارمزد خدمات بانکی (70902)
Cr. حساب بانک/صندوق/تنخواه (10203/10202/10201)
```
**در سند پرداخت:**
```
Dr. حساب بانک/صندوق/تنخواه (10203/10202/10201)
Cr. حساب کارمزد خدمات بانکی (70902)
```
**بررسی:**
- ✅ منطق صحیح است
- ✅ کارمزد به صورت جداگانه ثبت می‌شود
---
## 3. بررسی محاسبه مالیات و تخفیف
### 3.1 محاسبه در فرانت‌اند
**فرمول محاسبه:**
```dart
subtotal = quantity * unitPrice
discountAmount = (discountType == 'percent') ? subtotal * (discountValue / 100) : discountValue
taxableAmount = subtotal - discountAmount
taxAmount = taxableAmount * (taxRate / 100)
total = taxableAmount + taxAmount
```
**بررسی:**
- ✅ فرمول صحیح است
- ✅ تخفیف از مبلغ ناخالص کم می‌شود
- ✅ مالیات روی مبلغ خالص (بعد از تخفیف) محاسبه می‌شود
---
### 3.2 محاسبه در بکند
**تابع `_extract_totals_from_lines`:**
```python
gross += (qty * unit_price)
discount += line_discount
tax += tax_amount
net += line_total
```
**بررسی:**
- ✅ محاسبه صحیح است
- ✅ اگر `line_total` موجود باشد، از آن استفاده می‌شود
- ✅ در غیر این صورت: `line_total = (qty * unit_price) - line_discount + tax_amount`
---
## 4. مشکلات شناسایی شده
### 4.1 مشکل 1: عدم ثبت حسابداری برای مصرف مستقیم، ضایعات و تولید
**موقعیت:**
- فاکتورهای مصرف مستقیم، ضایعات و تولید هیچ ثبت حسابداری در فاکتور ایجاد نمی‌کنند
- ثبت‌های حسابداری فقط در پست حواله انبار انجام می‌شود
**ریسک:**
- اگر حواله انبار پست نشود، هیچ ثبت حسابداری ایجاد نمی‌شود
- این می‌تواند منجر به عدم ثبت هزینه/درآمد شود
**پیشنهاد:**
- بررسی شود که آیا باید ثبت حسابداری در فاکتور ایجاد شود یا خیر
- اگر باید ایجاد شود، باید منطق اضافه شود
---
### 4.2 مشکل 2: عدم بررسی تعادل در فاکتور
**موقعیت:**
- در تابع `create_invoice`، تعادل ثبت‌های حسابداری بررسی نمی‌شود
- اگر خطایی در محاسبه وجود داشته باشد، ممکن است سند نامتعادل ایجاد شود
**ریسک:**
- سند نامتعادل می‌تواند منجر به عدم تطابق در گزارش‌های مالی شود
**پیشنهاد:**
- اضافه کردن بررسی تعادل قبل از commit
- اگر تعادل برقرار نباشد، خطا برگردانده شود
---
### 4.3 مشکل 3: عدم بررسی تطابق مبلغ پرداخت با مبلغ فاکتور
**موقعیت:**
- در تابع `create_invoice`، مبلغ کل پرداخت‌ها با مبلغ فاکتور مقایسه نمی‌شود
- می‌توان مبلغی بیشتر یا کمتر از مبلغ فاکتور پرداخت کرد
**ریسک:**
- پرداخت بیشتر از مبلغ فاکتور می‌تواند منجر به پیش‌پرداخت شود
- پرداخت کمتر از مبلغ فاکتور می‌تواند منجر به بدهی باقی‌مانده شود
**بررسی:**
- این ممکن است یک ویژگی باشد (پیش‌پرداخت یا پرداخت جزئی)
- اما باید بررسی شود که آیا این رفتار مورد نظر است یا خیر
---
## 5. موارد صحیح
### 5.1 ثبت‌های حسابداری انواع فاکتور
- ✅ فاکتور فروش: ثبت‌های صحیح
- ✅ برگشت از فروش: ثبت‌های صحیح
- ✅ فاکتور خرید: ثبت‌های صحیح
- ✅ برگشت از خرید: ثبت‌های صحیح
### 5.2 ثبت تراکنش‌های پرداخت
- ✅ بانک: منطق صحیح
- ✅ صندوق: منطق صحیح
- ✅ تنخواه: منطق صحیح
- ✅ چک: منطق صحیح و بررسی نوع چک انجام می‌شود
- ✅ کارمزد: منطق صحیح
### 5.3 محاسبه مالیات و تخفیف
- ✅ محاسبه در فرانت‌اند صحیح است
- ✅ محاسبه در بکند صحیح است
- ✅ مالیات روی مبلغ خالص (بعد از تخفیف) محاسبه می‌شود
### 5.4 فروش اقساطی
- ✅ سود اقساط به دریافتنی اضافه می‌شود
- ✅ سود تحقق‌نیافته در حساب جداگانه ثبت می‌شود
### 5.5 پورسانت فروشنده
- ✅ هزینه پورسانت ثبت می‌شود
- ✅ حساب پورسانت و حساب پرداختنی فروشنده به درستی ثبت می‌شوند
---
## 6. نتیجه‌گیری
### وضعیت کلی: ✅ **خوب**
اکثر بخش‌های سیستم به درستی پیاده‌سازی شده‌اند:
1. ✅ ثبت‌های حسابداری انواع فاکتور صحیح است
2. ✅ ثبت تراکنش‌های پرداخت صحیح است
3. ✅ محاسبه مالیات و تخفیف صحیح است
4. ✅ بررسی نوع چک انجام می‌شود
5. ✅ فروش اقساطی و پورسانت فروشنده به درستی پیاده‌سازی شده‌اند
### مشکلات شناسایی شده:
1. ⚠️ **عدم ثبت حسابداری برای مصرف مستقیم، ضایعات و تولید** (نیاز به بررسی)
2. ⚠️ **عدم بررسی تعادل در فاکتور** (پیشنهاد بهبود)
3. ⚠️ **عدم بررسی تطابق مبلغ پرداخت با مبلغ فاکتور** (نیاز به بررسی - ممکن است یک ویژگی باشد)
### پیشنهادات:
1. بررسی شود که آیا باید ثبت حسابداری برای مصرف مستقیم، ضایعات و تولید در فاکتور ایجاد شود
2. اضافه کردن بررسی تعادل قبل از commit
3. بررسی شود که آیا باید محدودیتی برای مبلغ پرداخت نسبت به مبلغ فاکتور وجود داشته باشد
---
**تاریخ بررسی:** 2025-01-XX
**بررسی کننده:** AI Assistant