Files
tehran_taj/docs/FRESH-SERVER-DEPLOY-AUDIT.md
s.esmaeiliandClaude Sonnet 4.6 8b74c85a2a fix(accounting): verify and fix Zarrin driver on real v228 install
Tested 20/20 on the owner's live Zarrin v228 (870 accounts, 656 items):

Reads fixed:
- listKarSakhte: now pages by 100 via pageNum (was returning only first 100 of 656)
- goroohSakhte: HTTP 400 with a valid body is now accepted (was treated as missing)
- parvande «مانده از قبل» row is not a balance; skip it and anchor the running
  balance on the live listMandeHesabha balance, walked back through movements
- infogardeshsakhte: hand-printed JSON repaired, timeout raised to 90s
- document delete: now searches all ledger pages, not just the first one
- listhesabha names are «first * last»; the «*» is now stripped
- keep-alive ECONNRESET: a socket hang-up on a reused connection is retried once
  on a fresh connection (server closes idle connections)

Writes fixed (test account 953 «تست اپ گلدبانک»):
- temporary flag: set from shomareSanad («موقت»), not noeFactor
- noeFactor «فاکتور موقت» also flags a document left open in Zarrin's own UI

New: test script apps/api/scripts/test-accounting-zarrin.ts (13 read + 7 write checks)
Docs: §13 added to ACCOUNTING-INTEGRATION-PLAN.md; ACC-01 in ISSUES.md updated
New: docs/FRESH-SERVER-DEPLOY-AUDIT.md (fresh-server deploy checklist)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-12 15:23:24 +03:30

5.0 KiB

بررسی راه‌اندازی سرور با دیتابیس خالی

وضعیت: بررسی فقط خواندنی انجام شد. هیچ کدی تغییر نکرده و هیچ داده‌ای نوشته یا منتقل نشده است. تاریخ: ۲۰۲۶-۱۰-۱۲

هدف

روی سرور تولید فقط یک کاربر super admin باشد و هیچ داده‌ی دیگری (مشتری، محصول، سفارش، بدهی، نقش اضافه، حساب تست) وارد نشود. دیتابیس henza قدیمی در این مرحله منتقل نمی‌شود.

یافته‌ها

۱. حساب ثابت در کد (مهم‌ترین مورد)

  • در auth.service.ts:21 شماره 09128081392 ثابت شده و در خط ۴۹–۵۳ اگر شماره همین باشد و رمز هم برابر خود شماره باشد، ensureStaticAdmin اجرا می‌شود.
  • خط ۲۳۰–۲۴۵ یک SUPER_ADMIN با نام «مدیر موقت» می‌سازد یا فعال می‌کند.
  • این شرط محیطی ندارد، پس روی سرور تولید هم فعال است.
  • همین شماره در seed.ts به‌عنوان «کاربر تست توسعه» هم آمده است.

۲. داده‌ی demo در seed

  • seed.ts بخش demo را فقط وقتی اجرا می‌کند که NODE_ENV برابر production نباشد یا SEED_DEMO_DATA=true باشد.
  • بخش demo شامل شهرها، شعبه‌ها، کارگاه، ادمین‌های تست، مشتری، محصول، سفارش و بدهی است.
  • bootstrap.ts در اولین boot، اگر RUN_SEED=false نباشد، seed را اجرا می‌کند.

۳. نقش‌ها و permissionها

  • seed.ts همیشه کاربرتایپ‌های ۸۵ تا ۸۹ و permissionهایشان را می‌سازد.
  • گاردها فقط بر اساس rid کار می‌کنند و برای SUPER_ADMIN بای‌پس ندارند (guards.ts:17). پس نقش ۸۵ با تمام دسترسی‌ها لازم است و نقش‌های ۸۶ تا ۸۹ لازم نیستند.

۴. migrationهای تغییردهنده‌ی داده

روی دیتابیس خالی بدون اثر هستند (بر اساس خواندن SQL، هنوز روی دیتابیس اجرا نشده‌اند):

migration کار روی دیتابیس خالی
20260922120000_customer_name_parts ستون و trigger نام فقط ساختار
20260922180000_sales_expert_profile_and_admin_name_parts INSERT از AdminUser no-op
20261005120000_accounting_integration permission فقط اگر نقش ۸۵ باشد no-op
20261008090000_customer_identity_cleanup UPDATE روی Customer و AdminUser no-op
20261008120000_order_sales_agent UPDATE روی Order no-op
20261008150000_wage_formula_permission permission فقط اگر نقش ۸۵ باشد no-op
20261008160000_dashboard_permission_merge INSERT و DELETE روی permission no-op
20261008170000_city_tree ساخت استان از ردیف‌های موجود no-op

۵. شماره‌های ثابت در سرویس حسابداری

09121234567 و 09891212345 فقط مثال در docstring و تابع نرمال‌سازی هستند (accounting-provider.ts:272، tahesab.provider.ts:224). داده نیستند.

کارهای پیشنهادی (هنوز انجام نشده)

  1. seed فقط نقش ۸۵ با ALL_RIDS بسازد؛ نقش‌های ۸۶ تا ۸۹ حذف شوند.
  2. حساب ثابت 09128081392 و ensureStaticAdmin از auth.service.ts حذف شود.
  3. روی سرور: NODE_ENV=production و RUN_SEED=false، و SEED_DEMO_DATA ست نشود.
  4. یک اسکریپت یک‌بار اجرا برای ساخت super admin: شماره و نام و رمز را کاربر وارد می‌کند؛ داخل کد یا seed ذخیره نمی‌شود.
  5. روی یک دیتابیس خالی تست شود: migrationها از صفر اجرا شوند و فقط یک کاربر و نقش ۸۵ باقی بماند.

تصمیم‌های باز

  • شماره و نام super admin واقعی.
  • نقش‌های ۸۶ تا ۸۹ حذف شوند یا بمانند؟
  • حذف حساب ثابت از کد تأیید شود.

بررسی‌نشده

  • سطر به سطر بررسی نشده که migrationها روی دیتابیس واقعی خالی هیچ خطایی ندهند. این را باید با یک اجرای تست روی دیتابیس خالی تأیید کرد.
  • ساختار docs/SERVER-SETUP-CHECKLIST.md برای تنظیم سرور هنوز مرور نشده است.