hesabresi and desc transfer
This commit is contained in:
1 parent
e353ed6fc2
commit
16eb747b5c
7 files changed
+678
-78
No files matched your search
@@ -0,0 +1,91 @@
|
||||
import os
|
||||
import csv
|
||||
import django
|
||||
from django.db.models import Sum, Subquery, OuterRef, F, IntegerField
|
||||
from django.db.models.functions import Coalesce
|
||||
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'khatibi.settings') # myproject را تغییر دهید
|
||||
django.setup()
|
||||
|
||||
from admin_panel.models import Article, Sarresid, Customer
|
||||
|
||||
def run_360_audit():
|
||||
print("\n" + "="*70)
|
||||
print(" 🔎 کالبدشکافی ۳۶۰ درجه سیستم مالی (ترازنامه دقیق)")
|
||||
print("="*70 + "\n")
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# ۱. محاسبه تراز کل سیستم (پایه ریاضی)
|
||||
# ---------------------------------------------------------
|
||||
g_art = Article.objects.aggregate(d=Sum('debit'), c=Sum('credit'))
|
||||
global_mande = (g_art['d'] or 0) - (g_art['c'] or 0)
|
||||
|
||||
g_sar = Sarresid.objects.filter(payStatus="false").aggregate(s=Sum('price'))['s'] or 0
|
||||
global_diff = global_mande - g_sar
|
||||
|
||||
print(f"💰 تراز کل دفتر کل (mandehesab): {global_mande:15,} ریال")
|
||||
print(f"📑 مجموع چکهای دست شرکت: {g_sar:15,} ریال")
|
||||
print(f"⚠️ کل اختلاف سیستم: {global_diff:15,} ریال\n")
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# ۲. اسکن پرسرعت تمام مشتریان
|
||||
# ---------------------------------------------------------
|
||||
sq_deb = Article.objects.filter(customer=OuterRef('pk')).values('customer').annotate(s=Sum('debit')).values('s')
|
||||
sq_cre = Article.objects.filter(customer=OuterRef('pk')).values('customer').annotate(s=Sum('credit')).values('s')
|
||||
sq_sar = Sarresid.objects.filter(customer=OuterRef('pk'), payStatus="false").values('customer').annotate(s=Sum('price')).values('s')
|
||||
|
||||
customers = Customer.objects.annotate(
|
||||
net_debt=Coalesce(Subquery(sq_deb, output_field=IntegerField()), 0) - Coalesce(Subquery(sq_cre, output_field=IntegerField()), 0),
|
||||
sarresid_total=Coalesce(Subquery(sq_sar, output_field=IntegerField()), 0),
|
||||
).annotate(
|
||||
diff=F('net_debt') - F('sarresid_total')
|
||||
)
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# ۳. دستهبندی ریاضیاتی (Bucketing)
|
||||
# ---------------------------------------------------------
|
||||
cat1_risk = 0 # 🔴 گروه 1: بدهکارانی که کسر سند/چک دارند (بدهی رو هوا)
|
||||
cat2_fake_check = 0 # 🟡 گروه 2: چک پاس نشده در سیستم بیشتر از بدهی است (خطای اپراتور)
|
||||
cat3_advance = 0 # 🟢 گروه 3: پیشدریافت (مشتری بستانکار است و چکی ندارد)
|
||||
cat4_advance_check = 0 # 🟣 گروه 4: عجیبترین! مشتری هم بستانکار است، هم چک پاسنشده دارد!
|
||||
|
||||
print("📊 [ تفکیک دقیق اختلاف به ۴ گروه حسابداری ]")
|
||||
print("-" * 70)
|
||||
|
||||
for c in customers:
|
||||
d = c.diff
|
||||
if d > 0:
|
||||
cat1_risk += d
|
||||
elif d < 0:
|
||||
if c.net_debt >= 0:
|
||||
cat2_fake_check += d
|
||||
elif c.net_debt < 0 and c.sarresid_total == 0:
|
||||
cat3_advance += d
|
||||
elif c.net_debt < 0 and c.sarresid_total > 0:
|
||||
cat4_advance_check += d
|
||||
|
||||
print(f"🔴 گروه 1 (کسری چک / بدهی خطرناک): {cat1_risk:+15,} ریال [باعث مثبت شدن اختلاف]")
|
||||
print(f"🟡 گروه 2 (خطای ثبتی / چک اضافی): {cat2_fake_check:+15,} ریال [باعث منفی شدن اختلاف]")
|
||||
print(f"🟢 گروه 3 (پیشدریافت / بستانکاری خالص): {cat3_advance:+15,} ریال [باعث منفی شدن اختلاف]")
|
||||
print(f"🟣 گروه 4 (بستانکارانی که چک هم دادهاند!): {cat4_advance_check:+15,} ریال [باعث منفی شدن اختلاف]")
|
||||
|
||||
print("-" * 70)
|
||||
calculated_diff = cat1_risk + cat2_fake_check + cat3_advance + cat4_advance_check
|
||||
print(f"🧮 جمع ریاضی هر 4 گروه بالا: {calculated_diff:15,} ریال")
|
||||
|
||||
if calculated_diff == global_diff:
|
||||
print("✅ تطابق 100%: هیچ پولی گم نشده و محاسبات از نظر حسابداری کاملاً تراز است!")
|
||||
else:
|
||||
print(f"❌ هنوز {global_diff - calculated_diff:,} ریال اختلاف وجود دارد!")
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# ۴. استخراج اسامی عاملین اختلاف منفی ۱۱۱ میلیونی (گروههای ۳ و ۴)
|
||||
# ---------------------------------------------------------
|
||||
print("\n🔎 [ چه کسانی باعث آن 111 میلیون اختلاف منفی شدهاند؟ (پیشدریافتها) ]")
|
||||
bostankar_qs = customers.filter(net_debt__lt=0).order_by('net_debt')[:10]
|
||||
|
||||
for c in bostankar_qs:
|
||||
print(f" 👤 {c.name_family} | تراز: {c.net_debt:,} | چک در دست: {c.sarresid_total:,} | تاثیر در اختلاف: {c.diff:,}")
|
||||
|
||||
if __name__ == '__main__':
|
||||
run_360_audit()
|
||||
Reference in new issue
Block a user