Skip to main content
#P1515

POST /colleague/bill

Route Info

Method Endpoint Controller Middleware Purpose
POST /api/v2/colleague/bill V2ColleaguesController@colleagueBill authWithJwt دریافت صورتحساب مالی یک همکار (Colleague) شامل تراکنش‌های پرداخت، دریافت، چک، کارمزد و مانده دوره.

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

تابع colleagueBill فهرستی از اسناد مالی مرتبط با یک همکار خاص را بر اساس id همکار و بازه تاریخی درخواست‌شده برمی‌گرداند. الگوریتم شامل مراحل زیر است:

  1. خواندن ساختار JSON ورودی شامل فیلترها (from, to, r, status, lbalance, fpopen) برای محدودسازی بازهٔ تراکنش.
  2. بازیابی فاکتورهای صادرشده از جداول مرتبط (فروش، خدمات و رزرو) و سپس عملیات پرداخت یا دریافت از جدول pays.
  3. تشخیص خودکار نوع عملیات مالی (پرداخت، دریافت، چک، سند دستی، کارمزد، افتتاحیه، اختتامیه).
  4. محاسبه مجموع بستانکاری و بدهکاری برای هر فاکتور و تولید خروجی یکپارچه شامل عنوان، تاریخ، توضیحات HTML و نوع سند.
  5. در صورت فعال بودن گزینه «lbalance»، مانده دوره قبل با عنوان «مانده دوره قبل تا تاریخ X/X/X» در بالای خروجی درج می‌شود.
  6. تمامی داده‌ها قبل از بازگردانی، بر اساس زمان شمسی (Jalalian) مرتب‌سازی صعودی می‌شوند.

ورودی‌ها

نام نوع منبع الزامی توضیح
json string (JSON) Body بله شامل فیلترهای صفحه‌بندی و بازه‌ تاریخی.
id integer Body بله شناسه همکار مورد نظر برای استخراج صورتحساب.
branch string Body خير شناسه شعبه (در صورت فیلتر مالی). پیش‌فرض: شعبه کاربر فعلی.
advanced.from string (Y-m-d) Body خیر تاریخ شروع بازه گزارش.
advanced.to string (Y-m-d) Body خیر تاریخ پایان بازه گزارش.
advanced.r string/integer Body خیر شماره سریال خاص برای جستجوی مستقیم.
advanced.lbalance boolean Body خیر فعال‌سازی نمایش مانده دوره قبل.
advanced.fpopen boolean Body خیر نمایش اسناد افتتاحیه در ابتدای دفتر حساب.

ساختار خروجی

{
  "recordsTotal": 54,
  "details": {
    "id": 202,
    "title": "آژانس مهر و ماه",
    "category": "شرکت داخلی",
    "type": "شریک تجاری (بستانکار)"
  },
  "total": {
    "credit": 22650000,
    "debit": 13790000
  },
  "data": [
    {
      "serial_id": "28-202",
      "datetime": "1404/06/20 09:00:00",
      "credit": 2500000,
      "debit": 0,
      "description": {
        "html": "دریافت چک از دفتر مرکزی",
        "text": "دریافت چک از دفتر مرکزی"
      },
      "details": {
        "documents": { "pay": 914 },
        "type": { "subject": "check_paid", "title": "چک نقدی" }
      },
      "relationship": null,
      "communications": false
    }
  ]
}

نکات امنیتی

  • این مسیر فقط برای کاربران احراز هویت‌شده (JWT معتبر) در دسترس است.
  • داده‌ها فقط از محدودهٔ شعبه کاربر قابل دسترس است.
  • در اطلاعات بازگشتی هیچ دادهٔ محرمانه بانکی ذخیره نمی‌شود.

نکات عملکردی

  • الگوریتم با صفحه‌بندی پایگاه داده (paginate) بهینه‌سازی شده است.
  • فیلتر تاریخ شمسی با کلاس Morilog\Jalali\Jalalian تبدیل و استفاده می‌شود.
  • در هر مرحله زمان عملیات با microtime برای تحلیل عملکرد ثبت می‌شود.

وابستگی‌ها

  • use Morilog\Jalali\Jalalian;
  • use Carbon\Carbon;
  • use Illuminate\Support\Facades\DB;
  • use Illuminate\Support\Facades\Redis;
  • use App\Http\Controllers\ApiColleaguesController;
  • use App\Http\Controllers\Functions;

کدهای خطا

کد شرح خطا منبع
401 توکن JWT نامعتبر یا منقضی. authWithJwt
404 یافت نشدن همکار. Database Query
500 خطا در پردازش تاریخ یا تجمع داده‌ها (Jalalian/Carbon). Logic Exception

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

  • ایزوله‌سازی داده‌های «چک برگشتی» از خروجی اصلی جهت جلوگیری از افشای نام اشخاص.
  • رمزنگاری مسیر دسترسی به اسناد صورتحساب در Redis Cache.

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

  • افزودن پارامتر with_closing برای کنترل نمایش اختتامیه‌ها.
  • افزودن فیلتر نوع سند (subject_type) برای جستجوی دقیق‌تر.
  • ایجاد قابلیت export به XLSX/CSV.

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

  • نوع لاگ: ColleagueBill.
  • جزئیات ثبت‌شده: user_id، colleague_id، بازه تاریخی، مجموع بدهکار/بستانکار.
  • سطح حساسیت: High.

جمع‌بندی

تابع colleagueBill یکی از سنگین‌ترین و حیاتی‌ترین مسیرهای مالی در سیستم است که ترکیبی از پرداخت‌ها، چک‌ها، اسناد دستی و مانده دوره را در قالب یک جمع‌بندی زمانی بازمی‌گرداند. امنیت و صحت زمان‌بندی محاسباتی نقش کلیدی در جلوگیری از ناسازگاری‌های حسابداری دارد.