# POST /v2/accounting/preference

<div id="bkmrk-" style="direction: rtl; font-family: Vazir, Tahoma; line-height: 1.9; text-align: justify;">  </div>### Route Info

<div id="bkmrk-method-endpoint-cont" style="direction: rtl; font-family: Vazir, Tahoma; line-height: 1.9; text-align: justify;"><table border="1" style="width: 100%; border-collapse: collapse; text-align: center;"><tbody><tr style="background: #f5f5f5; font-weight: bold;"><td>Method</td><td>Endpoint</td><td>Controller</td><td>Middleware</td></tr><tr><td style="direction: ltr;">POST</td><td style="direction: ltr;">/v2/accounting/preference</td><td style="direction: ltr;">AccountingController@storeMappingPreferences</td><td style="direction: ltr;">authWithJwt</td></tr></tbody></table>

  </div>### شرح عملکرد (Functionality)

این API برای **ثبت نگاشت‌های حسابداری** در جدول `mapping_accounting_preferences` استفاده می‌شود. ورودی به‌صورت مجموعه‌ای از آیتم‌ها در فیلد `items` ارسال می‌شود. برای هر آیتم:

<div id="bkmrk-%D8%A7%D8%A8%D8%AA%D8%AF%D8%A7-%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%D9%85%DB%8C%E2%80%8C%D8%B4%D9%88%D8%AF-%D8%A2" style="direction: rtl; font-family: Vazir, Tahoma; line-height: 1.9; text-align: justify;">- ابتدا بررسی می‌شود آیا کد (`code`) قبلاً در همین شعبه ثبت شده یا خیر.
- اگر تکراری باشد → به آرایه `error` افزوده می‌شود.
- اگر جدید باشد → اطلاعات ساختاردهی شده و آماده Insert می‌شود.

</div>در انتها، اگر هیچ خطایی وجود نداشته باشد، همه رکوردهای جدید به صورت Batch درج می‌شوند.

<div id="bkmrk--1" style="direction: rtl; font-family: Vazir, Tahoma; line-height: 1.9; text-align: justify;">  </div>### ورودی مورد نیاز (JSON Body)

ساختار کلی:

```
{
  "branch": 1,
  "items": [
    {
      "id": "customer-24",
      "text": "24 - مشتری عمده",
      "code": "110201"
    },
    {
      "id": "office-3",
      "text": "301 - دفتر مرکزی",
      "code": "880030"
    }
  ]
}
```

#### جزئیات فیلدها:

<div id="bkmrk-branch-%D8%B4%D9%86%D8%A7%D8%B3%D9%87-%D8%B4%D8%B9%D8%A8%D9%87-%28%D8%B6" style="direction: rtl; font-family: Vazir, Tahoma; line-height: 1.9; text-align: justify;">- **branch** شناسه شعبه (ضروری)
- **items**: آرایه‌ای از نگاشت‌ها هر آیتم شامل: 
    - **id**: ترکیب نوع شیء و شناسه (مثال: `customer-24`)
    - **text**: رشته شامل کد سیستمی و نام خوانا (مثال: `"24 - مشتری"`)
    - **code**: کد نهایی نگاشت موردنظر (۶ رقمی یا بیشتر)

  </div>### ساختاردهی رکورد درج‌شونده

برای هر آیتم غیرتکراری:

<div id="bkmrk-object_type-%D8%A7%D8%B2-%D8%A8%D8%AE%D8%B4-%D8%A7" style="direction: rtl; font-family: Vazir, Tahoma; line-height: 1.9; text-align: justify;">- `object_type` از بخش اول `id` (مثال: customer)
- `object` از بخش دوم `id` (مثال: 24)
- `system_code` اولین بخش `text` قبل از خط تیره
- `title` بخش آخر `text` بعد از آخرین خط تیره
- `code` همان کد نهایی ارسال‌شده توسط کاربر
- `branch` از ورودی
- `updated_at` = زمان فعلی

  </div>### پاسخ موفق (Success Response)

در صورت عدم وجود خطا و انجام موفق درج:

```
{
  "payload": true,
  "error": false,
  "meta": {
    "timestamp": 1733056000
  }
}
```

<div id="bkmrk--2" style="direction: rtl; font-family: Vazir, Tahoma; line-height: 1.9; text-align: justify;">  </div>### پاسخ در صورت وجود خطا برای برخی آیتم‌ها

اگر بخشی از آیتم‌ها Duplicate باشند:

```
{
  "payload": true,
  "error": [
    {
      "message": "این کد قبلا ثبت شده است.",
      "code": "110201"
    }
  ],
  "meta": {
    "timestamp": 1733056000
  }
}
```

<div id="bkmrk--3" style="direction: rtl; font-family: Vazir, Tahoma; line-height: 1.9; text-align: justify;">  </div>### خطای عدم ارسال فیلد items

```
{
  "error": {
    "message": "The items field is required."
  },
  "meta": {
    "timestamp": 1733056000
  }
}
```

<div id="bkmrk--4" style="direction: rtl; font-family: Vazir, Tahoma; line-height: 1.9; text-align: justify;">  </div>### وابستگی دیتابیس

<div id="bkmrk-table-description-ma" style="direction: rtl; font-family: Vazir, Tahoma; line-height: 1.9; text-align: justify;"><table border="1" style="width: 100%; border-collapse: collapse; text-align: center;"><tbody><tr style="background: #f5f5f5; font-weight: bold;"><td>Table</td><td>Description</td></tr><tr><td>mapping\_accounting\_preferences</td><td>نگاشت حسابداری برای انواع موجودیت‌ها</td></tr></tbody></table>

  </div>### Meta

<div id="bkmrk-http-status-code%3A-20" style="direction: rtl; font-family: Vazir, Tahoma; line-height: 1.9; text-align: justify;">- HTTP Status Code: 200
- Batch Insert: فعال
- Duplicate Check: مبتنی بر code + branch

</div>