ProHelper Admin API (1.0.0)

Download OpenAPI specification:Download

Базовая спецификация Admin API. Добавляйте пути через $ref в папку paths/.

Auth

Авторизация администратора в системе

Аутентифицирует администратора по email/паролю и возвращает JWT токен для доступа к административной панели.

Особенности:

  • Токен действует 1 час
  • Поддерживается only администраторы и супер-администраторы
  • После авторизации пользователь получает доступ ко всем функциям админ-панели согласно своей роли

Обрабатывается: AuthController::login

Request Body schema: application/json
email
required
string <email> <= 255 characters

Email администратора для входа в систему

password
required
string <password>

Пароль администратора (без минимальной длины в валидации)

Responses

Request samples

Content type
application/json
{
  • "email": "admin@prohelper.com",
  • "password": "AdminPassword123"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Вход выполнен успешно",
  • "data": {
    }
}

Получить профиль текущего администратора

Возвращает детальную информацию о профиле аутентифицированного администратора.

Используется для:

  • Отображения информации в шапке админ-панели
  • Проверки актуальности данных пользователя
  • Получения ролей и разрешений

Обрабатывается: AuthController::me

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": null,
  • "data": {
    }
}

Обновить JWT токен администратора

Обновляет JWT токен используя текущий валидный токен. Возвращает новый токен с продленным временем действия (1 час).

Рекомендуется использовать:

  • За 10-15 минут до истечения текущего токена
  • При получении ошибок 401 на других эндпоинтах

Обрабатывается: AuthController::refresh

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Токен успешно обновлен",
  • "data": {
    }
}

Выход администратора из системы

Аннулирует JWT токен администратора и завершает сессию. После вызова токен становится недействительным и добавляется в черный список.

Рекомендуется вызывать:

  • При нажатии кнопки "Выйти" в интерфейсе
  • При смене пользователя
  • При подозрении на компрометацию аккаунта

Обрабатывается: AuthController::logout

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Выход выполнен успешно",
  • "data": null
}

Catalogs

Получить список материалов

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": [
    ]
}

Создать материал

Request Body schema: application/json
name
required
string <= 255 characters

Название материала (уникальное в рамках организации)

code
string or null <= 50 characters

Внутренний код материала

measurement_unit_id
required
integer >= 1

ID единицы измерения (должна существовать в measurement_units)

description
string or null <= 1000 characters

Описание материала

category
string or null <= 100 characters

Категория материала

default_price
number or null <decimal> >= 0

Цена по умолчанию (не может быть отрицательной)

additional_properties
object or null

Дополнительные свойства в формате JSON

is_active
boolean
Default: true

Активен ли материал

external_code
string or null <= 100 characters

Внешний код для интеграции (уникальный в рамках организации)

sbis_nomenclature_code
string or null <= 100 characters

Код номенклатуры в системе СБИС

sbis_unit_code
string or null <= 100 characters

Код единицы измерения в системе СБИС

object or null

Нормы расхода по видам работ в формате work_type_id - количество

accounting_data
object or null

Дополнительные бухгалтерские данные в формате JSON

use_in_accounting_reports
boolean or null
Default: false

Использовать в бухгалтерских отчетах

accounting_account
string or null <= 50 characters

Счет бухгалтерского учета

Responses

Request samples

Content type
application/json
{
  • "name": "Кирпич красный керамический",
  • "code": "MTR-001",
  • "measurement_unit_id": 3,
  • "description": "Кирпич керамический красный одинарный М-150",
  • "category": "Строительные материалы",
  • "default_price": 12.5,
  • "additional_properties": {
    },
  • "is_active": true,
  • "external_code": "EXT-MTR-001",
  • "sbis_nomenclature_code": "00001234",
  • "sbis_unit_code": "796",
  • "consumption_rates": {
    },
  • "accounting_data": {
    },
  • "use_in_accounting_reports": true,
  • "accounting_account": "10.01"
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "success": true,
  • "message": "string"
}

Получить материал по ID

path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "success": true,
  • "message": "string"
}

Обновить материал

path Parameters
id
required
integer
Request Body schema: application/json
name
required
string <= 255 characters

Название материала (уникальное в рамках организации)

code
string or null <= 50 characters

Внутренний код материала

measurement_unit_id
required
integer >= 1

ID единицы измерения (должна существовать в measurement_units)

description
string or null <= 1000 characters

Описание материала

category
string or null <= 100 characters

Категория материала

default_price
number or null <decimal> >= 0

Цена по умолчанию (не может быть отрицательной)

additional_properties
object or null

Дополнительные свойства в формате JSON

is_active
boolean
Default: true

Активен ли материал

external_code
string or null <= 100 characters

Внешний код для интеграции (уникальный в рамках организации)

sbis_nomenclature_code
string or null <= 100 characters

Код номенклатуры в системе СБИС

sbis_unit_code
string or null <= 100 characters

Код единицы измерения в системе СБИС

object or null

Нормы расхода по видам работ в формате work_type_id - количество

accounting_data
object or null

Дополнительные бухгалтерские данные в формате JSON

use_in_accounting_reports
boolean or null
Default: false

Использовать в бухгалтерских отчетах

accounting_account
string or null <= 50 characters

Счет бухгалтерского учета

Responses

Request samples

Content type
application/json
{
  • "name": "Кирпич красный керамический",
  • "code": "MTR-001",
  • "measurement_unit_id": 3,
  • "description": "Кирпич керамический красный одинарный М-150",
  • "category": "Строительные материалы",
  • "default_price": 12.5,
  • "additional_properties": {
    },
  • "is_active": true,
  • "external_code": "EXT-MTR-001",
  • "sbis_nomenclature_code": "00001234",
  • "sbis_unit_code": "796",
  • "consumption_rates": {
    },
  • "accounting_data": {
    },
  • "use_in_accounting_reports": true,
  • "accounting_account": "10.01"
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "success": true,
  • "message": "string"
}

Удалить материал

path Parameters
id
required
integer

Responses

Импортировать материалы из файла CSV/XLSX

Request Body schema: multipart/form-data
file
string <binary>

Responses

Response samples

Content type
application/json
{
  • "message": "Unauthenticated.",
  • "success": false
}

Скачать шаблон импорта материалов

Responses

MaterialAnalytics

Сводка использования материалов

query Parameters
date_from
string <date>

Начальная дата фильтра

date_to
string <date>

Конечная дата фильтра

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": {
    }
}

Использование материалов по проектам

query Parameters
project_ids
string

Список ID проектов через запятую

date_from
string <date>
date_to
string <date>

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": [
    ]
}

Использование материалов по поставщикам

query Parameters
supplier_ids
string

Список ID поставщиков через запятую

date_from
string <date>
date_to
string <date>

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": [
    ]
}

Материалы с низким остатком

query Parameters
threshold
number <float>
Default: 10

Порог остатка

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": [
    ]
}

Наиболее используемые материалы

query Parameters
period
integer
Default: 30

Период в днях

limit
integer
Default: 10

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": [
    ]
}

История стоимости материала

query Parameters
material_id
required
integer
date_from
string <date>
date_to
string <date>

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": [
    ]
}

Отчет по движению материалов

query Parameters
material_ids
string

Список ID материалов через запятую

project_ids
string

Список ID проектов через запятую

date_from
string <date>
date_to
string <date>

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": [
    ]
}

Инвентаризационный отчет

query Parameters
category_ids
string

ID категорий через запятую

supplier_ids
string
include_zero_balance
boolean
only_low_stock
boolean
stock_threshold
number <float>

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": [
    ]
}

Отчет по динамике стоимости материалов

query Parameters
material_ids
string
date_from
string <date>
date_to
string <date>
group_by
string
Default: "month"
Enum: "day" "month"

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": {
    }
}

Projects

Получить список проектов организации

Возвращает пагинированный список проектов текущей организации с поддержкой фильтрации и сортировки. Поддерживает фильтрацию по названию, статусу и архивному статусу.

Обрабатывается: ProjectController::index Метод сервиса: ProjectService::getProjectsForCurrentOrg Требует прав: admin.projects.view

Authorizations:
bearerAuth
query Parameters
per_page
integer [ 1 .. 100 ]
Default: 15
Example: per_page=20

Количество элементов на странице

name
string <= 255 characters
Example: name=Березовая

Фильтр по названию проекта (поиск по подстроке)

status
string
Enum: "active" "completed" "paused" "cancelled"
Example: status=active

Фильтр по статусу проекта

is_archived
boolean

Фильтр по архивному статусу (true/false)

sort_by
string
Default: "created_at"
Enum: "name" "status" "start_date" "end_date" "created_at" "updated_at"
Example: sort_by=name

Поле для сортировки

sort_direction
string
Default: "desc"
Enum: "asc" "desc"
Example: sort_direction=asc

Направление сортировки

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {}
}

Создать новый проект

Создает новый проект для текущей организации. Автоматически устанавливает organization_id и is_head=true. Поддерживает интеграцию с бухгалтерскими системами через external_code и cost_category_id.

Обрабатывается: ProjectController::store Метод сервиса: ProjectService::createProject Требует прав: admin.projects.create Миддлвары: subscription.limit:max_projects

Authorizations:
bearerAuth
Request Body schema: application/json
name
required
string <= 255 characters

Название проекта

address
string or null <= 1000 characters

Адрес проекта

description
string or null <= 2000 characters

Описание проекта

customer
string or null <= 255 characters

Заказчик проекта

designer
string or null <= 255 characters

Проектировщик

start_date
string or null <date>

Дата начала проекта

end_date
string or null <date>

Дата окончания проекта (должна быть >= start_date)

status
required
string
Enum: "active" "completed" "paused" "cancelled"

Статус проекта

is_archived
boolean
Default: false

Архивный ли проект

additional_info
object or null

Дополнительная информация в формате JSON

external_code
string or null <= 100 characters

Внешний код проекта для интеграции с бухгалтерскими системами

cost_category_id
integer or null

ID категории затрат (должна существовать в cost_categories)

accounting_data
object or null

Бухгалтерские данные в формате JSON

use_in_accounting_reports
boolean or null
Default: false

Использовать в бухгалтерских отчетах

budget_amount
number or null <decimal> >= 0

Бюджет проекта

site_area_m2
number or null <decimal> >= 0

Площадь участка в кв.м

contract_number
string or null <= 100 characters

Номер договора

Responses

Request samples

Content type
application/json
{
  • "name": "Жилой комплекс Березовая роща",
  • "address": "г. Москва, ул. Березовая, д. 15",
  • "description": "Строительство жилого комплекса из 3 корпусов",
  • "customer": "ООО Строительная Компания",
  • "designer": "Архитектурное бюро ПРОЕКТ",
  • "start_date": "2024-02-01",
  • "end_date": "2024-12-31",
  • "status": "active",
  • "budget_amount": 15000000.5,
  • "site_area_m2": 2500.75,
  • "contract_number": "Д-2024/001",
  • "cost_category_id": 5
}

Response samples

Content type
application/json
{
  • "id": 25,
  • "name": "Жилой комплекс Березовая роща",
  • "address": "г. Москва, ул. Березовая, д. 15",
  • "description": "Строительство жилого комплекса из 3 корпусов",
  • "customer": "ООО Строительная Компания",
  • "designer": "Архитектурное бюро ПРОЕКТ",
  • "budget_amount": 15000000.5,
  • "site_area_m2": 2500.75,
  • "contract_number": "Д-2024/001",
  • "status": "active",
  • "start_date": "2024-02-01",
  • "end_date": "2024-12-31",
  • "is_archived": false,
  • "additional_info": {
    },
  • "external_code": "PRJ-2024-001",
  • "cost_category_id": 5,
  • "accounting_data": {
    },
  • "use_in_accounting_reports": true,
  • "organization_id": 10,
  • "created_at": "2024-01-15T10:30:00.000000Z",
  • "updated_at": "2024-01-20T14:45:00.000000Z",
  • "assigned_users": [
    ],
  • "assigned_users_count": 3
}

Получить данные конкретного проекта

Возвращает детальную информацию о конкретном проекте в рамках текущей организации. Проверяет принадлежность проекта текущей организации. Подгружает связанные данные: users, costCategory.

Обрабатывается: ProjectController::show Метод сервиса: ProjectService::findProjectByIdForCurrentOrg Требует прав: admin.projects.view

Authorizations:
bearerAuth
path Parameters
id
required
integer >= 1
Example: 25

Уникальный идентификатор проекта

Responses

Response samples

Content type
application/json
{
  • "id": 25,
  • "name": "Жилой комплекс Березовая роща",
  • "address": "г. Москва, ул. Березовая, д. 15",
  • "description": "Строительство жилого комплекса из 3 корпусов",
  • "customer": "ООО Строительная Компания",
  • "designer": "Архитектурное бюро ПРОЕКТ",
  • "budget_amount": 15000000.5,
  • "site_area_m2": 2500.75,
  • "contract_number": "Д-2024/001",
  • "status": "active",
  • "start_date": "2024-02-01",
  • "end_date": "2024-12-31",
  • "is_archived": false,
  • "additional_info": {
    },
  • "external_code": "PRJ-2024-001",
  • "cost_category_id": 5,
  • "accounting_data": {
    },
  • "use_in_accounting_reports": true,
  • "organization_id": 10,
  • "created_at": "2024-01-15T10:30:00.000000Z",
  • "updated_at": "2024-01-20T14:45:00.000000Z",
  • "assigned_users": [
    ],
  • "assigned_users_count": 3
}

Обновить проект

path Parameters
id
required
integer
Request Body schema: application/json
name
required
string <= 255 characters

Название проекта

address
string or null <= 1000 characters

Адрес проекта

description
string or null <= 2000 characters

Описание проекта

customer
string or null <= 255 characters

Заказчик проекта

designer
string or null <= 255 characters

Проектировщик

start_date
string or null <date>

Дата начала проекта

end_date
string or null <date>

Дата окончания проекта (должна быть >= start_date)

status
required
string
Enum: "active" "completed" "paused" "cancelled"

Статус проекта

is_archived
boolean
Default: false

Архивный ли проект

additional_info
object or null

Дополнительная информация в формате JSON

external_code
string or null <= 100 characters

Внешний код проекта для интеграции с бухгалтерскими системами

cost_category_id
integer or null

ID категории затрат (должна существовать в cost_categories)

accounting_data
object or null

Бухгалтерские данные в формате JSON

use_in_accounting_reports
boolean or null
Default: false

Использовать в бухгалтерских отчетах

budget_amount
number or null <decimal> >= 0

Бюджет проекта

site_area_m2
number or null <decimal> >= 0

Площадь участка в кв.м

contract_number
string or null <= 100 characters

Номер договора

Responses

Request samples

Content type
application/json
{
  • "name": "Жилой комплекс Березовая роща",
  • "address": "г. Москва, ул. Березовая, д. 15",
  • "description": "Строительство жилого комплекса из 3 корпусов",
  • "customer": "ООО Строительная Компания",
  • "designer": "Архитектурное бюро ПРОЕКТ",
  • "start_date": "2024-02-01",
  • "end_date": "2024-12-31",
  • "status": "active",
  • "is_archived": false,
  • "additional_info": {
    },
  • "external_code": "PRJ-2024-001",
  • "cost_category_id": 5,
  • "accounting_data": {
    },
  • "use_in_accounting_reports": true,
  • "budget_amount": 15000000.5,
  • "site_area_m2": 2500.75,
  • "contract_number": "Д-2024/001"
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "success": true,
  • "message": "string"
}

Удалить проект

path Parameters
id
required
integer

Responses

Получить доступные категории затрат для проектов

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": [
    ]
}

Получить статистику проекта

path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": {
    }
}

Получить материалы проекта

path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": [
    ]
}

Получить виды работ проекта

path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": [
    ]
}

Назначить прораба на проект

path Parameters
projectId
required
integer
userId
required
integer

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": { }
}

Открепить прораба от проекта

path Parameters
projectId
required
integer
userId
required
integer

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": { }
}

Получить организации проекта

path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": [
    ]
}

Получить полную сводку по проекту (финансы, статистика, организация)

path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": {
    }
}

Получить организации, доступные для добавления в проект

path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": [
    ]
}

Получить детализированные работы дочерних организаций проекта

Возвращает постраничный список выполненных работ, принадлежащих дочерним организациям, привязанным к проекту. Доступно только пользователям головной организации с разрешением projects.view_child_works.

path Parameters
id
required
integer

ID проекта

query Parameters
integer or Array of integers

Фильтр по дочерним организациям (один ID или несколько)

integer or Array of integers

Фильтр по видам работ

string or Array of strings

Фильтр по статусу работы

date_from
string <date>

Дата начала (YYYY-MM-DD)

date_to
string <date>

Дата окончания (YYYY-MM-DD)

search
string

Поиск по заметкам

per_page
integer
Default: 50

Размер страницы

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": [
    ],
  • "meta": {
    }
}

Добавить организацию к проекту

path Parameters
projectId
required
integer
organizationId
required
integer

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": { }
}

Удалить организацию из проекта

path Parameters
projectId
required
integer
organizationId
required
integer

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": { }
}

CompletedWorks

Получить список выполненных работ с расширенной фильтрацией

Возвращает пагинированный список выполненных работ организации с возможностью фильтрации по множественным критериям. Включает связанные данные: проект, контракт с подрядчиком, вид работ, пользователя и материалы.

query Parameters
project_id
integer
Example: project_id=5

Фильтр по ID проекта

contract_id
integer
Example: contract_id=12

Фильтр по ID контракта

work_type_id
integer
Example: work_type_id=8

Фильтр по ID вида работ

user_id
integer
Example: user_id=15

Фильтр по ID прораба/исполнителя

contractor_id
integer
Example: contractor_id=3

Фильтр по ID подрядчика

status
string
Enum: "draft" "confirmed" "cancelled"
Example: status=confirmed

Фильтр по статусу работы

completion_date_from
string <date>
Example: completion_date_from=2024-01-01

Дата выполнения от (включительно)

completion_date_to
string <date>
Example: completion_date_to=2024-12-31

Дата выполнения до (включительно)

amount_from
number <float>
Example: amount_from=1000

Минимальная сумма работы

amount_to
number <float>
Example: amount_to=50000

Максимальная сумма работы

quantity_from
number <float>
Example: quantity_from=10

Минимальное количество

quantity_to
number <float>
Example: quantity_to=1000

Максимальное количество

with_materials
boolean
Example: with_materials=true

Показать только работы с материалами

search
string
Example: search=бетонные работы

Поиск по описанию/комментарию

sortBy
string
Default: "completion_date"
Example: sortBy=total_amount

Поле для сортировки

sortDirection
string
Default: "desc"
Enum: "asc" "desc"
Example: sortDirection=desc

Направление сортировки

perPage
integer [ 1 .. 100 ]
Default: 15
Example: perPage=25

Количество записей на страницу

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Список выполненных работ получен успешно.",
  • "data": [ ],
  • "meta": {
    }
}

Создать новую запись о выполненной работе

Создает новую запись о выполненной работе с автоматическим расчетом стоимости и применением коэффициентов. Поддерживает валидацию контрактов, проверку лимитов и синхронизацию материалов.

Request Body schema: application/json
project_id
required
integer

ID проекта, к которому относится работа. Проверяется через ProjectAccessibleRule.

contract_id
integer or null

ID договора для данной работы (опционально, проверяется принадлежность проекту).

contractor_id
integer or null

ID подрядчика, выполнившего работу (опционально).

work_type_id
required
integer

ID вида работы из каталога организации.

user_id
required
integer

ID пользователя (прораба), зафиксировавшего выполненную работу.

quantity
required
number <float> >= 0.001

Количество выполненной работы (обязательно, мин 0.001).

price
number or null <float> >= 0

Цена за единицу работы (опционально, автоматически рассчитывается из total_amount).

total_amount
number or null <float> >= 0

Общая стоимость работы (опционально, автоматически рассчитывается из price * quantity или материалов).

completion_date
required
string <date>

Дата выполнения работы (формат YYYY-MM-DD).

notes
string or null <= 65535 characters

Комментарии или примечания к работе (максимум 65535 символов).

status
required
string
Enum: "draft" "confirmed" "cancelled"

Статус выполненной работы.

additional_info
object or null

Дополнительная информация в формате JSON.

Array of objects or null

Список материалов, использованных в работе (опционально).

Responses

Request samples

Content type
application/json
Example
{
  • "project_id": 1,
  • "work_type_id": 5,
  • "user_id": 12,
  • "quantity": 150.5,
  • "price": 500.25,
  • "completion_date": "2024-02-15",
  • "status": "confirmed",
  • "notes": "Работы выполнены качественно"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Запись о выполненной работе успешно создана.",
  • "data": {
    }
}

Получить детальную информацию о выполненной работе

Возвращает полную информацию о выполненной работе включая связанные данные: проект, контракт, вид работ, исполнителя, подрядчика, материалы и прикрепленные файлы.

path Parameters
id
required
integer
Example: 123

ID выполненной работы

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Выполненная работа найдена успешно.",
  • "data": {
    }
}

Обновить данные выполненной работы

Обновляет выполненную работу с автоматическим пересчетом стоимости и применением коэффициентов. Поддерживает частичное обновление полей и валидацию изменений контрактов.

path Parameters
id
required
integer
Example: 123

ID выполненной работы для обновления

Request Body schema: application/json
project_id
integer

ID проекта, к которому относится работа. Проверяется через ProjectAccessibleRule.

contract_id
integer or null

ID договора для данной работы (опционально, проверяется принадлежность проекту).

contractor_id
integer or null

ID подрядчика, выполнившего работу (опционально).

work_type_id
integer

ID вида работы из каталога организации.

user_id
integer

ID пользователя (прораба), зафиксировавшего выполненную работу.

quantity
number <float> >= 0.001

Количество выполненной работы (мин 0.001).

price
number or null <float> >= 0

Цена за единицу работы (опционально, автоматически рассчитывается).

total_amount
number or null <float> >= 0

Общая стоимость работы (опционально, автоматически рассчитывается).

completion_date
string <date>

Дата выполнения работы (формат YYYY-MM-DD).

notes
string or null <= 65535 characters

Комментарии или примечания к работе (максимум 65535 символов).

status
string
Enum: "draft" "confirmed" "cancelled"

Статус выполненной работы.

additional_info
object or null

Дополнительная информация в формате JSON.

Array of objects or null

Список материалов, использованных в работе (при указании заменяет существующий список).

Responses

Request samples

Content type
application/json
Example
{
  • "quantity": 200.75,
  • "total_amount": 95456.25,
  • "notes": "Обновлены объемы работ"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Запись о выполненной работе успешно обновлена.",
  • "data": {
    }
}

Удалить выполненную работу

Удаляет запись о выполненной работе со всеми связанными материалами. Операция необратима и доступна только владельцу организации.

path Parameters
id
required
integer
Example: 123

ID выполненной работы для удаления

Responses

Response samples

Content type
application/json
{
  • "success": false,
  • "message": "Не удалось удалить запись о выполненной работе."
}

Синхронизировать материалы выполненной работы

Полностью заменяет список материалов выполненной работы новым списком. Старые связи с материалами удаляются, создаются новые согласно переданному списку.

path Parameters
id
required
integer
Example: 123

ID выполненной работы

Request Body schema: application/json
required
Array of objects

Список материалов для синхронизации (заменяет существующий список материалов).

Responses

Request samples

Content type
application/json
{
  • "materials": [
    ]
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Материалы выполненной работы успешно синхронизированы.",
  • "data": {
    }
}

Получить материалы по умолчанию для вида работ

Возвращает список материалов с нормами расхода, предустановленными для конкретного вида работ. Используется для автозаполнения материалов при создании выполненной работы.

query Parameters
work_type_id
required
integer
Example: work_type_id=15

ID вида работы из каталога организации

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

RateCoefficients

Получить список коэффициентов расценок организации

Возвращает пагинированный список коэффициентов расценок с возможностью детальной фильтрации. Коэффициенты используются для автоматического расчёта стоимости работ, материалов и трудозатрат.

query Parameters
name
string
Example: name=Зимний

Фильтр по названию коэффициента (частичное совпадение)

code
string
Example: code=WINTER

Фильтр по коду коэффициента (частичное совпадение)

type
string
Enum: "percentage" "fixed_addition"
Example: type=percentage

Фильтр по типу коэффициента

applies_to
string
Enum: "material_norms" "work_costs" "labor_hours" "general"
Example: applies_to=work_costs

Фильтр по назначению коэффициента

scope
string
Enum: "global_org" "project" "work_type_category" "work_type" "material_category" "material"
Example: scope=global_org

Фильтр по области применения коэффициента

is_active
boolean
Example: is_active=true

Фильтр по активности коэффициента

sort_by
string
Default: "created_at"
Example: sort_by=name

Поле для сортировки (name, code, value, type, applies_to, scope, is_active, valid_from, valid_to, created_at, updated_at)

sort_direction
string
Default: "desc"
Enum: "asc" "desc"
Example: sort_direction=asc

Направление сортировки

per_page
integer [ 1 .. 100 ]
Default: 15
Example: per_page=25

Количество записей на страницу

Responses

Response samples

Content type
application/json
{
  • "data": [ ],
  • "meta": {
    }
}

Создать новый коэффициент расценок

Создает новый коэффициент расценок для организации с валидацией уникальности кода. Коэффициент может быть процентным или фиксированной надбавкой.

Request Body schema: application/json
name
required
string <= 255 characters

Название коэффициента (обязательно, максимум 255 символов).

code
string or null <= 100 characters

Уникальный код коэффициента в рамках организации (максимум 100 символов).

value
required
number <float> >= 0

Значение коэффициента (минимум 0, до 4 знаков после запятой).

type
required
string
Enum: "percentage" "fixed_addition"

Тип коэффициента.

applies_to
required
string
Enum: "material_norms" "work_costs" "labor_hours" "general"

К чему применяется коэффициент.

scope
required
string
Enum: "global_org" "project" "work_type_category" "work_type" "material_category" "material"

Область применения коэффициента.

description
string or null <= 2000 characters

Описание коэффициента (максимум 2000 символов).

is_active
boolean
Default: true

Активность коэффициента (по умолчанию true).

valid_from
string or null <date>

Дата начала действия коэффициента (формат YYYY-MM-DD).

valid_to
string or null <date>

Дата окончания действия коэффициента (должна быть после или равна valid_from).

conditions
object or null

Дополнительные условия применения коэффициента в формате JSON.

Responses

Request samples

Content type
application/json
Example
{
  • "name": "Зимний коэффициент",
  • "code": "WINTER_2024",
  • "value": 15.5,
  • "type": "percentage",
  • "applies_to": "work_costs",
  • "scope": "global_org",
  • "description": "Надбавка за работы в зимний период",
  • "valid_from": "2024-12-01",
  • "valid_to": "2025-03-31"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Коэффициент создан успешно.",
  • "data": {
    }
}

Получить детальную информацию о коэффициенте

Возвращает полную информацию о коэффициенте расценок включая условия применения.

path Parameters
id
required
integer
Example: 15

ID коэффициента

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Коэффициент найден успешно.",
  • "data": {
    }
}

Обновить коэффициент расценок

Обновляет коэффициент расценок с проверкой уникальности кода и валидацией полей. Поддерживает частичное обновление полей.

path Parameters
id
required
integer
Example: 15

ID коэффициента для обновления

Request Body schema: application/json
name
string <= 255 characters

Название коэффициента (максимум 255 символов).

code
string or null <= 100 characters

Уникальный код коэффициента в рамках организации (максимум 100 символов).

value
number <float> >= 0

Значение коэффициента (минимум 0, до 4 знаков после запятой).

type
string
Enum: "percentage" "fixed_addition"

Тип коэффициента.

applies_to
string
Enum: "material_norms" "work_costs" "labor_hours" "general"

К чему применяется коэффициент.

scope
string
Enum: "global_org" "project" "work_type_category" "work_type" "material_category" "material"

Область применения коэффициента.

description
string or null <= 2000 characters

Описание коэффициента (максимум 2000 символов).

is_active
boolean

Активность коэффициента.

valid_from
string or null <date>

Дата начала действия коэффициента (формат YYYY-MM-DD).

valid_to
string or null <date>

Дата окончания действия коэффициента (должна быть после или равна valid_from).

conditions
object or null

Дополнительные условия применения коэффициента в формате JSON.

Responses

Request samples

Content type
application/json
Example
{
  • "value": 18.75,
  • "description": "Обновленная надбавка за зимний период"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Коэффициент обновлен успешно.",
  • "data": {
    }
}

Удалить коэффициент расценок

Удаляет коэффициент расценок. Операция необратима. Проверяется принадлежность коэффициента организации.

path Parameters
id
required
integer
Example: 15

ID коэффициента для удаления

Responses

Response samples

Content type
application/json
{
  • "success": false,
  • "message": "Коэффициент не найден или у вас нет прав на его удаление."
}

Contractors

Получить список подрядчиков организации

Возвращает пагинированный список подрядчиков организации с возможностью фильтрации и сортировки. Включает как созданных вручную, так и приглашенных подрядчиков из других организаций.

query Parameters
name
string
Example: name=Строймонтаж

Фильтр по наименованию подрядчика (частичное совпадение)

inn
string
Example: inn=7707083893

Фильтр по ИНН подрядчика (точное совпадение)

sort_by
string
Default: "name"
Example: sort_by=name

Поле для сортировки

sort_direction
string
Default: "asc"
Enum: "asc" "desc"
Example: sort_direction=asc

Направление сортировки

per_page
integer [ 1 .. 100 ]
Default: 15
Example: per_page=25

Количество записей на страницу

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Список подрядчиков получен успешно.",
  • "data": [ ],
  • "meta": {
    }
}

Создать нового подрядчика

Создает нового подрядчика в каталоге организации. Проверяет уникальность ИНН и email в рамках организации. Автоматически устанавливает тип "manual" для ручно созданных подрядчиков.

Request Body schema: application/json
name
required
string <= 255 characters

Наименование подрядчика (обязательно, максимум 255 символов).

contact_person
string or null <= 255 characters

Контактное лицо подрядчика (максимум 255 символов).

phone
string or null <= 50 characters

Телефон подрядчика (максимум 50 символов).

email
string or null <email> <= 255 characters

Email подрядчика для связи.

legal_address
string or null <= 1000 characters

Юридический адрес подрядчика (максимум 1000 символов).

inn
string or null <= 12 characters ^[0-9]{10,12}$

ИНН подрядчика (максимум 12 символов, валидация формата).

kpp
string or null <= 9 characters ^[0-9]{9}$

КПП подрядчика (максимум 9 символов, валидация формата).

bank_details
string or null

Банковские реквизиты подрядчика.

notes
string or null

Дополнительные примечания о подрядчике.

Responses

Request samples

Content type
application/json
Example
{
  • "name": "ООО Строймонтаж",
  • "contact_person": "Иванов Иван Иванович",
  • "phone": "+7 (495) 123-45-67",
  • "email": "contact@stroymont.ru",
  • "inn": "7707083893",
  • "kpp": "770701001"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Подрядчик создан успешно.",
  • "data": {
    }
}

Получить детальную информацию о подрядчике

Возвращает полную информацию о подрядчике включая настройки синхронизации для приглашенных организаций.

path Parameters
id
required
integer
Example: 8

ID подрядчика

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Подрядчик найден успешно.",
  • "data": {
    }
}

Обновить данные подрядчика

Обновляет информацию о подрядчике с проверкой уникальности ИНН и email. Поддерживает частичное обновление полей.

path Parameters
id
required
integer
Example: 8

ID подрядчика для обновления

Request Body schema: application/json
name
string <= 255 characters

Наименование подрядчика (максимум 255 символов).

contact_person
string or null <= 255 characters

Контактное лицо подрядчика (максимум 255 символов).

phone
string or null <= 50 characters

Телефон подрядчика (максимум 50 символов).

email
string or null <email> <= 255 characters

Email подрядчика для связи.

legal_address
string or null <= 1000 characters

Юридический адрес подрядчика (максимум 1000 символов).

inn
string or null <= 12 characters ^[0-9]{10,12}$

ИНН подрядчика (максимум 12 символов, валидация формата).

kpp
string or null <= 9 characters ^[0-9]{9}$

КПП подрядчика (максимум 9 символов, валидация формата).

bank_details
string or null

Банковские реквизиты подрядчика.

notes
string or null

Дополнительные примечания о подрядчике.

Responses

Request samples

Content type
application/json
Example
{
  • "phone": "+7 (495) 987-65-43",
  • "email": "new-contact@stroymont.ru"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Подрядчик обновлен успешно.",
  • "data": {
    }
}

Удалить подрядчика

Удаляет подрядчика из каталога организации. Операция необратима. Перед удалением проверяется наличие связанных контрактов.

path Parameters
id
required
integer
Example: 8

ID подрядчика для удаления

Responses

Response samples

Content type
application/json
{
  • "message": "Не определён контекст организации",
  • "error": "Failed to delete contractor"
}

AdvanceSettings

Получить текущие настройки подотчетных средств организации

Возвращает настройки подотчетных средств для текущей организации. Если настройки еще не созданы, возвращает значения по умолчанию.

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Создать или обновить настройки подотчетных средств

Создает новые или обновляет существующие настройки подотчетных средств для текущей организации. Поддерживает частичное обновление полей.

Request Body schema: application/json
max_single_issue_amount
number or null <decimal> [ 0 .. 999999999.99 ]

Максимальная сумма одной транзакции на выдачу

report_submission_deadline_days
integer or null [ 0 .. 365 ]

Срок предоставления отчета (дни)

dual_authorization_threshold
number or null <decimal> [ 0 .. 999999999.99 ]

Порог двойной авторизации

require_project_for_expense
boolean

Требовать проект для расходов

notify_admin_on_overdue_report
boolean

Уведомлять администратора о просроченных отчетах

notify_admin_on_high_value_transaction
boolean

Уведомлять администратора о крупных транзакциях

high_value_notification_threshold
number or null <decimal> [ 0 .. 999999999.99 ]

Порог для уведомления о крупной транзакции (обязательно если notify_admin_on_high_value_transaction = true)

notify_user_on_transaction_approval
boolean

Уведомлять пользователя об утверждении транзакции

notify_user_on_transaction_rejection
boolean

Уведомлять пользователя об отклонении транзакции

send_report_reminder_days_before
integer or null [ 0 .. 90 ]

Отправлять напоминание об отчете за (дни)

Responses

Request samples

Content type
application/json
Example
{
  • "max_single_issue_amount": 50000,
  • "report_submission_deadline_days": 7,
  • "dual_authorization_threshold": 100000,
  • "require_project_for_expense": true,
  • "notify_admin_on_overdue_report": true,
  • "notify_admin_on_high_value_transaction": true,
  • "high_value_notification_threshold": 50000,
  • "notify_user_on_transaction_approval": true,
  • "notify_user_on_transaction_rejection": true,
  • "send_report_reminder_days_before": 2
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Advance account settings updated successfully.",
  • "data": {
    }
}

AdvanceTransactions

Получить список транзакций подотчетных средств

Возвращает пагинированный список транзакций подотчетных средств организации с возможностью детальной фильтрации по пользователю, проекту, типу, статусу и периоду.

query Parameters
user_id
integer
Example: user_id=25

Фильтр по ID пользователя

project_id
integer
Example: project_id=8

Фильтр по ID проекта

type
string
Enum: "issue" "expense" "return"
Example: type=issue

Фильтр по типу транзакции

reporting_status
string
Enum: "pending" "reported" "approved"
Example: reporting_status=pending

Фильтр по статусу отчетности

date_from
string <date>
Example: date_from=2024-12-01

Начало периода фильтрации

date_to
string <date>
Example: date_to=2024-12-31

Конец периода фильтрации

per_page
integer [ 1 .. 100 ]
Default: 15
Example: per_page=25

Количество записей на страницу

Responses

Response samples

Content type
application/json
{}

Создать новую транзакцию подотчетных средств

Создает новую транзакцию подотчетных средств с автоматическим пересчетом баланса пользователя. Проверяет настройки организации и лимиты.

Request Body schema: application/json
user_id
required
integer

ID пользователя (прораба) для транзакции

project_id
integer or null

ID проекта (опционально)

type
required
string
Enum: "issue" "expense" "return"

Тип транзакции:

  • issue - выдача средств
  • expense - списание средств (расход)
  • return - возврат неиспользованных средств
amount
required
number <decimal> >= 0.01

Сумма транзакции

description
string or null <= 255 characters

Описание/назначение транзакции

document_number
string or null <= 100 characters

Номер документа

document_date
string or null <date>

Дата документа

Responses

Request samples

Content type
application/json
Example
{
  • "user_id": 25,
  • "project_id": 8,
  • "type": "issue",
  • "amount": 15000,
  • "description": "Закупка материалов для строительства",
  • "document_number": "АВ-001234",
  • "document_date": "2024-12-20"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Transaction created successfully",
  • "data": {
    }
}

Получить список пользователей, доступных для транзакций

Возвращает список пользователей (прорабов, руководителей участков, менеджеров проектов) организации, которым можно выдавать подотчетные средства.

query Parameters
search
string
Example: search=Иванов

Поиск по имени или должности

Responses

Response samples

Content type
application/json
{}

Получить список проектов, доступных для транзакций

Возвращает список активных проектов организации. Если указан user_id, возвращает только проекты, назначенные этому пользователю.

query Parameters
user_id
integer
Example: user_id=25

ID пользователя для фильтрации проектов

search
string
Example: search=Солнечный

Поиск по названию, адресу или внешнему коду

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Получить детальную информацию о транзакции

Возвращает полную информацию о транзакции включая связанные данные о пользователе, проекте, создателе и утверждающем.

path Parameters
transaction
required
integer
Example: 125

ID транзакции

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Обновить транзакцию подотчетных средств

Обновляет транзакцию подотчетных средств. Ключевые поля (сумма, тип, пользователь) можно изменять только для транзакций со статусом "pending".

path Parameters
transaction
required
integer
Example: 125

ID транзакции для обновления

Request Body schema: application/json
description
string or null <= 255 characters

Описание/назначение транзакции

document_number
string or null <= 100 characters

Номер документа

document_date
string or null <date>

Дата документа

external_code
string or null <= 100 characters

Внешний код для интеграции с бухгалтерией

accounting_data
object or null

Дополнительные данные для бухгалтерской интеграции

Responses

Request samples

Content type
application/json
Example
{
  • "description": "Обновленное описание закупки материалов",
  • "document_number": "АВ-001234-UPD"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Transaction updated successfully",
  • "data": {
    }
}

Удалить транзакцию подотчетных средств

Удаляет транзакцию подотчетных средств с восстановлением предыдущего баланса. Можно удалять только транзакции со статусом "pending".

path Parameters
transaction
required
integer
Example: 125

ID транзакции для удаления

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Transaction deleted successfully"
}

Отметить транзакцию как отчитанную

Создает отчет по транзакции подотчетных средств с возможностью прикрепления файлов. Изменяет статус на "reported".

path Parameters
transaction
required
integer
Example: 125

ID транзакции для отчета

Request Body schema: multipart/form-data
description
required
string <= 255 characters

Описание отчета по транзакции

document_number
required
string <= 100 characters

Номер отчетного документа

document_date
required
string <date>

Дата отчетного документа

files
Array of strings or null <binary>

Прикрепляемые файлы к отчету (максимум 10MB на файл)

Responses

Request samples

Content type
multipart/form-data
{
  "description": "Отчет о закупке строительных материалов",
  "document_number": "ОТЧ-001234",
  "document_date": "2024-12-20",
  "files": [
    "receipt1.pdf",
    "receipt2.jpg"
  ]
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Transaction reported successfully",
  • "data": {
    }
}

Утвердить отчет по транзакции

Утверждает отчет по транзакции подотчетных средств. Возможно только для транзакций со статусом "reported".

path Parameters
transaction
required
integer
Example: 125

ID транзакции для утверждения

Request Body schema: application/json
accounting_data
object or null

Дополнительные данные для бухгалтерской обработки

Responses

Request samples

Content type
application/json
{
  • "accounting_data": {
    }
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Transaction approved successfully",
  • "data": {
    }
}

Прикрепить файлы к транзакции

Прикрепляет дополнительные файлы к транзакции подотчетных средств. Нельзя добавлять файлы к утвержденным транзакциям.

path Parameters
transaction
required
integer
Example: 125

ID транзакции

Request Body schema: multipart/form-data
files
required
Array of strings <binary>

Массив файлов для прикрепления (максимум 10MB на файл)

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Files attached successfully",
  • "data": {
    }
}

Открепить файл от транзакции

Открепляет файл от транзакции подотчетных средств. Нельзя удалять файлы из утвержденных транзакций.

path Parameters
transaction
required
integer
Example: 125

ID транзакции

fileId
required
integer
Example: 16

ID файла для открепления

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "File detached successfully",
  • "data": {
    }
}

WorkTypes

Получить список видов работ организации

Возвращает пагинированный список видов работ с возможностью детальной фильтрации и сортировки. Включает связанную единицу измерения.

query Parameters
name
string
Example: name=Кладка

Фильтр по названию (частичное совпадение)

category
string
Example: category=Каменные работы

Фильтр по категории

is_active
boolean
Example: is_active=true

Фильтр по активности

sort_by
string
Default: "name"
Enum: "name" "category" "created_at" "updated_at"
Example: sort_by=name

Поле для сортировки

sort_direction
string
Default: "asc"
Enum: "asc" "desc"
Example: sort_direction=asc

Направление сортировки

per_page
integer [ 1 .. 100 ]
Default: 15
Example: per_page=25

Количество записей на страницу

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Создать новый вид работ

Создает новый вид работ для организации с проверкой уникальности названия и валидацией всех полей.

Request Body schema: application/json
name
required
string <= 255 characters

Название вида работ (уникальное в рамках организации)

measurement_unit_id
required
integer >= 1

ID единицы измерения (должна существовать в measurement_units)

category
string or null <= 100 characters

Категория вида работ

is_active
boolean
Default: true

Активен ли вид работ

code
string or null <= 100 characters

Внутренний код вида работ

description
string or null

Описание вида работ

default_price
number or null <decimal> >= 0

Цена по умолчанию за единицу работ (не может быть отрицательной)

additional_properties
object or null

Дополнительные свойства в формате JSON

Responses

Request samples

Content type
application/json
Example
{
  • "name": "Кладка кирпичных стен",
  • "measurement_unit_id": 3,
  • "category": "Каменные работы",
  • "description": "Кладка несущих стен из керамического кирпича",
  • "default_price": 1250
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Work Type created successfully (raw response)",
  • "data": {
    }
}

Получить детальную информацию о виде работ

Возвращает полную информацию о виде работ включая связанную единицу измерения. Проверяет принадлежность к организации.

path Parameters
id
required
integer
Example: 25

ID вида работ

Responses

Response samples

Content type
application/json
{
  • "id": 25,
  • "name": "Кладка кирпичных стен",
  • "code": "KLAD-001",
  • "category": "Каменные работы",
  • "description": "Кладка несущих стен из керамического кирпича",
  • "default_price": 1250,
  • "is_active": true,
  • "measurement_unit": {
    },
  • "additional_properties": {
    },
  • "created_at": "2024-12-20T10:00:00Z",
  • "updated_at": "2024-12-20T15:30:00Z"
}

Обновить вид работ

Обновляет вид работ с проверкой принадлежности к организации и валидацией уникальности названия (игнорируя текущую запись).

path Parameters
id
required
integer
Example: 25

ID вида работ для обновления

Request Body schema: application/json
name
string <= 255 characters

Название вида работ (уникальное в рамках организации, игнорирует текущую запись)

measurement_unit_id
integer >= 1

ID единицы измерения (должна существовать)

category
string or null <= 100 characters

Категория вида работ

is_active
boolean

Активен ли вид работ

code
string or null <= 100 characters

Внутренний код вида работ

description
string or null

Описание вида работ

default_price
number or null <decimal> >= 0

Цена по умолчанию за единицу работ

additional_properties
object or null

Дополнительные свойства в формате JSON

Responses

Request samples

Content type
application/json
Example
{
  • "default_price": 1350,
  • "description": "Обновленное описание кладки стен"
}

Response samples

Content type
application/json
{
  • "id": 25,
  • "name": "Кладка кирпичных стен усиленная",
  • "default_price": 1450,
  • "description": "Кладка несущих стен с армированием"
}

Удалить вид работ

Удаляет вид работ (soft delete) с проверкой принадлежности к организации. Проверяет возможность удаления (не используется в других записях).

path Parameters
id
required
integer
Example: 25

ID вида работ для удаления

Responses

Response samples

Content type
application/json
{
  • "success": false,
  • "message": "Вид работы не найден или не принадлежит вашей организации."
}

WorkTypeMaterials

Получить материалы, привязанные к виду работ

Возвращает список материалов с нормами расхода для указанного вида работ. Включает информацию о количестве по умолчанию и примечания.

path Parameters
work_type
required
integer
Example: 25

ID вида работ

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Синхронизировать материалы для вида работ

Полностью синхронизирует список материалов с нормами расхода для вида работ. Старые связи будут удалены, новые добавлены, существующие обновлены.

path Parameters
work_type
required
integer
Example: 25

ID вида работ

Request Body schema: application/json
required
Array of objects non-empty

Массив материалов с нормами расхода

Responses

Request samples

Content type
application/json
{
  • "materials": [
    ]
}

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Отвязать материал от вида работ

Удаляет связь между видом работ и материалом. Проверяет принадлежность обеих сущностей к организации.

path Parameters
work_type
required
integer
Example: 25

ID вида работ

material_id
required
integer
Example: 45

ID материала для отвязки

Responses

Response samples

Content type
application/json
{
  • "success": false,
  • "message": "Не удалось отвязать материал от вида работ"
}

Получить предложенные материалы для объема работ

Рассчитывает количество материалов на основе норм расхода для заданного объема выполняемых работ.

path Parameters
work_type
required
integer
Example: 25

ID вида работ

query Parameters
quantity
required
number <decimal> >= 0.0001
Example: quantity=5

Объем выполняемых работ (в единицах измерения вида работ)

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

ActReports

Получить список актов выполненных работ

Возвращает пагинированный список актов организации с возможностью детальной фильтрации и сортировки. Включает статистику по актам.

query Parameters
contract_id
integer
Example: contract_id=25

Фильтр по ID контракта

project_id
integer
Example: project_id=12

Фильтр по ID проекта

contractor_id
integer
Example: contractor_id=8

Фильтр по ID подрядчика

is_approved
boolean
Example: is_approved=true

Фильтр по статусу утверждения

date_from
string <date>
Example: date_from=2024-12-01

Фильтр по дате акта (от)

date_to
string <date>
Example: date_to=2024-12-31

Фильтр по дате акта (до)

search
string
Example: search=АКТ-2024

Поиск по номеру акта, описанию или номеру контракта

sort_by
string
Default: "act_date"
Example: sort_by=act_date

Поле для сортировки

sort_direction
string
Default: "desc"
Enum: "asc" "desc"
Example: sort_direction=desc

Направление сортировки

per_page
integer [ 1 .. 100 ]
Default: 15
Example: per_page=15

Количество записей на страницу

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Акты получены успешно"
}

Создать новый акт выполненных работ

Создает новый акт с возможностью включения выполненных работ. Автоматически рассчитывает сумму акта на основе включенных работ.

Request Body schema: application/json
contract_id
required
integer

ID контракта (должен принадлежать организации и быть активным)

act_document_number
required
string <= 255 characters

Номер документа акта

act_date
required
string <date>

Дата акта

description
string or null

Описание акта

work_ids
Array of integers or null

Массив ID выполненных работ для включения в акт

Responses

Request samples

Content type
application/json
Example
{
  • "contract_id": 25,
  • "act_document_number": "АКТ-2024-001",
  • "act_date": "2024-12-20",
  • "description": "Акт выполненных работ по кладке стен 1 этажа",
  • "work_ids": [
    ]
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Акт создан успешно"
}

Получить список контрактов для создания актов

Возвращает список активных контрактов организации, доступных для создания актов выполненных работ.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "message": "Контракты получены успешно"
}

Массовый экспорт актов в Excel

Экспортирует выбранные акты в один Excel файл с детальной информацией по всем работам и материалам.

Request Body schema: application/json
act_ids
required
Array of integers non-empty

Массив ID актов для экспорта

Responses

Request samples

Content type
application/json
{
  • "act_ids": [
    ]
}

Response samples

Content type
application/json
{
  • "error": "Не выбраны акты для экспорта"
}

Получить детальную информацию об акте

Возвращает полную информацию об акте, включая связанный контракт, проект, подрядчика и все включенные выполненные работы.

path Parameters
act
required
integer
Example: 15

ID акта

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Акт получен успешно"
}

Обновить основную информацию акта

Обновляет основную информацию акта: номер документа, дату, описание и статус утверждения. Состав работ обновляется отдельным эндпоинтом.

path Parameters
act
required
integer
Example: 15

ID акта для обновления

Request Body schema: application/json
act_document_number
string <= 255 characters

Номер документа акта

act_date
string <date>

Дата акта

description
string or null

Описание акта

is_approved
boolean

Статус утверждения акта

Responses

Request samples

Content type
application/json
Example
{
  • "is_approved": true
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Акт обновлен успешно"
}

Получить доступные работы для включения в акт

Возвращает список подтвержденных выполненных работ по контракту, которые можно включить в акт. Показывает статус включения в другие акты.

path Parameters
act
required
integer
Example: 15

ID акта

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "message": "Доступные работы получены успешно"
}

Обновить состав работ в акте

Полностью заменяет состав работ в акте и пересчитывает общую сумму. Все ранее включенные работы будут исключены.

path Parameters
act
required
integer
Example: 15

ID акта

Request Body schema: application/json
work_ids
required
Array of integers

Массив ID выполненных работ для включения в акт

Responses

Request samples

Content type
application/json
{
  • "work_ids": [
    ]
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Состав работ акта обновлен успешно"
}

Экспорт акта в PDF

Генерирует PDF файл акта с детальной информацией по всем работам. Файл автоматически сохраняется в S3 и возвращается для скачивания.

path Parameters
act
required
integer
Example: 15

ID акта для экспорта

Responses

Response samples

Content type
application/json
{
  • "error": "Не определена организация пользователя"
}

Скачать сохраненный PDF файл акта

Скачивает ранее сохраненный PDF файл акта из хранилища S3. Проверяет принадлежность файла к акту и организации.

path Parameters
act
required
integer
Example: 15

ID акта

file
required
integer
Example: 456

ID файла

Responses

Response samples

Content type
application/json
Example
{
  • "error": "Доступ запрещен"
}

Экспорт акта в Excel

Генерирует Excel файл акта с детальной информацией по всем работам и материалам. Файл автоматически сохраняется в S3 и возвращается для скачивания.

path Parameters
act
required
integer
Example: 15

ID акта для экспорта

Responses

Response samples

Content type
application/json
{
  • "error": "Не определена организация пользователя"
}

Contracts

Получить список контрактов с расширенной фильтрацией

Возвращает пагинированный список контрактов организации с возможностью фильтрации по множественным критериям. Включает связанные данные: подрядчика, проект, родительский контракт. Поддерживает поиск по подрядчикам (имя, ИНН, КПП, email), проектам, суммам и датам.

query Parameters
contractor_id
integer
Example: contractor_id=3

Фильтр по ID подрядчика

contractor_search
string
Example: contractor_search=ИП Рыкунов

Поиск по подрядчику (имя, ИНН, КПП, email, телефон)

project_id
integer
Example: project_id=5

Фильтр по ID проекта

project_search
string
Example: project_search=Торговый центр

Поиск по проекту (название, адрес, код)

string or Array of strings
Example: status=active

Фильтр по статусу контракта (один или несколько)

string or Array of strings
Example: work_type_category=general_construction

Фильтр по категории работ (один или несколько)

number
string
Example: number=ДПХ-2024

Поиск по номеру контракта

date_from
string <date>
Example: date_from=2024-01-01

Дата заключения от (включительно)

date_to
string <date>
Example: date_to=2024-12-31

Дата заключения до (включительно)

start_date_from
string <date>
Example: start_date_from=2024-01-01

Дата начала работ от

start_date_to
string <date>
Example: start_date_to=2024-12-31

Дата начала работ до

end_date_from
string <date>
Example: end_date_from=2024-01-01

Дата окончания работ от

end_date_to
string <date>
Example: end_date_to=2024-12-31

Дата окончания работ до

completion_from
number <float>
Example: completion_from=50

Процент выполнения от

completion_to
number <float>
Example: completion_to=90

Процент выполнения до

amount_from
number <float>
Example: amount_from=1000000

Сумма контракта от

amount_to
number <float>
Example: amount_to=5000000

Сумма контракта до

gp_percentage_from
number <float>
Example: gp_percentage_from=10

Процент ГП от

gp_percentage_to
number <float>
Example: gp_percentage_to=25

Процент ГП до

has_advance
boolean
Example: has_advance=true

Фильтр по наличию аванса

advance_paid_status
string
Enum: "paid" "partial" "not_paid"
Example: advance_paid_status=partial

Статус выплаты аванса (paid - полностью выплачен, partial - частично, not_paid - не выплачен)

has_parent
boolean

Фильтр по наличию родительского контракта

has_children
boolean
Example: has_children=true

Фильтр по наличию дочерних контрактов

requiring_attention
boolean
Example: requiring_attention=true

Контракты, требующие внимания

is_nearing_limit
boolean
Example: is_nearing_limit=true

Контракты, приближающиеся к лимиту (90%+)

is_overdue
boolean

Просроченные контракты

search
string
Example: search=строительные работы

Поиск по номеру или названию

sort_by
string
Default: "created_at"
Example: sort_by=total_amount

Поле для сортировки

sort_direction
string
Default: "desc"
Enum: "asc" "desc"
Example: sort_direction=desc

Направление сортировки

per_page
integer [ 1 .. 100 ]
Default: 15
Example: per_page=25

Количество записей на страницу

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Список контрактов получен успешно.",
  • "data": [ ],
  • "meta": {
    }
}

Создать новый контракт

Создает новый контракт с валидацией подрядчика, проекта и родительского контракта. Автоматически устанавливает контекст организации.

Request Body schema: application/json
project_id
integer or null

ID проекта, к которому привязан контракт (опционально).

contractor_id
required
integer

ID подрядчика из каталога организации.

parent_contract_id
integer or null

ID родительского контракта (для создания иерархии). Проверяется через ParentContractValid.

number
required
string <= 255 characters

Номер контракта (обязательно, максимум 255 символов).

date
required
string <date>

Дата заключения контракта (формат YYYY-MM-DD).

subject
string or null

Предмет контракта или краткое описание.

work_type_category
string or null
Enum: "smr" "general_construction" "finishing" "installation" "design" "consultation" "supply" "services" "rent" "other"

Категория видов работ по контракту.

payment_terms
string or null

Условия оплаты по контракту.

total_amount
required
number <float> >= 0

Общая сумма контракта (обязательно, минимум 0).

gp_percentage
number or null <float> [ 0 .. 100 ]

Процент генерального подряда (от 0 до 100).

planned_advance_amount
number or null <float> >= 0

Планируемая сумма аванса (минимум 0).

actual_advance_amount
number or null <float> >= 0

Фактически выплаченная сумма аванса (минимум 0).

status
required
string
Enum: "draft" "active" "completed" "terminated" "on_hold"

Статус контракта.

start_date
string or null <date>

Дата начала работ по контракту (формат YYYY-MM-DD).

end_date
string or null <date>

Дата окончания работ по контракту (должна быть после или равна start_date).

notes
string or null

Дополнительные примечания или комментарии к контракту.

Responses

Request samples

Content type
application/json
Example
{
  • "contractor_id": 3,
  • "number": "ДПХ-2024/001",
  • "date": "2024-02-01",
  • "total_amount": 2500000,
  • "status": "active",
  • "start_date": "2024-02-05",
  • "end_date": "2024-08-30"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Контракт создан успешно.",
  • "data": {
    }
}

Получить контракт

path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Контракт создан успешно.",
  • "data": {
    }
}

Обновить контракт

Обновляет данные контракта. Все поля опциональны - можно отправить только те поля, которые нужно изменить. Поля, не указанные в запросе, сохранят свои текущие значения.

path Parameters
id
required
integer
Request Body schema: application/json
project_id
integer or null

ID проекта, к которому привязан контракт.

contractor_id
integer

ID подрядчика из каталога организации.

parent_contract_id
integer or null

ID родительского контракта. Проверяется через ParentContractValid.

number
string <= 255 characters

Номер контракта (максимум 255 символов).

date
string <date>

Дата заключения контракта (формат YYYY-MM-DD).

subject
string or null

Предмет контракта или краткое описание.

work_type_category
string or null
Enum: "smr" "general_construction" "finishing" "installation" "design" "consultation" "supply" "services" "rent" "other"

Категория видов работ по контракту.

payment_terms
string or null

Условия оплаты по контракту.

total_amount
number <float> >= 0

Общая сумма контракта (минимум 0).

gp_percentage
number or null <float> [ 0 .. 100 ]

Процент генерального подряда (от 0 до 100).

planned_advance_amount
number or null <float> >= 0

Планируемая сумма аванса (минимум 0).

actual_advance_amount
number or null <float> >= 0

Фактически выплаченная сумма аванса (минимум 0).

status
string
Enum: "draft" "active" "completed" "terminated" "on_hold"

Статус контракта.

start_date
string or null <date>

Дата начала работ по контракту (формат YYYY-MM-DD).

end_date
string or null <date>

Дата окончания работ по контракту (должна быть после или равна start_date).

notes
string or null

Дополнительные примечания или комментарии к контракту.

Responses

Request samples

Content type
application/json
{
  • "status": "completed",
  • "end_date": "2025-10-12",
  • "notes": "Контракт завершен досрочно"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Контракт создан успешно.",
  • "data": {
    }
}

Удалить контракт

path Parameters
id
required
integer

Responses

Получить детальную аналитику по контракту

Возвращает полную аналитическую информацию по контракту включая: финансовые показатели, статусы, количественные данные, прогресс выполнения.

path Parameters
id
required
integer
Example: 15

ID контракта для получения аналитики

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Получить выполненные работы контракта

path Parameters
id
required
integer
query Parameters
page
integer
per_page
integer

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": [
    ]
}

Получить полную информацию по контракту

path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Контракт создан успешно.",
  • "data": {
    }
}

Dashboard

Получить сводную информацию дашборда

Возвращает общие статистические данные по основным сущностям организации: количество пользователей, проектов, материалов, поставщиков, контрактов и выполненных работ.

query Parameters
organization_id
integer
Example: organization_id=10

ID организации (если не указан, используется текущая организация пользователя)

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Получить временной ряд по метрике

Возвращает данные временного ряда за последние 6 месяцев по выбранной метрике с разбивкой по месяцам.

query Parameters
metric
string
Default: "users"
Enum: "users" "projects" "materials" "suppliers" "contracts" "completed_works"
Example: metric=users

Метрика для построения временного ряда

period
string
Default: "month"
Example: period=month

Период группировки (пока поддерживается только month)

organization_id
integer
Example: organization_id=10

ID организации

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Получить топ-5 сущностей по активности

Возвращает список топ-5 сущностей по выбранному критерию активности. Например, проекты с наибольшим количеством материалов.

query Parameters
entity
string
Default: "projects"
Value: "projects"
Example: entity=projects

Тип сущности для анализа

period
string
Default: "month"
Example: period=month

Период для анализа

organization_id
integer
Example: organization_id=10

ID организации

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Получить историю последних действий

Возвращает историю последних действий в системе (например, добавленные материалы).

query Parameters
type
string
Default: "materials"
Value: "materials"
Example: type=materials

Тип истории для отображения

limit
integer [ 1 .. 50 ]
Default: 10
Example: limit=10

Количество записей для отображения

organization_id
integer
Example: organization_id=10

ID организации

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Получить лимиты подписки и их заполнение

Возвращает информацию о лимитах текущей подписки организации и степени их заполнения.

query Parameters
organization_id
integer
Example: organization_id=10

ID организации

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Получить контракты, требующие внимания

Возвращает список контрактов, которые требуют внимания администратора:

  • приближающиеся к лимиту выполнения (>= 90%)
  • завершенные на 100%
  • просроченные по дате окончания

Контракты отсортированы по приоритету (самые критичные первыми).

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Получить статистику по контрактам

Возвращает общую статистику по контрактам и выполненным работам организации: количество контрактов по статусам, суммы, статистику работ.

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Получить топ контрактов по объему

Возвращает список топ контрактов организации, отсортированных по общей сумме в убывающем порядке.

query Parameters
limit
integer [ 1 .. 20 ]
Default: 5
Example: limit=5

Количество контрактов для отображения

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Получить последнюю активность по работам

Возвращает список последних выполненных работ за указанный период с информацией о проектах, контрактах, пользователях и суммах.

query Parameters
days
integer [ 1 .. 365 ]
Default: 30
Example: days=30

Количество дней для анализа активности

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Получить статистику по заявкам с сайта

Возвращает статистическую информацию по заявкам с сайта организации, включая заявки на персонал и другие типы запросов.

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

DashboardSettings

Получить доступные виджеты дашборда

Возвращает реестр всех доступных виджетов дашборда с учетом ролей пользователя. Виджеты фильтруются по ролям пользователя в указанной организации.

query Parameters
org_id
integer
Example: org_id=10

ID организации (если не указан, используется текущая организация)

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Получить настройки дашборда пользователя

Возвращает персональные настройки дашборда для текущего пользователя в указанной организации. Настройки автоматически синхронизируются с реестром виджетов.

query Parameters
org_id
integer
Example: org_id=10

ID организации

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Сохранить настройки дашборда

Сохраняет персональные настройки дашборда пользователя. Настройки валидируются против текущего реестра виджетов.

query Parameters
org_id
integer
Example: org_id=10

ID организации

Request Body schema: application/json
version
required
integer >= 1

Версия настроек (должна соответствовать текущей версии реестра)

layout_mode
string or null <= 50 characters

Режим макета дашборда

required
Array of objects <= 50 items

Настройки виджетов (максимум 50 виджетов)

Responses

Request samples

Content type
application/json
Example
{
  • "version": 1,
  • "layout_mode": "simple",
  • "items": [
    ]
}

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Сбросить настройки дашборда к умолчанию

Удаляет персональные настройки дашборда пользователя, возвращая к настройкам по умолчанию из реестра виджетов.

query Parameters
org_id
integer
Example: org_id=10

ID организации

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "reset"
}

Получить настройки дашборда по умолчанию

Возвращает настройки дашборда по умолчанию, построенные на основе реестра виджетов с учетом ролей пользователя в организации.

query Parameters
org_id
integer
Example: org_id=10

ID организации

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Contractor Invitations

Получить список приглашений подрядчиков

Возвращает пагинированный список приглашений подрядчиков для организации. Поддерживает фильтрацию по статусу и типу приглашений (отправленные/полученные).

query Parameters
type
string
Default: "sent"
Enum: "sent" "received"
Example: type=sent

Тип приглашений (отправленные или полученные)

status
string
Enum: "pending" "accepted" "declined" "expired"
Example: status=pending

Фильтр по статусу приглашения

date_from
string <date>
Example: date_from=2024-01-01

Начальная дата фильтрации (включительно)

date_to
string <date>
Example: date_to=2024-12-31

Конечная дата фильтрации (включительно)

per_page
integer [ 1 .. 50 ]
Default: 15
Example: per_page=15

Количество записей на странице

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    },
  • "meta": {
    }
}

Создать приглашение подрядчика

Отправляет приглашение указанной организации стать подрядчиком. Создается уникальный токен для принятия приглашения.

Request Body schema: application/json
invited_organization_id
required
integer

ID организации для приглашения

message
string or null <= 1000 characters

Персональное сообщение приглашения

object or null <= 10 properties

Дополнительные метаданные приглашения

Responses

Request samples

Content type
application/json
{
  • "invited_organization_id": 456,
  • "message": "Приглашаем к сотрудничеству в рамках строительных проектов",
  • "metadata": {
    }
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Приглашение успешно отправлено",
  • "data": {
    }
}

Получить статистику по приглашениям

Возвращает агрегированную статистику по приглашениям подрядчиков для текущей организации.

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Получить детали приглашения

Возвращает подробную информацию о конкретном приглашении подрядчика.

path Parameters
id
required
integer
Example: 123

ID приглашения

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Отменить приглашение

Отменяет ранее отправленное приглашение подрядчика. Возможна отмена только приглашений в статусе "pending".

path Parameters
id
required
integer
Example: 123

ID приглашения

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Приглашение отменено",
  • "data": {
    }
}

Поиск организаций для приглашения

Поиск организаций в системе для отправки приглашений на сотрудничество. Поддерживает фильтрацию по различным критериям и исключение уже приглашенных.

query Parameters
search
string <= 255 characters
Example: search=Строительная

Поисковый запрос по названию организации

city
string <= 100 characters
Example: city=Москва

Фильтр по городу

country
string <= 100 characters
Example: country=Россия

Фильтр по стране

verified
boolean
Example: verified=true

Фильтр по статусу верификации

exclude_invited
boolean
Default: true
Example: exclude_invited=true

Исключить уже приглашенные организации

exclude_existing_contractors
boolean
Default: true
Example: exclude_existing_contractors=true

Исключить организации, которые уже являются подрядчиками

sort_by
string
Default: "relevance"
Enum: "relevance" "name" "city" "connections" "verified"
Example: sort_by=relevance

Поле для сортировки результатов

per_page
integer [ 1 .. 50 ]
Default: 20
Example: per_page=20

Количество результатов на странице

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    },
  • "meta": {
    }
}

Получить предложения организаций

Возвращает список рекомендуемых организаций для приглашения на основе анализа деятельности и связей.

query Parameters
limit
integer [ 1 .. 20 ]
Default: 10
Example: limit=10

Максимальное количество предложений

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Получить персональные рекомендации

Возвращает персонализированные рекомендации организаций на основе истории взаимодействий и предпочтений пользователя.

query Parameters
limit
integer [ 1 .. 15 ]
Default: 8
Example: limit=8

Максимальное количество рекомендаций

category
string
Enum: "similar_projects" "geographic" "industry_leaders" "new_market"
Example: category=similar_projects

Категория рекомендаций

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Проверить доступность организации для приглашения

Проверяет возможность отправки приглашения указанной организации. Проверяет существующие приглашения, статус подрядчика и другие ограничения.

path Parameters
id
required
integer
Example: 456

ID организации

Responses

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "data": {
    }
}

Filters

Получить данные для фильтров контрактов

Возвращает данные для построения фильтров на странице контрактов. Включает доступные статусы, типы контрактов, проекты и подрядчиков для текущей организации пользователя.

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Получить данные для фильтров выполненных работ

Возвращает данные для построения фильтров на странице выполненных работ. Включает доступные статусы работ, проекты, контракты, виды работ, пользователей (прорабов) и подрядчиков для текущей организации.

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Получить статистику для быстрых фильтров

Возвращает агрегированную статистику по контрактам и выполненным работам для отображения на дашборде и в быстрых фильтрах. Данные группируются по статусам с подсчетом количества и общих сумм.

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Logs

Получить логи использования материалов

Возвращает пагинированный список логов операций с материалами (приемка и списание) для текущей организации администратора. Поддерживает фильтрацию по проектам, материалам, пользователям, датам и типам операций.

query Parameters
project_id
integer
Example: project_id=25

Фильтр по проекту

material_id
integer
Example: material_id=45

Фильтр по материалу

user_id
integer
Example: user_id=15

Фильтр по пользователю (прорабу)

operation_type
string
Enum: "receipt" "write_off"
Example: operation_type=write_off

Фильтр по типу операции

date_from
string <date>
Example: date_from=2024-12-01

Фильтр по дате начала периода

date_to
string <date>
Example: date_to=2024-12-31

Фильтр по дате окончания периода

per_page
integer [ 1 .. 100 ]
Default: 15
Example: per_page=15

Количество записей на страницу

sort_by
string
Default: "created_at"
Example: sort_by=usage_date

Поле для сортировки

sort_direction
string
Default: "desc"
Enum: "asc" "desc"
Example: sort_direction=desc

Направление сортировки

Responses

Response samples

Content type
application/json
{}

Получить логи выполнения работ

Возвращает пагинированный список логов выполненных работ для текущей организации администратора. Поддерживает фильтрацию по проектам, видам работ, пользователям и датам выполнения.

query Parameters
project_id
integer
Example: project_id=25

Фильтр по проекту

work_type_id
integer
Example: work_type_id=28

Фильтр по виду работ

user_id
integer
Example: user_id=15

Фильтр по пользователю (прорабу)

date_from
string <date>
Example: date_from=2024-12-01

Фильтр по дате начала периода выполнения

date_to
string <date>
Example: date_to=2024-12-31

Фильтр по дате окончания периода выполнения

per_page
integer [ 1 .. 100 ]
Default: 15
Example: per_page=15

Количество записей на страницу

sort_by
string
Default: "created_at"
Example: sort_by=completion_date

Поле для сортировки

sort_direction
string
Default: "desc"
Enum: "asc" "desc"
Example: sort_direction=desc

Направление сортировки

Responses

Response samples

Content type
application/json
{}

Profile

Получить данные профиля текущего пользователя

Возвращает полную информацию о профиле текущего аутентифицированного пользователя административной панели.

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Обновить профиль текущего пользователя (PATCH)

Частично обновляет профиль текущего пользователя. Поддерживает обновление основных данных, смену пароля, загрузку/удаление аватара. При смене email сбрасывается статус верификации.

Request Body schema: multipart/form-data
name
string <= 255 characters

Полное имя пользователя

email
string <email> <= 255 characters

Email адрес (должен быть уникальным, проверяется DNS)

phone
string or null <= 20 characters

Номер телефона

avatar
string <binary>

Изображение аватара (JPEG, PNG, JPG, GIF до 2MB)

remove_avatar
boolean

Флаг для удаления текущего аватара

password
string >= 8 characters

Новый пароль (минимум 8 символов, требуется подтверждение)

password_confirmation
string

Подтверждение нового пароля (должно совпадать с password)

Responses

Request samples

Content type
multipart/form-data
Example
{
  "name": "Иванов Иван Петрович",
  "phone": "+7 (999) 987-65-43",
  "position": "Старший прораб"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Профиль успешно обновлен.",
  • "data": {
    }
}

Обновить профиль текущего пользователя (PUT)

Полностью обновляет профиль текущего пользователя. Функционал идентичен PATCH методу, предоставлен для совместимости с различными фронтенд-реализациями.

Request Body schema: multipart/form-data
name
string <= 255 characters

Полное имя пользователя

email
string <email> <= 255 characters

Email адрес (должен быть уникальным, проверяется DNS)

phone
string or null <= 20 characters

Номер телефона

avatar
string <binary>

Изображение аватара (JPEG, PNG, JPG, GIF до 2MB)

remove_avatar
boolean

Флаг для удаления текущего аватара

password
string >= 8 characters

Новый пароль (минимум 8 символов, требуется подтверждение)

password_confirmation
string

Подтверждение нового пароля (должно совпадать с password)

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Профиль успешно обновлен.",
  • "data": {
    }
}

Получить настройки профиля (алиас для /profile)

Альтернативный endpoint для получения данных профиля. Предоставлен для совместимости с фронтенд-приложениями. Функционал полностью идентичен GET /profile.

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Профиль успешно обновлен.",
  • "data": {
    }
}

Обновить настройки профиля (алиас для /profile)

Альтернативный endpoint для обновления профиля (PATCH). Предоставлен для совместимости с фронтенд-приложениями. Функционал полностью идентичен PATCH /profile.

Request Body schema: multipart/form-data
name
string <= 255 characters

Полное имя пользователя

email
string <email> <= 255 characters

Email адрес (должен быть уникальным, проверяется DNS)

phone
string or null <= 20 characters

Номер телефона

avatar
string <binary>

Изображение аватара (JPEG, PNG, JPG, GIF до 2MB)

remove_avatar
boolean

Флаг для удаления текущего аватара

password
string >= 8 characters

Новый пароль (минимум 8 символов, требуется подтверждение)

password_confirmation
string

Подтверждение нового пароля (должно совпадать с password)

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Профиль успешно обновлен.",
  • "data": {
    }
}

Обновить настройки профиля (алиас для /profile)

Альтернативный endpoint для обновления профиля (PUT). Предоставлен для совместимости с фронтенд-приложениями. Функционал полностью идентичен PUT /profile.

Request Body schema: multipart/form-data
name
string <= 255 characters

Полное имя пользователя

email
string <email> <= 255 characters

Email адрес (должен быть уникальным, проверяется DNS)

phone
string or null <= 20 characters

Номер телефона

avatar
string <binary>

Изображение аватара (JPEG, PNG, JPG, GIF до 2MB)

remove_avatar
boolean

Флаг для удаления текущего аватара

password
string >= 8 characters

Новый пароль (минимум 8 символов, требуется подтверждение)

password_confirmation
string

Подтверждение нового пароля (должно совпадать с password)

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Профиль успешно обновлен.",
  • "data": {
    }
}

Report Templates

Получить список шаблонов отчетов

Возвращает пагинированный список шаблонов отчетов для текущей организации. Поддерживает пагинацию с настраиваемым размером страницы.

query Parameters
per_page
integer [ 1 .. 100 ]
Default: 15
Example: per_page=15

Количество элементов на странице

page
integer >= 1
Default: 1
Example: page=1

Номер страницы

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {}
}

Создать новый шаблон отчета

Создает новый шаблон отчета для текущей организации. Автоматически устанавливает organization_id и user_id из контекста. При установке is_default=true автоматически сбрасывает флаг у других шаблонов этого типа.

Request Body schema: application/json
name
required
string <= 255 characters

Название шаблона отчета

report_type
required
string
Enum: "material_usage" "work_completion" "foreman_activity" "project_status_summary"

Тип отчета для которого создается шаблон:

  • material_usage: Отчет по расходу материалов
  • work_completion: Отчет по выполненным работам
  • foreman_activity: Отчет по активности прорабов
  • project_status_summary: Сводный отчет по статусам проектов
required
Array of objects non-empty

Конфигурация колонок для отчета (массив объектов с настройками колонок)

is_default
boolean

Установить ли данный шаблон как шаблон по умолчанию для типа отчета

Responses

Request samples

Content type
application/json
Example
{
  • "name": "Детальный отчет по расходу материалов",
  • "report_type": "material_usage",
  • "columns_config": [
    ],
  • "is_default": true
}

Response samples

Content type
application/json
{
  • "id": 20,
  • "name": "Детальный отчет по расходу материалов",
  • "report_type": "material_usage",
  • "organization_id": 10,
  • "user_id": 25,
  • "columns_config": [
    ],
  • "is_default": true,
  • "created_at": "2024-12-20T17:30:00Z",
  • "updated_at": "2024-12-20T17:30:00Z"
}

Получить шаблон отчета по ID

Возвращает подробную информацию о конкретном шаблоне отчета. Доступны только шаблоны текущей организации.

path Parameters
template_id
required
integer
Example: 15

ID шаблона отчета

Responses

Response samples

Content type
application/json
{
  • "id": 15,
  • "name": "Детальный отчет по материалам",
  • "report_type": "material_usage",
  • "organization_id": 10,
  • "user_id": 25,
  • "columns_config": [
    ],
  • "is_default": true,
  • "created_at": "2024-01-15T09:00:00Z",
  • "updated_at": "2024-12-20T16:45:00Z"
}

Обновить шаблон отчета (PUT)

Полностью обновляет шаблон отчета. Доступны только шаблоны текущей организации. При установке is_default=true автоматически сбрасывает флаг у других шаблонов этого типа.

path Parameters
template_id
required
integer
Example: 15

ID шаблона отчета

Request Body schema: application/json
name
string <= 255 characters

Название шаблона отчета

report_type
string
Enum: "material_usage" "work_completion" "foreman_activity" "project_status_summary"

Тип отчета для которого создается шаблон:

  • material_usage: Отчет по расходу материалов
  • work_completion: Отчет по выполненным работам
  • foreman_activity: Отчет по активности прорабов
  • project_status_summary: Сводный отчет по статусам проектов
Array of objects non-empty

Конфигурация колонок для отчета (массив объектов с настройками колонок)

is_default
boolean

Установить ли данный шаблон как шаблон по умолчанию для типа отчета

Responses

Request samples

Content type
application/json
{
  • "name": "Обновленный детальный отчет по материалам",
  • "columns_config": [
    ],
  • "is_default": true
}

Response samples

Content type
application/json
{
  • "id": 15,
  • "name": "Детальный отчет по материалам",
  • "report_type": "material_usage",
  • "organization_id": 10,
  • "user_id": 25,
  • "columns_config": [
    ],
  • "is_default": true,
  • "created_at": "2024-01-15T09:00:00Z",
  • "updated_at": "2024-12-20T16:45:00Z"
}

Частично обновить шаблон отчета (PATCH)

Частично обновляет шаблон отчета. Доступны только шаблоны текущей организации. Функционал идентичен PUT методу. При установке is_default=true автоматически сбрасывает флаг у других шаблонов этого типа.

path Parameters
template_id
required
integer
Example: 15

ID шаблона отчета

Request Body schema: application/json
name
string <= 255 characters

Название шаблона отчета

report_type
string
Enum: "material_usage" "work_completion" "foreman_activity" "project_status_summary"

Тип отчета для которого создается шаблон:

  • material_usage: Отчет по расходу материалов
  • work_completion: Отчет по выполненным работам
  • foreman_activity: Отчет по активности прорабов
  • project_status_summary: Сводный отчет по статусам проектов
Array of objects non-empty

Конфигурация колонок для отчета (массив объектов с настройками колонок)

is_default
boolean

Установить ли данный шаблон как шаблон по умолчанию для типа отчета

Responses

Request samples

Content type
application/json
{
  • "name": "Обновленный шаблон отчета по материалам",
  • "report_type": "material_usage",
  • "columns_config": [
    ],
  • "is_default": true
}

Response samples

Content type
application/json
{
  • "id": 15,
  • "name": "Детальный отчет по материалам",
  • "report_type": "material_usage",
  • "organization_id": 10,
  • "user_id": 25,
  • "columns_config": [
    ],
  • "is_default": true,
  • "created_at": "2024-01-15T09:00:00Z",
  • "updated_at": "2024-12-20T16:45:00Z"
}

Удалить шаблон отчета

Удаляет шаблон отчета (soft delete). Доступны только шаблоны текущей организации. Удаленный шаблон перестает отображаться в списках, но данные сохраняются в БД.

path Parameters
template_id
required
integer
Example: 15

ID шаблона отчета

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Шаблон отчета успешно удален."
}

Установить шаблон как шаблон по умолчанию

Устанавливает указанный шаблон как шаблон по умолчанию для его типа отчета. Автоматически сбрасывает флаг is_default у других шаблонов того же типа в организации. Доступны только шаблоны текущей организации.

path Parameters
template_id
required
integer
Example: 15

ID шаблона отчета

Responses

Response samples

Content type
application/json
{
  • "id": 15,
  • "name": "Детальный отчет по материалам",
  • "report_type": "material_usage",
  • "organization_id": 10,
  • "user_id": 25,
  • "columns_config": [
    ],
  • "is_default": true,
  • "created_at": "2024-01-15T09:00:00Z",
  • "updated_at": "2024-12-20T17:45:00Z"
}

Reports

Отчет по расходу материалов (базовый модуль)

Генерирует отчет по расходу материалов на объектах с возможностью фильтрации по проекту, материалу, пользователю и периоду. Поддерживает экспорт в CSV/XLSX и использование пользовательских шаблонов для настройки колонок.

Требования: Доступ к модулю "basic_reports"

query Parameters
project_id
integer
Example: project_id=25

ID проекта для фильтрации

material_id
integer
Example: material_id=150

ID материала для фильтрации

user_id
integer
Example: user_id=35

ID прораба для фильтрации

date_from
string <date>
Example: date_from=2024-01-01

Дата начала периода

date_to
string <date>
Example: date_to=2024-12-31

Дата окончания периода

template_id
integer
Example: template_id=15

ID шаблона отчета для кастомизации колонок

format
string
Default: "json"
Enum: "json" "csv" "xlsx"
Example: format=json

Формат вывода отчета

per_page
integer [ 1 .. 100 ]
Default: 15

Количество элементов на странице (только для JSON)

sort_by
string
Default: "usage_date"

Поле для сортировки

sort_direction
string
Default: "desc"
Enum: "asc" "desc"

Направление сортировки

Responses

Response samples

Content type
{
  • "title": "Отчет по расходу материалов",
  • "filters": {
    },
  • "data": [
    ],
  • "pagination": {
    },
  • "generated_at": "2024-12-20T18:30:00Z"
}

Отчет по выполненным работам (базовый модуль)

Генерирует отчет по выполненным работам с возможностью фильтрации по проекту, виду работ, пользователю и периоду. Поддерживает экспорт в CSV/XLSX и использование пользовательских шаблонов.

Требования: Доступ к модулю "basic_reports"

query Parameters
project_id
integer

ID проекта для фильтрации

work_type_id
integer

ID вида работ для фильтрации

user_id
integer

ID прораба для фильтрации

date_from
string <date>

Дата начала периода

date_to
string <date>

Дата окончания периода

template_id
integer

ID шаблона отчета

format
string
Default: "json"
Enum: "json" "csv" "xlsx"

Формат вывода отчета

per_page
integer [ 1 .. 100 ]
Default: 15

Количество элементов на странице

Responses

Response samples

Content type
{
  • "title": "Отчет по расходу материалов",
  • "filters": {
    },
  • "data": [
    ],
  • "pagination": {
    },
  • "generated_at": "2024-12-20T18:30:00Z"
}

Отчет по активности прорабов (продвинутый модуль)

Генерирует детальный отчет по активности прорабов с анализом выполненных работ, времени работы и эффективности. Включает метрики производительности.

Требования: Доступ к модулю "advanced_reports"

query Parameters
project_id
integer

ID проекта для фильтрации

user_id
integer

ID конкретного пользователя

date_from
string <date>

Дата начала периода

date_to
string <date>

Дата окончания периода

template_id
integer

ID шаблона отчета

format
string
Default: "json"
Enum: "json" "csv" "xlsx"

Формат вывода отчета

Responses

Response samples

Content type
application/json
{
  • "title": "Отчет по расходу материалов",
  • "filters": {
    },
  • "data": [
    ],
  • "pagination": {
    },
  • "generated_at": "2024-12-20T18:30:00Z"
}

Сводный отчет по статусам проектов (базовый модуль)

Генерирует сводный отчет по статусам проектов организации с возможностью фильтрации по статусу и архивности. Показывает общую статистику по проектам.

Требования: Доступ к модулю "basic_reports"

query Parameters
status
string
Enum: "active" "completed" "planned" "on_hold"

Фильтр по статусу проектов

is_archived
boolean

Включать ли архивные проекты

template_id
integer

ID шаблона отчета

format
string
Default: "json"
Enum: "json" "csv" "xlsx"

Формат вывода отчета

Responses

Response samples

Content type
application/json
{
  • "title": "Отчет по расходу материалов",
  • "filters": {
    },
  • "data": [
    ],
  • "pagination": {
    },
  • "generated_at": "2024-12-20T18:30:00Z"
}

Официальный отчет об использовании материалов (продвинутый модуль)

Генерирует официальный отчет об использовании материалов, переданных заказчиком, с детальной отчетностью по документообороту и фотофиксации. Подходит для предоставления заказчикам и контролирующим органам.

Требования: Доступ к модулю "advanced_reports"

query Parameters
project_id
required
integer

ID проекта (обязательный параметр)

date_from
required
string <date>

Дата начала периода (обязательный параметр)

date_to
required
string <date>

Дата окончания периода (обязательный параметр)

report_number
integer >= 1

Номер отчета

material_id
integer

ID материала для фильтрации

material_name
string

Название материала для поиска

operation_type
string
Enum: "receipt" "write_off"

Тип операции с материалом

supplier_id
integer

ID поставщика

work_type_id
integer

ID вида работ

user_id
integer

ID пользователя

has_photo
boolean

Фильтр по наличию фотодокументации

min_quantity
number >= 0

Минимальное количество

max_quantity
number >= 0

Максимальное количество

format
string
Default: "json"
Enum: "json" "xlsx" "csv"

Формат вывода отчета

Responses

Response samples

Content type
application/json
{
  • "title": "Отчет по расходу материалов",
  • "filters": {
    },
  • "data": [
    ],
  • "pagination": {
    },
  • "generated_at": "2024-12-20T18:30:00Z"
}

Сводный отчет по подрядчикам проекта

Получить сводный отчет по всем подрядчикам для выбранного проекта с итоговыми суммами контрактов, выполненных работ и платежей

query Parameters
project_id
required
integer <int64>

ID проекта для отчета

date_from
string <date>

Дата начала периода (для фильтрации выполненных работ и платежей)

date_to
string <date>

Дата окончания периода (для фильтрации выполненных работ и платежей)

contractor_ids
Array of integers <int64> [ items <int64 > ]

Массив ID подрядчиков для фильтрации

contract_status
string
Enum: "active" "completed" "cancelled" "draft"

Статус контрактов для фильтрации

include_completed_works
boolean
Default: true

Включать ли данные о выполненных работах

include_payments
boolean
Default: true

Включать ли данные о платежах

include_materials
boolean
Default: false

Включать ли данные о материалах

sort_by
string
Default: "total_amount"
Enum: "contractor_name" "total_amount" "completed_amount" "payment_amount"

Поле для сортировки

sort_direction
string
Default: "desc"
Enum: "asc" "desc"

Направление сортировки

export_format
string
Default: "json"
Enum: "json" "csv" "excel"

Формат экспорта отчета

Responses

Response samples

Content type
{
  • "title": "Отчет по подрядчикам",
  • "project": {
    },
  • "period": {
    },
  • "filters": {
    },
  • "summary": {
    },
  • "contractors": [
    ],
  • "generated_at": "2024-01-15T10:30:00Z"
}

Детальный отчет по подрядчику

Получить детальный отчет по конкретному подрядчику в рамках проекта с разбивкой по контрактам, выполненным работам и платежам

path Parameters
contractorId
required
integer <int64>

ID подрядчика

query Parameters
project_id
required
integer <int64>

ID проекта для отчета

date_from
string <date>

Дата начала периода

date_to
string <date>

Дата окончания периода

export_format
string
Default: "json"
Enum: "json" "csv" "excel"

Формат экспорта отчета

Responses

Response samples

Content type
{
  • "title": "Детальный отчет по подрядчику",
  • "contractor": {
    },
  • "project": {
    },
  • "period": {
    },
  • "summary": {
    },
  • "contracts": [
    ],
  • "generated_at": "2024-01-15T10:30:00Z"
}

AdvanceAccountReports

Сводный отчёт по подотчетным средствам

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": { }
}

Отчёт по пользователю

path Parameters
userId
required
integer

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": { }
}

Отчёт по проекту

path Parameters
projectId
required
integer

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": { }
}

Отчёт по просроченным авансам

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": { }
}

Экспорт отчёта

path Parameters
format
required
string
Enum: "xlsx" "csv"

Responses

Custom Reports

Получить список кастомных отчетов

Возвращает список всех кастомных отчетов текущей организации. Пользователь видит свои отчеты и общие отчеты организации (is_shared=true).

Требования: Доступ к модулю "advanced-reports"

query Parameters
category
string
Enum: "core" "finances" "materials" "works" "staff"
Example: category=finances

Фильтр по категории отчета

is_favorite
boolean
Example: is_favorite=true

Только избранные отчеты

is_shared
boolean

Только общие отчеты организации

per_page
integer [ 1 .. 100 ]
Default: 15

Количество элементов на странице

page
integer >= 1
Default: 1

Номер страницы

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ],
  • "meta": {
    }
}

Создать новый кастомный отчет

Создает новый кастомный отчет с заданной конфигурацией. Перед созданием автоматически валидируется конфигурация.

Требования: Доступ к модулю "advanced-reports"

Request Body schema: application/json
name
required
string <= 255 characters

Название отчета (обязательное)

description
string or null <= 1000 characters

Описание отчета (опционально)

report_category
required
string
Enum: "core" "finances" "materials" "works" "staff"

Категория отчета (обязательное)

required
object

Конфигурация источников данных (обязательное)

object or null

Конфигурация WHERE условий (опционально)

required
Array of objects non-empty

Конфигурация колонок отчета (обязательное, минимум 1)

Array of objects or null

Конфигурация пользовательских фильтров (опционально)

object or null

Конфигурация агрегаций (опционально)

Array of objects or null

Конфигурация сортировки (опционально)

object or null

Конфигурация визуализации (опционально)

is_shared
boolean or null
Default: false

Сделать ли отчет общим для организации

Responses

Request samples

Content type
application/json
{
  • "name": "Финансы по проектам",
  • "description": "Суммы контрактов по каждому проекту",
  • "report_category": "finances",
  • "data_sources": {
    },
  • "query_config": {
    },
  • "columns_config": [
    ],
  • "filters_config": [
    ],
  • "aggregations_config": {
    },
  • "sorting_config": [
    ],
  • "visualization_config": {
    },
  • "is_shared": false
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Отчет успешно создан",
  • "data": {
    }
}

Получить детали отчета

Возвращает полную информацию о кастомном отчете включая конфигурацию и последние 10 выполнений.

Требования: Доступ к модулю "advanced-reports"

path Parameters
id
required
integer
Example: 5

ID отчета

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Обновить отчет

Обновляет конфигурацию существующего кастомного отчета. Редактировать можно только свои отчеты.

Требования: Доступ к модулю "advanced-reports"

path Parameters
id
required
integer
Example: 5

ID отчета

Request Body schema: application/json
name
string <= 255 characters

Название отчета

description
string or null <= 1000 characters

Описание отчета

report_category
string
Enum: "core" "finances" "materials" "works" "staff"

Категория отчета

object

Конфигурация источников данных

object or null

Конфигурация WHERE условий

Array of objects non-empty

Конфигурация колонок

filters_config
Array of objects or null

Конфигурация пользовательских фильтров

aggregations_config
object or null

Конфигурация агрегаций

sorting_config
Array of objects or null

Конфигурация сортировки

visualization_config
object or null

Конфигурация визуализации

is_shared
boolean or null

Сделать ли отчет общим для организации

Responses

Request samples

Content type
application/json
{
  • "name": "Финансы по проектам (обновлено)",
  • "description": "Обновленное описание",
  • "report_category": "finances",
  • "data_sources": {
    },
  • "query_config": {
    },
  • "columns_config": [
    ],
  • "filters_config": [
    ],
  • "aggregations_config": { },
  • "sorting_config": [
    ],
  • "visualization_config": { },
  • "is_shared": true
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Отчет успешно создан",
  • "data": {
    }
}

Удалить отчет

Удаляет кастомный отчет (soft delete). Удалять можно только свои отчеты.

Требования: Доступ к модулю "advanced-reports"

path Parameters
id
required
integer
Example: 5

ID отчета

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Отчет успешно удален"
}

Клонировать отчет

Создает копию существующего отчета с возможностью изменить название. Клонировать можно как свои, так и общие отчеты организации.

Требования: Доступ к модулю "advanced-reports"

path Parameters
id
required
integer
Example: 5

ID отчета для клонирования

Request Body schema: application/json
name
string

Новое название отчета (опционально)

Responses

Request samples

Content type
application/json
{
  • "name": "Копия отчета - Финансы по проектам"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Отчет успешно создан",
  • "data": {
    }
}

Добавить/удалить из избранного

Переключает статус отчета в избранном. Изменять статус избранного можно только для своих отчетов.

Требования: Доступ к модулю "advanced-reports"

path Parameters
id
required
integer
Example: 5

ID отчета

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Изменить настройки общего доступа

Делает отчет общим для всей организации или приватным. Изменять настройки доступа можно только для своих отчетов.

Требования: Доступ к модулю "advanced-reports"

path Parameters
id
required
integer
Example: 5

ID отчета

Request Body schema: application/json
is_shared
required
boolean

true - сделать общим, false - сделать приватным

Responses

Request samples

Content type
application/json
{
  • "is_shared": true
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Отчет теперь доступен всей организации",
  • "data": {
    }
}

Выполнить отчет

Выполняет кастомный отчет с применением фильтров. Поддерживает экспорт в различные форматы (CSV, Excel, PDF).

Требования: Доступ к модулю "advanced-reports"

path Parameters
id
required
integer
Example: 5

ID отчета

query Parameters
export
string
Enum: "csv" "excel" "pdf"
Example: export=excel

Формат экспорта (если указан, возвращает файл)

Request Body schema: application/json
object or null

Применяемые пользователем фильтры

limit
integer or null [ 1 .. 10000 ]

Лимит строк результата (максимум 10000)

Responses

Request samples

Content type
application/json
{
  • "filters": {
    },
  • "limit": 100
}

Response samples

Content type
{
  • "success": true,
  • "data": {
    }
}

Получить историю выполнений отчета

Возвращает историю выполнений отчета с информацией о статусе, примененных фильтрах и времени выполнения.

Требования: Доступ к модулю "advanced-reports"

path Parameters
id
required
integer
Example: 5

ID отчета

query Parameters
limit
integer [ 1 .. 100 ]
Default: 50

Количество записей в истории

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Custom Reports Builder

Получить список источников данных

Возвращает список всех доступных источников данных для построения отчетов. Источники данных - это таблицы БД (projects, contracts, materials и т.д.).

Требования: Доступ к модулю "advanced-reports"

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Получить поля источника данных

Возвращает список доступных полей для указанного источника данных с информацией о типе, возможности фильтрации, сортировки и агрегации.

Требования: Доступ к модулю "advanced-reports"

path Parameters
dataSource
required
string
Example: projects

Ключ источника данных (например, "projects", "contracts")

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Получить связи источника данных

Возвращает доступные связи (для JOIN'ов) для указанного источника данных. Связи описывают отношения между таблицами.

Требования: Доступ к модулю "advanced-reports"

path Parameters
dataSource
required
string
Example: projects

Ключ источника данных

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Получить доступные операторы фильтров

Возвращает список всех доступных операторов для построения фильтров (равно, больше, меньше, содержит и т.д.).

Требования: Доступ к модулю "advanced-reports"

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Получить доступные агрегатные функции

Возвращает список всех доступных агрегатных функций (SUM, AVG, COUNT, MIN, MAX, COUNT DISTINCT).

Требования: Доступ к модулю "advanced-reports"

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Получить доступные форматы экспорта

Возвращает список поддерживаемых форматов экспорта (CSV, Excel, PDF).

Требования: Доступ к модулю "advanced-reports"

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Получить категории отчетов

Возвращает список категорий для классификации отчетов (основные, финансы, материалы, работы, персонал).

Требования: Доступ к модулю "advanced-reports"

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Валидировать конфигурацию отчета

Проверяет корректность конфигурации отчета перед сохранением. Валидирует источники данных, поля, операторы и структуру.

Требования: Доступ к модулю "advanced-reports"

Request Body schema: application/json
object

Конфигурация источников данных

query_config
object or null

Конфигурация WHERE условий

columns_config
Array of objects

Конфигурация колонок

aggregations_config
object or null

Конфигурация агрегаций

sorting_config
Array of arrays or null or null

Конфигурация сортировки

Responses

Request samples

Content type
application/json
{
  • "data_sources": {
    },
  • "query_config": { },
  • "columns_config": [
    ],
  • "aggregations_config": { },
  • "sorting_config": [ ]
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Конфигурация валидна"
}

Предпросмотр отчета

Выполняет тестовый запрос с конфигурацией отчета и возвращает первые 20 строк результата для предпросмотра.

Требования: Доступ к модулю "advanced-reports"

Request Body schema: application/json
object
Array of objects non-empty
object or null
filters
object or null

Дополнительные фильтры для предпросмотра

Responses

Request samples

Content type
application/json
{
  • "data_sources": {
    },
  • "columns_config": [
    ],
  • "query_config": {
    },
  • "filters": {
    }
}

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Custom Reports Schedules

Получить список расписаний отчета

Возвращает все расписания автоматической генерации и отправки для указанного отчета.

Требования: Доступ к модулю "advanced-reports"

path Parameters
id
required
integer
Example: 5

ID отчета

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ]
}

Создать расписание отчета

Создает новое расписание автоматической генерации и отправки отчета. Поддерживает ежедневную, еженедельную и ежемесячную отправку.

Требования: Доступ к модулю "advanced-reports"

path Parameters
id
required
integer
Example: 5

ID отчета

Request Body schema: application/json
schedule_type
required
string
Enum: "daily" "weekly" "monthly"

Тип расписания (обязательное)

required
object

Конфигурация расписания (обязательное)

filters_preset
object or null

Предустановленные фильтры для автозапуска

recipient_emails
required
Array of strings <email> non-empty

Список email для отправки (обязательное, минимум 1)

export_format
required
string
Enum: "csv" "excel" "pdf"

Формат экспорта (обязательное)

Responses

Request samples

Content type
application/json
{
  • "schedule_type": "daily",
  • "schedule_config": {
    },
  • "filters_preset": {
    },
  • "recipient_emails": [
    ],
  • "export_format": "excel"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Расписание успешно создано",
  • "data": {
    }
}

Получить детали расписания

Возвращает детальную информацию о расписании отчета.

Требования: Доступ к модулю "advanced-reports"

path Parameters
id
required
integer
Example: 5

ID отчета

scheduleId
required
integer
Example: 10

ID расписания

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Обновить расписание

Обновляет конфигурацию расписания отчета.

Требования: Доступ к модулю "advanced-reports"

path Parameters
id
required
integer
Example: 5

ID отчета

scheduleId
required
integer
Example: 10

ID расписания

Request Body schema: application/json
schedule_type
string
Enum: "daily" "weekly" "monthly"

Тип расписания

object

Конфигурация расписания

filters_preset
object or null

Предустановленные фильтры

recipient_emails
Array of strings <email> non-empty

Список email для отправки

export_format
string
Enum: "csv" "excel" "pdf"

Формат экспорта

is_active
boolean

Активировать/деактивировать расписание

Responses

Request samples

Content type
application/json
{
  • "schedule_type": "weekly",
  • "schedule_config": {
    },
  • "filters_preset": { },
  • "recipient_emails": [
    ],
  • "export_format": "pdf",
  • "is_active": true
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Расписание успешно создано",
  • "data": {
    }
}

Удалить расписание

Удаляет расписание отчета.

Требования: Доступ к модулю "advanced-reports"

path Parameters
id
required
integer
Example: 5

ID отчета

scheduleId
required
integer
Example: 10

ID расписания

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Расписание успешно удалено"
}

Включить/выключить расписание

Переключает активность расписания отчета.

Требования: Доступ к модулю "advanced-reports"

path Parameters
id
required
integer
Example: 5

ID отчета

scheduleId
required
integer
Example: 10

ID расписания

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Расписание отключено",
  • "data": {
    }
}

Запустить расписание немедленно

Принудительно запускает выполнение отчета и отправку на email без ожидания следующего времени по расписанию.

Требования: Доступ к модулю "advanced-reports"

path Parameters
id
required
integer
Example: 5

ID отчета

scheduleId
required
integer
Example: 10

ID расписания

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Отчет выполнен и отправлен",
  • "data": {
    }
}

Users

Получить список прорабов организации

Возвращает пагинированный список прорабов текущей организации. Поддерживает фильтрацию по имени и статусу активности, а также сортировку.

Обрабатывается: UserManagementController::index Метод сервиса: UserService::getForemenForCurrentOrg Требует прав: admin.users.view

Authorizations:
bearerAuth
query Parameters
per_page
integer [ 1 .. 100 ]
Default: 15
Example: per_page=20

Количество элементов на странице

name
string <= 255 characters
Example: name=Иван

Фильтр по имени прораба (поиск по подстроке)

is_active
boolean
Example: is_active=true

Фильтр по статусу активности

sort_by
string
Default: "created_at"
Enum: "created_at" "updated_at" "name" "email"
Example: sort_by=name

Поле для сортировки

sort_direction
string
Default: "desc"
Enum: "asc" "desc"
Example: sort_direction=asc

Направление сортировки

Responses

Response samples

Content type
application/json
{}

Создать нового прораба в организации

Создает нового прораба для текущей организации. Если пользователь с таким email уже существует, то он будет добавлен в организацию с ролью foreman. Поддерживает загрузку аватара.

Обрабатывается: UserManagementController::store Метод сервиса: UserService::createForeman Требует прав: admin.users.create Миддлвары: subscription.limit:max_users

Authorizations:
bearerAuth
Request Body schema:
name
required
string <= 255 characters

Полное имя нового прораба

email
required
string <email> <= 255 characters

Уникальный email адрес (проверяется unique:users,email)

password
required
string <password>

Пароль (используется Password::defaults() - мин 8 симв, смешанные регистры, символы)

password_confirmation
required
string <password>

Подтверждение пароля (должно совпадать с password)

phone
string or null^\+?[0-9\s\-\(\)]{7,20}$

Контактный номер телефона (опционально, regex pattern)

position
string or null <= 255 characters

Должность или специализация прораба (опционально)

avatar
string or null <binary>

Файл аватара прораба (изображение JPEG, PNG, JPG, макс 2MB)

Responses

Request samples

Content type
{
  "name": "Александр Сидоров",
  "email": "alexander.sidorov@prohelper.com",
  "password": "SecurePass123!",
  "password_confirmation": "SecurePass123!",
  "phone": "+7 (900) 123-45-67",
  "position": "Прораб строительных работ",
  "avatar": "(binary file)"
}

Response samples

Content type
application/json
{
  • "id": 15,
  • "name": "Александр Сидоров",
  • "email": "alexander.sidorov@prohelper.com",
  • "phone": "+7 (900) 123-45-67",
  • "position": "Прораб строительных работ",
  • "avatar_path": "avatars/foreman_15.jpg",
  • "is_active": true,
  • "createdAt": "2024-01-15T10:30:00.000000Z",
  • "updatedAt": "2024-01-20T14:45:00.000000Z"
}

Получить данные конкретного прораба

Возвращает детальную информацию о конкретном прорабе в рамках текущей организации. Проверяет, что пользователь действительно является прорабом в этой организации.

Обрабатывается: UserManagementController::show Метод сервиса: UserService::findForemanById Требует прав: admin.users.view

Authorizations:
bearerAuth
path Parameters
id
required
integer >= 1
Example: 15

Уникальный идентификатор прораба

Responses

Response samples

Content type
application/json
{
  • "id": 15,
  • "name": "Александр Сидоров",
  • "email": "alexander.sidorov@prohelper.com",
  • "phone": "+7 (900) 123-45-67",
  • "position": "Прораб строительных работ",
  • "avatar_path": "avatars/foreman_15.jpg",
  • "is_active": true,
  • "createdAt": "2024-01-15T10:30:00.000000Z",
  • "updatedAt": "2024-01-20T14:45:00.000000Z"
}

Обновить прораба

path Parameters
id
required
integer
Request Body schema:
name
string <= 255 characters

Обновленное полное имя прораба (правило валидации sometimes|required)

password
string or null <password>

Новый пароль (опционально, используется Password defaults + confirmed)

password_confirmation
string or null <password>

Подтверждение нового пароля (обязательно если password указан)

phone
string or null^\+?[0-9\s\-\(\)]{7,20}$

Обновленный номер телефона (правило sometimes|nullable|regex)

position
string or null <= 255 characters

Обновленная должность (правило sometimes|nullable)

avatar
string or null <binary>

Новый файл аватара (sometimes|nullable|file|mimetypes image/jpeg,png,jpg|max 2048)

remove_avatar
boolean
Default: false

Удалить текущий аватар (правило sometimes|boolean)

Responses

Request samples

Content type
{
  "name": "Иван Иванов",
  "password": "Password123!",
  "password_confirmation": "Password123!",
  "phone": "+79998887766",
  "position": "Прораб",
  "avatar": "(binary)",
  "remove_avatar": false
}

Response samples

Content type
application/json
{
  • "id": 15,
  • "name": "Александр Сидоров",
  • "email": "alexander.sidorov@prohelper.com",
  • "phone": "+7 (900) 123-45-67",
  • "position": "Прораб строительных работ",
  • "avatar_path": "avatars/foreman_15.jpg",
  • "is_active": true,
  • "createdAt": "2024-01-15T10:30:00.000000Z",
  • "updatedAt": "2024-01-20T14:45:00.000000Z"
}

Частичное обновление прораба

path Parameters
id
required
integer
Request Body schema:
name
string <= 255 characters

Обновленное полное имя прораба (правило валидации sometimes|required)

password
string or null <password>

Новый пароль (опционально, используется Password defaults + confirmed)

password_confirmation
string or null <password>

Подтверждение нового пароля (обязательно если password указан)

phone
string or null^\+?[0-9\s\-\(\)]{7,20}$

Обновленный номер телефона (правило sometimes|nullable|regex)

position
string or null <= 255 characters

Обновленная должность (правило sometimes|nullable)

avatar
string or null <binary>

Новый файл аватара (sometimes|nullable|file|mimetypes image/jpeg,png,jpg|max 2048)

remove_avatar
boolean
Default: false

Удалить текущий аватар (правило sometimes|boolean)

Responses

Request samples

Content type
{
  "phone": "+79998887766",
  "position": "Старший прораб",
  "avatar": "(binary)"
}

Response samples

Content type
application/json
{
  • "id": 15,
  • "name": "Александр Сидоров",
  • "email": "alexander.sidorov@prohelper.com",
  • "phone": "+7 (900) 123-45-67",
  • "position": "Прораб строительных работ",
  • "avatar_path": "avatars/foreman_15.jpg",
  • "is_active": true,
  • "createdAt": "2024-01-15T10:30:00.000000Z",
  • "updatedAt": "2024-01-20T14:45:00.000000Z"
}

Заблокировать прораба

path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": { }
}

Разблокировать прораба

path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": { }
}

Получить баланс подотчетных средств пользователя

path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": {
    }
}

Получить транзакции подотчетных средств пользователя

path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": [
    ]
}

Выдать пользователю аванс

path Parameters
id
required
integer
Request Body schema: application/json
amount
required
number <float>
project_id
integer or null
description
string or null
document_number
string or null
document_date
string or null <date>

Responses

Request samples

Content type
application/json
{
  • "amount": 0,
  • "project_id": 0,
  • "description": "string",
  • "document_number": "string",
  • "document_date": "2019-08-24"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": { }
}

Возврат пользователем средств

path Parameters
id
required
integer
Request Body schema: application/json
amount
required
number <float>
project_id
integer or null
description
string or null
document_number
string or null
document_date
string or null <date>

Responses

Request samples

Content type
application/json
{
  • "amount": 0,
  • "project_id": 0,
  • "description": "string",
  • "document_number": "string",
  • "document_date": "2019-08-24"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": { }
}

Suppliers

Получить список поставщиков организации

Возвращает пагинированный список поставщиков организации с возможностью фильтрации и сортировки.

query Parameters
name
string
Example: name=СтройМат

Фильтр по названию поставщика (поиск по подстроке)

is_active
boolean
Example: is_active=true

Фильтр по активности поставщика

sort_by
string
Default: "name"
Enum: "name" "created_at" "updated_at"
Example: sort_by=name

Поле для сортировки

sort_direction
string
Default: "asc"
Enum: "asc" "desc"
Example: sort_direction=asc

Направление сортировки

per_page
integer [ 1 .. 100 ]
Default: 15
Example: per_page=15

Количество записей на страницу

Responses

Response samples

Content type
application/json
{}

Создать нового поставщика

Создает нового поставщика для организации с проверкой уникальности названия в рамках организации.

Request Body schema: application/json
name
required
string <= 255 characters

Название поставщика (уникальное в рамках организации)

contact_person
string or null <= 255 characters

Контактное лицо

phone
string or null <= 50 characters

Контактный телефон

email
string or null <email> <= 255 characters

Контактный email

address
string or null <= 1000 characters

Адрес поставщика

is_active
boolean
Default: true

Активность поставщика

Responses

Request samples

Content type
application/json
Example
{
  • "name": "ООО СтройМатериалы",
  • "contact_person": "Иванов Иван Иванович",
  • "phone": "+7 (495) 123-45-67",
  • "email": "info@stroymat.ru",
  • "address": "г. Москва, ул. Стройтельная, д. 15"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Получить детальную информацию о поставщике

Возвращает полную информацию о поставщике с проверкой принадлежности к организации.

path Parameters
id
required
integer
Example: 15

ID поставщика

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Обновить поставщика

Обновляет поставщика с проверками:

  • принадлежности к организации
  • прав доступа
  • уникальности названия (игнорирует текущую запись)
path Parameters
id
required
integer
Example: 15

ID поставщика для обновления

Request Body schema: application/json
name
string <= 255 characters

Название поставщика (уникальное в рамках организации, игнорирует текущую запись)

contact_person
string or null <= 255 characters

Контактное лицо

phone
string or null <= 50 characters

Контактный телефон

email
string or null <email> <= 255 characters

Контактный email

address
string or null <= 1000 characters

Адрес поставщика

is_active
boolean

Активность поставщика

Responses

Request samples

Content type
application/json
Example
{
  • "phone": "+7 (495) 987-65-43",
  • "email": "new-email@stroymat.ru"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Удалить поставщика

Удаляет поставщика с проверками:

  • принадлежности к организации
  • прав доступа
  • возможности удаления (не используется в системе)
path Parameters
id
required
integer
Example: 15

ID поставщика для удаления

Responses

Response samples

Content type
application/json
{
  • "message": "This action is unauthorized."
}

Time Tracking

Получить список записей времени

Возвращает пагинированный список записей времени для текущей организации. Поддерживает фильтрацию по пользователю, проекту, статусу и дате.

Возможные статусы записей:

  • draft - черновик
  • submitted - отправлено на утверждение
  • approved - утверждено
  • rejected - отклонено
query Parameters
user_id
integer
Example: user_id=15

Фильтр по пользователю

project_id
integer
Example: project_id=8

Фильтр по проекту

status
string
Enum: "draft" "submitted" "approved" "rejected"
Example: status=approved

Фильтр по статусу

start_date
string <date>
Example: start_date=2024-01-01

Дата начала периода (включительно)

end_date
string <date>
Example: end_date=2024-01-31

Дата окончания периода (включительно)

billable
boolean
Example: billable=true

Фильтр по оплачиваемости времени

per_page
integer [ 1 .. 100 ]
Default: 15
Example: per_page=20

Количество записей на страницу

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": [
    ],
  • "meta": {
    }
}

Создать новую запись времени

Создает новую запись времени. По умолчанию запись создается в статусе draft.

Обязательные поля:

  • organization_id - ID организации
  • user_id - ID пользователя
  • project_id - ID проекта
  • work_date - дата работы
  • start_time - время начала
  • title - название/описание работы
Request Body schema: application/json
organization_id
required
integer

ID организации

user_id
required
integer

ID пользователя, который выполнял работу

project_id
required
integer

ID проекта, в рамках которого выполнялась работа

work_type_id
integer or null

ID типа работы (опционально)

task_id
integer or null

ID задачи из календарного плана (опционально)

work_date
required
string <date>

Дата выполнения работы (не может быть в будущем)

start_time
required
string <time>

Время начала работы в формате HH:MM:SS

end_time
string or null <time>

Время окончания работы в формате HH:MM:SS (должно быть позже start_time)

break_time
number or null <float> [ 0 .. 24 ]

Время перерыва в часах (от 0 до 24)

title
required
string <= 255 characters

Название/краткое описание выполненной работы

description
string or null <= 1000 characters

Подробное описание выполненной работы

status
string
Default: "draft"
Enum: "draft" "submitted" "approved" "rejected"

Статус записи времени (по умолчанию "draft"):

  • draft - черновик
  • submitted - отправлено на утверждение
  • approved - утверждено
  • rejected - отклонено
is_billable
boolean
Default: true

Является ли время оплачиваемым (по умолчанию true)

hourly_rate
number or null <float> >= 0

Почасовая ставка в рублях (должна быть неотрицательной)

location
string or null <= 255 characters

Место выполнения работы

object or null

Дополнительные пользовательские поля

notes
string or null <= 1000 characters

Дополнительные заметки

Responses

Request samples

Content type
application/json
{
  • "organization_id": 5,
  • "user_id": 15,
  • "project_id": 8,
  • "work_type_id": 3,
  • "work_date": "2024-01-15",
  • "start_time": "09:00:00",
  • "end_time": "17:30:00",
  • "break_time": 1,
  • "title": "Разработка модуля авторизации",
  • "description": "Реализованы методы входа через email и телефон, добавлена двухфакторная аутентификация",
  • "status": "draft",
  • "is_billable": true,
  • "hourly_rate": 1500,
  • "location": "Офис, переговорная комната 2",
  • "notes": "Потребовалось больше времени из-за изменений в требованиях"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Запись времени успешно создана",
  • "data": {
    }
}

Получить конкретную запись времени

Возвращает детальную информацию о записи времени включая связанные данные

path Parameters
id
required
integer
Example: 123

Идентификатор записи времени

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Обновить запись времени

Обновляет существующую запись времени. Можно обновлять только записи в статусе draft или rejected.

path Parameters
id
required
integer
Example: 123

Идентификатор записи времени

Request Body schema: application/json
user_id
integer

ID пользователя, который выполнял работу

project_id
integer

ID проекта, в рамках которого выполнялась работа

work_type_id
integer or null

ID типа работы (опционально)

task_id
integer or null

ID задачи из календарного плана (опционально)

work_date
string <date>

Дата выполнения работы (не может быть в будущем)

start_time
string <time>

Время начала работы в формате HH:MM:SS

end_time
string or null <time>

Время окончания работы в формате HH:MM:SS (должно быть позже start_time)

break_time
number or null <float> [ 0 .. 24 ]

Время перерыва в часах (от 0 до 24)

title
string <= 255 characters

Название/краткое описание выполненной работы

description
string or null <= 1000 characters

Подробное описание выполненной работы

status
string
Enum: "draft" "submitted" "approved" "rejected"

Статус записи времени:

  • draft - черновик
  • submitted - отправлено на утверждение
  • approved - утверждено
  • rejected - отклонено
is_billable
boolean

Является ли время оплачиваемым

hourly_rate
number or null <float> >= 0

Почасовая ставка в рублях (должна быть неотрицательной)

location
string or null <= 255 characters

Место выполнения работы

object or null

Дополнительные пользовательские поля

notes
string or null <= 1000 characters

Дополнительные заметки

Responses

Request samples

Content type
application/json
{
  • "title": "Разработка модуля авторизации (обновлено)",
  • "description": "Реализованы методы входа через email и телефон, добавлена двухфакторная аутентификация, исправлены замечания",
  • "status": "submitted",
  • "end_time": "18:00:00",
  • "notes": "Доработана валидация email адресов"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Запись времени успешно обновлена",
  • "data": {
    }
}

Удалить запись времени

Удаляет запись времени. Можно удалять только записи в статусе draft или rejected.

path Parameters
id
required
integer
Example: 123

Идентификатор записи времени

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Запись времени успешно удалена"
}

Утвердить запись времени

Утверждает запись времени. Запись должна быть в статусе submitted. После утверждения статус изменяется на approved.

path Parameters
id
required
integer
Example: 123

Идентификатор записи времени

Request Body schema: application/json
reason
string <= 500 characters

Дополнительный комментарий к утверждению

Responses

Request samples

Content type
application/json
{
  • "reason": "Работа выполнена качественно"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Запись времени успешно утверждена"
}

Отклонить запись времени

Отклоняет запись времени. Запись должна быть в статусе submitted. После отклонения статус изменяется на rejected. Обязательно указание причины отклонения.

path Parameters
id
required
integer
Example: 123

Идентификатор записи времени

Request Body schema: application/json
reason
required
string <= 500 characters

Причина отклонения (обязательно)

Responses

Request samples

Content type
application/json
{
  • "reason": "Неточное описание выполненной работы"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Запись времени отклонена"
}

Отправить запись на утверждение

Отправляет запись времени на утверждение. Запись должна быть в статусе draft. После отправки статус изменяется на submitted.

path Parameters
id
required
integer
Example: 123

Идентификатор записи времени

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Запись времени отправлена на утверждение"
}

Получить статистику по времени

Возвращает агрегированную статистику по записям времени для текущей организации. Включает общее время, количество записей, распределение по статусам и проектам.

query Parameters
user_id
integer
Example: user_id=15

Фильтр по пользователю

project_id
integer
Example: project_id=8

Фильтр по проекту

start_date
string <date>
Example: start_date=2024-01-01

Дата начала периода

end_date
string <date>
Example: end_date=2024-01-31

Дата окончания периода

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Получить записи времени для календаря

Возвращает записи времени, сгруппированные по дням для отображения в календаре. По умолчанию возвращает данные за текущий месяц.

query Parameters
user_id
integer
Example: user_id=15

Фильтр по пользователю

project_id
integer
Example: project_id=8

Фильтр по проекту

start_date
string <date>
Example: start_date=2024-01-01

Дата начала периода (по умолчанию - начало текущего месяца)

end_date
string <date>
Example: end_date=2024-01-31

Дата окончания периода (по умолчанию - конец текущего месяца)

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Сгенерировать отчет по времени

Генерирует детальный отчет по записям времени с возможностью группировки. По умолчанию группирует данные по пользователям за текущий месяц.

query Parameters
user_id
integer
Example: user_id=15

Фильтр по пользователю

project_id
integer
Example: project_id=8

Фильтр по проекту

start_date
string <date>
Example: start_date=2024-01-01

Дата начала периода (по умолчанию - начало текущего месяца)

end_date
string <date>
Example: end_date=2024-01-31

Дата окончания периода (по умолчанию - конец текущего месяца)

group_by
string
Default: "user"
Enum: "user" "project" "work_type" "date"
Example: group_by=project

Способ группировки данных в отчете

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

MeasurementUnits

Получить список единиц измерения организации

Возвращает пагинированный список единиц измерения организации с возможностью фильтрации по типу.

query Parameters
type
string
Enum: "material" "work" "other"
Example: type=material

Фильтр по типу единиц измерения

page
integer >= 1
Default: 1
Example: page=1

Номер страницы

per_page
integer [ 1 .. 100 ]
Default: 15
Example: per_page=15

Количество записей на страницу

Responses

Response samples

Content type
application/json
{}

Создать новую единицу измерения

Создает новую единицу измерения для организации с проверкой уникальности названия и автоматической обработкой флага по умолчанию.

Request Body schema: application/json
name
required
string <= 255 characters

Название единицы измерения (уникальное в рамках организации)

short_name
required
string <= 50 characters

Краткое обозначение единицы измерения

type
string
Default: "material"
Enum: "material" "work" "other"

Тип единицы измерения

description
string or null

Описание единицы измерения

is_default
boolean
Default: false

Является ли единица измерения по умолчанию для данного типа

Responses

Request samples

Content type
application/json
Example
{
  • "name": "квадратный метр",
  • "short_name": "м²",
  • "type": "material",
  • "description": "Единица измерения площади"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Получить детальную информацию о единице измерения

Возвращает полную информацию о единице измерения с проверкой принадлежности к организации.

path Parameters
id
required
integer
Example: 15

ID единицы измерения

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Обновить единицу измерения

Обновляет единицу измерения с проверками:

  • принадлежности к организации
  • защиты системных единиц от изменения
  • ограничения изменения типа для используемых единиц
  • автоматической обработки флага по умолчанию
path Parameters
id
required
integer
Example: 15

ID единицы измерения для обновления

Request Body schema: application/json
name
string <= 255 characters

Название единицы измерения (уникальное в рамках организации, игнорирует текущую запись)

short_name
string <= 50 characters

Краткое обозначение единицы измерения

type
string
Enum: "material" "work" "other"

Тип единицы измерения (нельзя изменить, если единица уже используется)

description
string or null

Описание единицы измерения

is_default
boolean

Является ли единица измерения по умолчанию для данного типа

Responses

Request samples

Content type
application/json
Example
{
  • "description": "Обновленное описание единицы измерения"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Удалить единицу измерения

Удаляет единицу измерения с проверками:

  • принадлежности к организации
  • защиты системных единиц от удаления
  • проверки использования в материалах или видах работ
path Parameters
id
required
integer
Example: 15

ID единицы измерения для удаления

Responses

Response samples

Content type
application/json
{
  • "message": "Organization ID not found in context."
}

Получить единицы измерения для материалов

Возвращает список единиц измерения, специфичных для материалов организации. Это упрощенный эндпоинт для использования в селекторах при создании/редактировании материалов.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

CostCategories

Получить список категорий затрат организации

Возвращает пагинированный список категорий затрат организации с возможностью фильтрации, поиска и построения иерархии. Поддерживает загрузку связанных данных.

query Parameters
search
string
Example: search=строительн

Поиск по названию, коду или внешнему коду

is_active
boolean
Example: is_active=true

Фильтр по активности категории

parent_id
string
Example: parent_id=5

Фильтр по родительской категории (null или 0 для корневых)

sort_by
string
Default: "sort_order"
Enum: "sort_order" "name" "created_at" "updated_at"
Example: sort_by=sort_order

Поле для сортировки

sort_direction
string
Default: "asc"
Enum: "asc" "desc"
Example: sort_direction=asc

Направление сортировки

per_page
integer [ 1 .. 100 ]
Default: 15
Example: per_page=15

Количество записей на страницу

Responses

Response samples

Content type
application/json
{}

Создать новую категорию затрат

Создает новую категорию затрат для организации с проверкой уникальности кодов и валидацией иерархических связей.

Request Body schema: application/json
name
required
string <= 255 characters

Название категории затрат

code
string or null <= 100 characters

Код категории (уникальный в рамках организации)

external_code
string or null <= 100 characters

Внешний код категории для интеграции с учетными системами

description
string or null

Описание категории затрат

parent_id
integer or null

ID родительской категории для создания иерархии

is_active
boolean
Default: true

Активность категории

sort_order
integer or null

Порядок сортировки для отображения

additional_attributes
object or null

Дополнительные атрибуты в виде JSON

Responses

Request samples

Content type
application/json
Example
{
  • "name": "Основные работы",
  • "code": "MAIN",
  • "external_code": "EXT-MAIN",
  • "description": "Категория для основных строительных работ",
  • "is_active": true,
  • "sort_order": 10
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Получить детальную информацию о категории затрат

Возвращает полную информацию о категории затрат включая иерархические связи (родитель, дочерние категории) и количество связанных проектов.

path Parameters
id
required
integer
Example: 15

ID категории затрат

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Обновить категорию затрат

Обновляет категорию затрат с проверками:

  • принадлежности к организации
  • уникальности кодов (игнорирует текущую запись)
  • предотвращения установки самой себя в качестве родителя
  • валидации иерархических связей
path Parameters
id
required
integer
Example: 15

ID категории затрат для обновления

Request Body schema: application/json
name
string <= 255 characters

Название категории затрат

code
string or null <= 100 characters

Код категории (уникальный в рамках организации, игнорирует текущую запись)

external_code
string or null <= 100 characters

Внешний код категории для интеграции с учетными системами

description
string or null

Описание категории затрат

parent_id
integer or null

ID родительской категории (не может быть равен собственному ID)

is_active
boolean

Активность категории

sort_order
integer or null

Порядок сортировки для отображения

additional_attributes
object or null

Дополнительные атрибуты в виде JSON

Responses

Request samples

Content type
application/json
Example
{
  • "description": "Обновленное описание категории",
  • "is_active": false
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Удалить категорию затрат

Удаляет категорию затрат с проверками:

  • принадлежности к организации
  • отсутствия дочерних категорий
  • отсутствия связанных проектов Использует soft delete для сохранения целостности данных.
path Parameters
id
required
integer
Example: 15

ID категории затрат для удаления

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Категория затрат успешно удалена."
}

Импортировать категории затрат из файла

Импортирует категории затрат из Excel/CSV файла с поддержкой различных форматов данных и автоматическим созданием иерархических связей.

Request Body schema: multipart/form-data
file
required
string <binary>

Файл для импорта (Excel, CSV)

format
string
Default: "simple"
Enum: "simple" "sbis" "onec"

Формат данных в файле

Responses

Request samples

Content type
multipart/form-data
Example
{
  "format": "simple"
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "imported": 25,
  • "updated": 5,
  • "errors": [ ]
}

Accounting Integration

Импорт пользователей из бухгалтерской системы

Импортирует данные сотрудников из внешней бухгалтерской системы. Обновляет существующих пользователей по external_code или employee_id. Если пользователь не найден в системе, запись пропускается.

Поля обновления:

  • external_code - внешний код из бухгалтерской системы
  • employee_id - табельный номер сотрудника
  • accounting_account - счет бухгалтерского учета
  • accounting_data - дополнительные данные для интеграции

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Импорт пользователей завершен",
  • "stats": {
    }
}

Импорт проектов из бухгалтерской системы

Импортирует данные проектов из внешней бухгалтерской системы. Создает новые проекты или обновляет существующие по external_code. Автоматически импортирует и связывает категории затрат.

Поля создания/обновления:

  • external_code - внешний код проекта
  • name - название проекта
  • cost_category_id - связь с категорией затрат (автоматически создается)
  • accounting_data - дополнительные данные
  • use_in_accounting_reports - флаг использования в отчетах (устанавливается в true)
  • status - статус проекта (для новых устанавливается 'active')

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Импорт проектов завершен",
  • "stats": {
    }
}

Импорт материалов из бухгалтерской системы

Импортирует данные материалов из внешней бухгалтерской системы. Обновляет существующие материалы по external_code или sbis_nomenclature_code. Если материал не найден в системе, запись пропускается.

Поддерживаемые системы:

  • Общая интеграция через external_code
  • СБИС интеграция через sbis_nomenclature_code и sbis_unit_code

Поля обновления:

  • external_code - внешний код материала
  • sbis_nomenclature_code - код номенклатуры СБИС
  • sbis_unit_code - код единицы измерения СБИС
  • accounting_account - счет бухгалтерского учета
  • accounting_data - дополнительные данные
  • use_in_accounting_reports - флаг использования в отчетах (устанавливается в true)

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Импорт материалов завершен",
  • "stats": {
    }
}

Экспорт транзакций подотчетных средств в бухгалтерскую систему

Экспортирует утвержденные транзакции подотчетных средств во внешнюю бухгалтерскую систему. Экспортируются только транзакции без external_code (еще не экспортированные) со статусом 'approved'.

Критерии экспорта:

  • reporting_status = 'approved'
  • external_code = null (не экспортированные ранее)
  • created_at в указанном периоде

Данные экспорта:

  • Информация о пользователе и его external_code
  • Информация о проекте и его external_code
  • Тип, сумма и описание транзакции
  • Номер и дата документа
  • Даты отчета и утверждения

После успешного экспорта транзакции помечаются external_code из ответа API.

Request Body schema: application/json
start_date
string or null <date>

Дата начала периода для экспорта (формат YYYY-MM-DD). Если не указана, используется 30 дней назад.

end_date
string or null <date>

Дата окончания периода для экспорта (формат YYYY-MM-DD). Если не указана, используется текущая дата.

Responses

Request samples

Content type
application/json
Example
{
  • "start_date": "2024-01-01",
  • "end_date": "2024-12-31"
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "Экспорт транзакций завершен",
  • "stats": {
    }
}

Получить статус синхронизации с бухгалтерской системой

Возвращает информацию о состоянии синхронизации с внешней бухгалтерской системой. Показывает статус последней синхронизации по каждому типу данных: пользователи, проекты, материалы, транзакции.

Примечание: Данный endpoint в настоящее время возвращает заглушку с актуальной датой и статусом "completed" для всех типов данных. В будущем планируется реализация реального мониторинга статуса.

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Синхронизация работает нормально",
  • "last_sync": {
    }
}

PerformanceActs

Получить акт

path Parameters
performance_act
required
integer

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": {
    }
}

Обновить акт

path Parameters
performance_act
required
integer
Request Body schema: application/json
act_document_number
string <= 255 characters
act_date
string <date>
description
string or null
is_approved
boolean

Responses

Request samples

Content type
application/json
{
  • "act_document_number": "string",
  • "act_date": "2019-08-24",
  • "description": "string",
  • "is_approved": true
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "data": {
    }
}

Удалить акт

path Parameters
performance_act
required
integer

Responses

Экспорт акта в PDF

path Parameters
contract
required
integer
performance_act
required
integer

Responses

Экспорт акта в Excel

path Parameters
contract
required
integer
performance_act
required
integer

Responses

Contract Payments

Получить информацию о платеже

Возвращает детальную информацию о конкретном платеже по его идентификатору.

Особенности:

  • Shallow routing - не требует указания contract_id в пути
  • Автоматическая проверка принадлежности к организации
  • Возвращает полную информацию о платеже
path Parameters
payment
required
integer
Example: 1

Идентификатор платежа

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Обновить платеж

Обновляет существующий платеж по его идентификатору.

Особенности:

  • Shallow routing - не требует указания contract_id в пути
  • При изменении типа платежа пересчитывается actual_advance_amount контракта
  • Все поля необязательные - обновляются только переданные поля
  • Автоматическая проверка принадлежности к организации
path Parameters
payment
required
integer
Example: 1

Идентификатор платежа

Request Body schema: application/json
payment_date
string <date>

Дата платежа в формате YYYY-MM-DD

amount
number <decimal> >= 0

Сумма платежа в рублях

payment_type
string
Enum: "advance" "fact_payment" "deferred_payment" "other"

Тип платежа:

  • advance - Авансовый платеж
  • fact_payment - Оплата по факту (например, по КС)
  • deferred_payment - Отложенный платеж
  • other - Другой тип платежа
reference_document_number
string or null <= 255 characters

Номер документа-основания для платежа (счет, акт, КС)

description
string or null

Описание или комментарий к платежу

Responses

Request samples

Content type
application/json
{
  • "amount": 175000,
  • "payment_type": "fact_payment",
  • "description": "Изменен тип платежа на оплату по факту"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Удалить платеж

Удаляет платеж по его идентификатору.

Особенности:

  • Shallow routing - не требует указания contract_id в пути
  • При удалении авансового платежа пересчитывается actual_advance_amount контракта
  • Операция необратима - восстановление платежа невозможно
  • Автоматическая проверка принадлежности к организации
path Parameters
payment
required
integer
Example: 1

Идентификатор платежа

Responses

Response samples

Content type
application/json
{
  • "message": "Failed to delete payment",
  • "error": "Payment not found or does not belong to the specified contract."
}

Report Files

Получить список файлов отчетов

Возвращает пагинированный список файлов отчетов, созданных системой. Поддерживает фильтрацию по типу, дате создания и имени файла. Для каждого файла генерируется временная ссылка для скачивания (действует 5 минут).

Особенности:

  • Файлы создаются автоматически различными сервисами генерации отчетов
  • Хранятся в S3 с метаданными в базе данных
  • Организованы по типам и датам: {type}/{YYYY/MM/DD}/{filename}
  • Поддерживается срок хранения через expires_at
  • ID файлов кодируются в base64url для безопасности
query Parameters
type
string
Example: type=reports

Тип отчета для фильтрации

date_from
string <date>
Example: date_from=2024-01-01

Дата начала периода создания файлов

date_to
string <date>
Example: date_to=2024-12-31

Дата окончания периода создания файлов

filename
string
Example: filename=материалы

Поиск по имени файла (регистронезависимый)

sort_by
string
Default: "created_at"
Enum: "created_at" "size" "filename"

Поле для сортировки

sort_dir
string
Default: "desc"
Enum: "asc" "desc"

Направление сортировки

per_page
integer [ 1 .. 100 ]
Default: 15

Количество элементов на странице

Responses

Response samples

Content type
application/json
{}

Обновить название файла отчета

Обновляет читаемое название файла отчета. Позволяет присвоить более понятное название вместо автоматически сгенерированного имени файла.

Особенности:

  • Изменяется только поле 'name' в базе данных
  • Оригинальное имя файла 'filename' остается неизменным
  • Максимальная длина названия: 255 символов
path Parameters
key
required
string
Example: cmVwb3J0cy9tYXRlcmlhbC11c2FnZS8yMDI0LzAxLzE1L3JlcG9ydC54bHN4

Закодированный идентификатор файла (base64url от path)

Request Body schema: application/json
name
required
string <= 255 characters

Новое читаемое название файла

Responses

Request samples

Content type
application/json
{
  • "name": "Отчет по расходу материалов за январь 2024"
}

Response samples

Content type
application/json
{
  • "message": "Name updated."
}

Удалить файл отчета

Удаляет файл отчета из S3 хранилища и записи из базы данных. Операция необратима - восстановление файла невозможно.

Особенности:

  • Удаляется и файл из S3, и запись из базы данных
  • Если файл не найден в S3, запись из БД все равно удаляется
  • Декодирует base64url ключ для получения реального пути
path Parameters
key
required
string
Example: cmVwb3J0cy9tYXRlcmlhbC11c2FnZS8yMDI0LzAxLzE1L3JlcG9ydC54bHN4

Закодированный идентификатор файла (base64url от path)

Responses

Response samples

Content type
application/json
{
  • "message": "File deleted."
}

Personal Files

Получить список файлов и папок пользователя

Возвращает список файлов и папок в личном хранилище текущего пользователя. Поддерживает навигацию по папкам через параметр path. Для файлов генерируются временные ссылки для скачивания (действуют 30 минут).

Особенности:

  • Файлы организованы по структуре: {user_id}/{path}
  • Папки сортируются первыми, затем файлы (по алфавиту)
  • Временные ссылки создаются через S3 presigned URLs
  • Доступ только к собственным файлам пользователя
query Parameters
path
string
Default: ""
Examples:
  • path= - Корневая папка
  • path=Документы/Проекты - Подпапка

Путь к папке относительно корня пользователя (пустая строка = корень)

Responses

Response samples

Content type
application/json
[]

Создать папку в личных файлах

Создает новую папку в личном хранилище пользователя. Папка создается как объект нулевого размера в S3 хранилище.

Особенности:

  • Путь формируется как: {user_id}/{parent_path}/{name}/
  • Проверяется уникальность пути папки
  • Создается запись в базе данных с is_folder = true
  • В S3 создается объект-заглушка для обозначения папки
Request Body schema: application/json
name
required
string <= 255 characters

Название папки (без слешей в начале и конце)

parent_path
string or null

Путь к родительской папке (относительно корня пользователя)

Responses

Request samples

Content type
application/json
Example
{
  • "name": "Мои документы"
}

Response samples

Content type
application/json
{
  • "message": "Folder created."
}

Загрузить файл в личные файлы

Загружает файл в личное хранилище пользователя. Поддерживает файлы до 10 MB через multipart/form-data.

Особенности:

  • Максимальный размер файла: 10 MB
  • Путь формируется как: {user_id}/{parent_path}/{original_filename}
  • Проверяется уникальность пути файла
  • Файл загружается в S3 хранилище организации
  • Создается запись в базе данных с метаданными файла
Request Body schema: multipart/form-data
file
required
string <binary>

Файл для загрузки (максимум 10 MB)

parent_path
string or null

Путь к родительской папке (относительно корня пользователя)

Responses

Request samples

Content type
multipart/form-data
Example
{
  "file": "(binary file data)"
}

Response samples

Content type
application/json
{
  • "message": "File uploaded."
}

Удалить файл или папку

Удаляет файл или папку из личного хранилища пользователя. При удалении папки удаляются все вложенные файлы и подпапки.

Особенности:

  • Доступ только к собственным файлам пользователя
  • При удалении папки рекурсивно удаляются все содержимое
  • Файлы удаляются как из S3 хранилища, так и из базы данных
  • Операция необратима
path Parameters
id
required
string
Example: 01JFJK8HDNPZ8QAJ2YQF6SW6JH

Уникальный идентификатор файла или папки (ULID)

Responses

Response samples

Content type
application/json
{
  • "message": "Deleted."
}

Supplementary Agreements

Создать дополнительное соглашение

Создает новое дополнительное соглашение к указанному контракту.

Особенности:

  • Автоматическая проверка существования и принадлежности контракта к организации
  • Валидация уникальности номера соглашения в рамках контракта
  • Поддержка как положительных, так и отрицательных изменений суммы
  • Структурированное хранение изменений в массиве subject_changes
  • Soft deletes для возможности восстановления
Request Body schema: application/json
contract_id
required
integer

Идентификатор контракта, к которому создается дополнительное соглашение

number
required
string <= 255 characters

Номер дополнительного соглашения

agreement_date
required
string <date>

Дата подписания дополнительного соглашения в формате YYYY-MM-DD

change_amount
number or null <decimal>

Изменение суммы контракта (может быть положительным или отрицательным). Не обязательно, если ДС создается для изменения неценовых условий (сроки, спецификация, реквизиты, график платежей и т.д.)

supersede_agreement_ids
Array of integers or null

Массив ID предыдущих дополнительных соглашений для аннулирования. Используется когда текущее ДС отменяет/заменяет предыдущие ДС.

subject_changes
required
Array of strings

Массив изменений предмета договора или условий контракта. Обязательное поле - любое ДС должно содержать описание изменений.

subcontract_changes
Array of arrays or null or null

Изменения в субподрядных работах

gp_changes
Array of arrays or null or null

Изменения условий ГП (генподряда)

advance_changes
Array of arrays or null or null

Изменения авансовых платежей

Responses

Request samples

Content type
application/json
{
  • "contract_id": 15,
  • "number": "ДС-1",
  • "agreement_date": "2024-02-15",
  • "change_amount": 50000,
  • "subject_changes": [
    ]
}

Response samples

Content type
application/json
{
  • "id": 1,
  • "contract_id": 15,
  • "number": "ДС-1",
  • "agreement_date": "2024-02-15",
  • "change_amount": 50000,
  • "subject_changes": [
    ],
  • "created_at": "2024-02-15T14:30:00Z",
  • "updated_at": "2024-02-15T14:30:00Z"
}

Получить информацию о дополнительном соглашении

Возвращает детальную информацию о конкретном дополнительном соглашении.

Особенности:

  • Автоматическая проверка принадлежности к организации через контракт
  • Возвращает полную информацию включая все изменения
  • Поддержка soft deletes
path Parameters
agreement
required
integer
Example: 1

Идентификатор дополнительного соглашения

Responses

Response samples

Content type
application/json
{
  • "id": 1,
  • "contract_id": 15,
  • "number": "ДС-1",
  • "agreement_date": "2024-02-15",
  • "change_amount": 50000,
  • "subject_changes": [
    ],
  • "created_at": "2024-02-15T14:30:00Z",
  • "updated_at": "2024-02-15T14:30:00Z"
}

Обновить дополнительное соглашение

Обновляет существующее дополнительное соглашение.

Особенности:

  • Все поля необязательные - обновляются только переданные поля
  • contract_id не может быть изменен (установлен при создании)
  • Автоматическая проверка принадлежности к организации
  • Сохранение истории изменений в updated_at
path Parameters
agreement
required
integer
Example: 1

Идентификатор дополнительного соглашения

Request Body schema: application/json
number
string <= 255 characters

Номер дополнительного соглашения

agreement_date
string <date>

Дата подписания дополнительного соглашения в формате YYYY-MM-DD

change_amount
number or null <decimal>

Изменение суммы контракта (может быть положительным или отрицательным). Не обязательно, если ДС создается для изменения неценовых условий (сроки, спецификация, реквизиты, график платежей и т.д.)

supersede_agreement_ids
Array of integers or null

Массив ID предыдущих дополнительных соглашений для аннулирования. Используется когда текущее ДС отменяет/заменяет предыдущие ДС.

subject_changes
Array of strings

Массив изменений предмета договора или условий контракта. Любое ДС должно содержать описание изменений.

subcontract_changes
Array of arrays or null or null

Изменения в субподрядных работах

gp_changes
Array of arrays or null or null

Изменения условий ГП (генподряда)

advance_changes
Array of arrays or null or null

Изменения авансовых платежей

Responses

Request samples

Content type
application/json
{
  • "number": "ДС-1/И",
  • "change_amount": 75000,
  • "subject_changes": [
    ]
}

Response samples

Content type
application/json
{
  • "id": 1,
  • "contract_id": 15,
  • "number": "ДС-1/И",
  • "agreement_date": "2024-02-15",
  • "change_amount": 75000,
  • "subject_changes": [
    ],
  • "created_at": "2024-02-15T14:30:00Z",
  • "updated_at": "2024-02-16T10:15:00Z"
}

Удалить дополнительное соглашение

Удаляет дополнительное соглашение (soft delete).

Особенности:

  • Использует soft deletes для возможности восстановления
  • Автоматическая проверка принадлежности к организации
  • Операция обратима через базу данных
  • Не влияет на связанные данные контракта
path Parameters
agreement
required
integer
Example: 1

Идентификатор дополнительного соглашения

Responses

Response samples

Content type
application/json
{
  • "message": "Unauthenticated.",
  • "success": false
}

Получить список дополнительных соглашений по контракту

Возвращает пагинированный список всех дополнительных соглашений для указанного контракта. Соглашения сортируются по дате соглашения в убывающем порядке (новые сначала).

Особенности:

  • Доступны только соглашения контрактов текущей организации
  • Автоматическая проверка принадлежности контракта к организации
  • Поддержка пагинации с настраиваемым размером страницы
  • Включает информацию об изменениях сумм и предмета договора
path Parameters
contract
required
integer
Example: 15

Идентификатор контракта

query Parameters
per_page
integer [ 1 .. 100 ]
Default: 15
Example: per_page=20

Количество элементов на странице

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {}
}

Specifications

Получить список спецификаций

Возвращает пагинированный список всех спецификаций в системе. Спецификации содержат детализацию работ и услуг с общей стоимостью.

query Parameters
per_page
integer [ 1 .. 100 ]
Default: 15
Example: per_page=15

Количество записей на страницу

Responses

Response samples

Content type
application/json
{}

Создать новую спецификацию

Создает новую спецификацию с уникальным номером, детализацией работ и общей стоимостью.

Request Body schema: application/json
number
required
string <= 255 characters

Уникальный номер спецификации

spec_date
required
string <date>

Дата спецификации в формате Y-m-d

total_amount
required
number <decimal>

Общая сумма спецификации

scope_items
required
Array of strings non-empty

Перечень работ/услуг в спецификации

status
string
Default: "draft"
Enum: "draft" "approved" "archived"

Статус спецификации

Responses

Request samples

Content type
application/json
Example
{
  • "number": "SPEC-2024-001",
  • "spec_date": "2024-12-20",
  • "total_amount": 150000.5,
  • "scope_items": [
    ],
  • "status": "draft"
}

Response samples

Content type
application/json
{
  • "id": 25,
  • "number": "SPEC-2024-001",
  • "spec_date": "2024-12-20",
  • "total_amount": 150000.5,
  • "status": "draft",
  • "scope_items": [
    ],
  • "created_at": "2024-12-20T10:00:00Z",
  • "updated_at": "2024-12-20T10:00:00Z"
}

Получить детальную информацию о спецификации

Возвращает полную информацию о спецификации включая все детали работ и связанные данные.

path Parameters
id
required
integer
Example: 25

ID спецификации

Responses

Response samples

Content type
application/json
{
  • "id": 25,
  • "number": "SPEC-2024-001",
  • "spec_date": "2024-12-20",
  • "total_amount": 150000.5,
  • "status": "approved",
  • "scope_items": [
    ],
  • "attached_at": null,
  • "created_at": "2024-12-15T09:30:00Z",
  • "updated_at": "2024-12-20T14:15:00Z"
}

Обновить спецификацию

Обновляет спецификацию с проверкой уникальности номера (игнорирует текущую запись). Позволяет частичное обновление.

path Parameters
id
required
integer
Example: 25

ID спецификации для обновления

Request Body schema: application/json
number
string <= 255 characters

Уникальный номер спецификации (игнорирует текущую запись при проверке уникальности)

spec_date
string <date>

Дата спецификации в формате Y-m-d

total_amount
number <decimal>

Общая сумма спецификации

scope_items
Array of strings

Перечень работ/услуг в спецификации

status
string
Enum: "draft" "approved" "archived"

Статус спецификации

Responses

Request samples

Content type
application/json
Example
{
  • "status": "approved"
}

Response samples

Content type
application/json
{
  • "id": 25,
  • "number": "SPEC-2024-001-REV2",
  • "spec_date": "2024-12-22",
  • "total_amount": 185000,
  • "status": "approved",
  • "scope_items": [
    ],
  • "updated_at": "2024-12-22T16:45:00Z"
}

Удалить спецификацию

Удаляет спецификацию из системы (soft delete). Удаленная спецификация не будет отображаться в списках, но сохранится в базе данных для целостности данных.

path Parameters
id
required
integer
Example: 25

ID спецификации для удаления

Responses

Response samples

Content type
application/json
{
  • "message": "Спецификация не найдена"
}