Skip to main content
#P1518

POST /colleagues/update/general-billing

Route Info

Method Endpoint Controller Middleware Purpose
POST /api/v2/colleagues/update/general-billing V2ColleaguesController@updateGeneralBillingColleagues authWithJwt بازسازی و به‌روزرسانی صورتحساب کلی (General Billing) همکاران بر اساس آخرین مانده‌ها، اسناد مالی و ترازها.

منطق عملکرد تابع

تابع updateGeneralBillingColleagues داده‌های مالی فعلی هر همکار را از جداول مختلف تجمیع کرده و صورتحساب کلی (General Billing)‌ را به‌روزرسانی می‌کند. هدف آن حفظ یکپارچگی اطلاعات مالی همکاران در سامانه است.

  1. دریافت پارامترهای فیلتر (id خاص یا به‌روزرسانی جمعی)،
  2. اجرای محاسبات بدهی/بستانکاری هر همکار از creditDebit، factor، pays و manual_documents.
  3. تعیین تشخیص وضعیت مالی (Diagnosis): Creditor، Debtor یا Neutral.
  4. ذخیره مجموع‌ها در جدول colleagues (فیلد balance و diagnosis).
  5. به‌روزرسانی مهر زمانی در Redis: TIMESTAMP = 'TIME:colleagues:general_billing'
  6. بازگرداندن گزارش کلی از همکاران به‌روزشده.

پارامترهای ورودی

نام نوع محل الزامی توضیح
json string (JSON) Body بله شامل شناسه‌ها و فیلترها (مثل id , from , to)
branch string Body خیر شناسه شعبه جهت تفکیک محاسبات
ids array Body خیر در صورت ارسال، فقط همین همکاران به‌روزرسانی می‌شوند

ساختار خروجی

{
  "status": true,
  "updated": 31,
  "refreshDatetime": "2025-11-23 14:00:21",
  "data": [
    {
      "colleague_id": 14,
      "name": "شرکت سپهر پرواز",
      "credit": 7800000,
      "debit": 1040000,
      "balance": 6760000,
      "diagnosis": "Creditor",
      "financial_ceiling": 30000000,
      "category": "شرکت داخلی"
    }
  ]
}

نکات امنیتی

  • این مسیر فقط برای سطح دسترسی finance.admin یا system.automation مجاز است.
  • هر بار اجرای جمعی باید در context مربوط به branch صورت گیرد تا داده‌ها تداخل نکنند.
  • دسترسی این endpoint باید از طریق JWT معتبر کنترل شود.

نکات عملکردی

  • هر پردازش شامل محاسبات از چند جدول (pays, factors, manual_documents) است؛ بنابراین اجرای انبوه باید به‌صورت async یا cron انجام شود.
  • نتیجه آخرین اجرا در Redis ذخیره می‌شود تا دفعات بعد سریع‌تر قابل بازیابی باشد.
  • Batch Size مناسب: 50–100 همکار در هر پردازش.

وابستگی‌ها

  • use Carbon\Carbon;
  • use Illuminate\Support\Facades\DB;
  • use Illuminate\Support\Facades\Redis;
  • use App\Models\Colleague;
  • use App\Http\Controllers\Functions;

کدهای خطا

کد شرح خطا منبع
401 عدم احراز هویت JWT Middleware
422 پارامتر ناقص یا JSON نامعتبر Validation
500 خطا در اجرای کوئری محاسبات مالی DB Transaction

پیشنهادهای امنیتی

  • محدودسازی دستی به نقش مالی (Finance Role).
  • در حالت cron، log کامل user_id و branch نگهداری شود.
  • رمزنگاری refreshDatetime در Redis با الگوریتم SHA256.

پیشنهادهای توسعه‌ای

  • افزودن امکان incremental update فقط برای همکاران ویرایش‌شده از آخرین اجرای Redis.
  • ایجاد دستور artisan برای اجرای خودکار این مسیر توسط cronjob.
  • افزودن فیلد duration_ms برای ثبت زمان اجرای واقعی هر batch.

ممیزی و لاگ‌ها

  • رویداد: GeneralBillingUpdate
  • ثبت در جدول system_reports با نوع فرایند billing_refresh.
  • فیلدهای ثبت شده: user_id، تعداد همکاران به‌روزشده، branch، زمان اجرا.

جمع‌بندی

تابع updateGeneralBillingColleagues پایهٔ نگهداری داده‌های مالی کلان سیستم است. عملکرد درست آن موجب یکپارچگی ترازهای داخلی و صحت گزارش‌های مالی می‌شود. اجرای همزمان آن با مسیر updateFinancialColleagues توصیه نمی‌شود تا تداخلی در cache و داده‌ها ایجاد نشود.