SinTime v31 — گزارش مرحله ۴
موضوع: بررسی موتور چیدمان دکمه‌ها، سقف روزانه، ورود مبلغ کیف پول و پایداری تنظیمات

تغییرات انجام‌شده
1) سقف شارژ روزانه (DAILY_LIMIT) از سقف خرید روزانه جدا شد؛ قبلی همچنان سقف شارژ کیف پول است.
2) تنظیم جدید DAILY_PURCHASE_LIMIT اضافه شد. این محدودیت مجموع مبلغ سفارش‌های هر مشتری در یک روز را کنترل می‌کند. مقدار 0 یعنی محدودیت خرید خاموش است تا رفتار فروشگاه برای نصب‌های قبلی ناخواسته تغییر نکند.
3) تنظیم سقف خرید روزانه از پنل وب و پنل مدیریتی تلگرام قابل تغییر است؛ اعداد فارسی/عربی و اعداد لاتین نرمال‌سازی می‌شوند.
4) قبل از ثبت سفارش، سقف خرید روزانه بررسی می‌شود. استفاده روزانه هنگام ثبت موفق سفارش ذخیره می‌شود و در بازپرداخت همان روز، مصرف سقف برگشت داده می‌شود. مسیر خرید شماره مجازی نیز بررسی و ثبت سقف را انجام می‌دهد.
5) ورود مبلغ شارژ، اعداد فارسی/عربی، جداکننده‌های رایج و پسوند «تومان/تومن» را می‌پذیرد؛ مبلغ صفر دیگر بی‌صدا وارد مرحله پرداخت نمی‌شود.
6) سهمیه روزانه شارژ با انتخاب روش کارت رزرو نمی‌شود؛ تنها پس از ارسال واقعی رسید رزرو می‌شود. در پرداخت رمزارزی نیز سهمیه پس از ورود TXID معتبر رزرو می‌شود. این کار مانع گیر کردن سقف روزانه به خاطر شروع و رها کردن مرحله پرداخت می‌شود.
7) موتور چیدمان دکمه‌ها بررسی شد: چیدمان‌های ذخیره‌شده از BUTTON_SCREEN_LAYOUTS خوانده می‌شوند و دکمه‌های پویا که بعداً اضافه می‌شوند، از خروجی حذف نمی‌شوند. در این مرحله تغییر ساختاری غیرضروری به موتور دکمه‌ها داده نشد.

آزمون‌ها
- بررسی نحوی PHP برای تمام فایل‌های PHP پروژه: موفق
- بررسی نحوی JavaScript برای button_layout_editor.js و screen_studio.js: موفق
- تست قالب مرحله ۲: 8/8 موفق
- تست گیرنده مرحله ۳: 6/6 موفق
- تست مرحله ۴ کیف پول/سقف خرید: 13/13 موفق
- بررسی ZIP با unzip -t: باید پس از بسته‌بندی نهایی اجرا شود.

محدودیت تست
فایل‌های storage و config.json واقعی کاربر داخل ZIP پایه نبودند؛ بنابراین داده زنده، پرداخت واقعی، webhook تلگرام و وضعیت واقعی حساب مشتری روی هاست قابل آزمایش نبود. این نتایج lint و تست‌های محلی/ایستا هستند، نه تأیید خرید زنده.

نکته برای نصب
پس از تهیه نسخه پشتیبان از فایل‌های فعلی هاست، فایل‌های مرحله ۴ را ابتدا روی نسخه آزمایشی نصب کنید. سقف شارژ روزانه از قبل باقی می‌ماند؛ سقف خرید روزانه جدید به‌طور پیش‌فرض 0 (غیرفعال) است و فقط وقتی عددی مثبت تنظیم شود، خریدها را محدود می‌کند.
