Skip to main content
#P1517

POST /colleagues/update/financial

Route Info

Method Endpoint Controller Middleware Purpose
POST /api/v2/colleagues/update/financial V2ColleaguesController@updateFinancialColleagues authWithJwt به‌روزرسانی وضعیت مالی همکاران (بدهکار، بستانکار، مانده فعلی، سقف اعتباری) بر اساس اطلاعات تراکنش‌ها و فاکتورها.

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

تابع updateFinancialColleagues زمانی فراخوانی می‌شود که نیاز باشد اطلاعات مالی تمام یا بخشی از همکاران (Colleagues) بر اساس آخرین تراکنش‌ها محاسبه مجدد شود. منطق کلی آن:

  1. خواندن اطلاعات درخواستی از کلاینت (درخواست عمومی یا برای همکار خاص).
  2. دریافت آخرین ماندهٔ مالی از جداول pays، factors، و manual_documents.
  3. محاسبهٔ خالص بدهی (Debit) و بستانکاری (Credit) برای هر همکار.
  4. تعیین Diagnosis هر همکار (Debtor, Creditor, Neutral).
  5. به‌روزرسانی فیلدهای مالی در جدول colleagues و ثبت زمان آخرین آپدیت در Redis Cache تحت کلید TIME:colleagues:general_billing.
  6. برگشت خروجی شامل وضعیت کلی هر همکار پس از به‌روزرسانی.

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

نام نوع محل الزامی توضیح
json string (JSON) Body بله شامل پارامترهای فیلتر (from, to, id و ...)
category integer Body خیر دسته‌بندی همکار برای محدودسازی (مثلاً ۸: شرکت مسافربری)
update_type string Body خیر نوع به‌روزرسانی: partial یا full. پیش‌فرض: full
branch string Body خیر شناسه شعبه برای محدودسازی محاسبه.

ساختار خروجی

{
  "status": true,
  "updated": 46,
  "refreshDatetime": "2025-11-23 13:30:06",
  "data": [
    {
      "colleague_id": 72,
      "name": "آژانس یاقوت شرق",
      "category": "شرکت داخلی",
      "credit": 9140000,
      "debit": 6400000,
      "balance": 2740000,
      "diagnosis": "Creditor",
      "financial_ceiling": 20000000
    }
  ]
}

نکات امنیتی

  • فقط مدیران مالی یا کاربران دارای نقش finance.admin امکان فراخوانی دارند.
  • به‌روزرسانی کلان روی همهٔ همکاران در ساعت کاری توصیه نمی‌شود.
  • کلید Redis هر اجرا باید با شناسه شعبه (branch) جدا شود تا تداخل در داده جلوگیری شود.

نکات عملکردی

  • تابع از Batch Update برای کاهش تعداد Queryها استفاده می‌کند.
  • Cache زمان آخرین محاسبه در Redis ذخیره می‌شود:
Redis::set('TIME:colleagues:general_billing', Carbon::now()->toString());
  • به‌طور میانگین از ۱۰۰ رکورد در هر بار اجرا پشتیبانی می‌کند (بهینه برای cron job).

وابستگی‌ها

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

کدهای خطا

کد شرح خطا منبع
401 توکن JWT نامعتبر authWithJwt
422 پارامتر نامعتبر در json Validation
500 خطای داخلی پایگاه داده هنگام تجمیع داده DB::Transaction

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

  • محدودسازی Endpoint برای نقش‌های Finance.
  • ثبت لاگ تمام تغییرات مالی بزرگ‌تر از ۱۰۰ میلیون تومان.
  • رمزنگاری کلید Redis با الگوریتم HMAC_SHA256.

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

  • ایجاد امکان Delta Update برای فقط همکاران تغییر یافته.
  • افزودن فیلد refresh_by در Redis برای ثبت شناسهٔ کاربر اجراکننده.
  • ساخت گزارش خودکار پس از آپدیت برای مانیتورینگ.

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

  • نام رویداد: UpdateFinancialColleagues
  • لاگ‌شده در جدول system_reports با نوع "financial_refresh"
  • شامل: user_id، branch، بازه زمانی، تعداد همکاران به‌روزرسانی‌شده.

جمع‌بندی

تابع updateFinancialColleagues بازوی مرکزی حفظ یکپارچگی مالی همکاران است. با ادغام آن با تریگرهای تراکنش و کش Redis، سیستم مالی همکاران همیشه به‌روزرسانی‌شده و هم‌زمان باقی می‌ماند. استفاده مکرر از این مسیر باید با کنترل بار سرور و هماهنگی حسابداری انجام شود.