# Бухгалтерская первичка

Классифицируем и распознаём 16 видов официальных документов, которые используются в бухгалтерском учете и налогообложении. Дальше — больше.

### Типы первичных документов, с которыми работает сервис

<table><thead><tr><th width="212">Вид документа</th><th width="191">Название в API</th><th data-type="checkbox">Извлечение</th><th data-type="checkbox">Классификация</th></tr></thead><tbody><tr><td>Акт приёма-передачи нематериальных активов</td><td>rus_act_completition</td><td>true</td><td>true</td></tr><tr><td>Счёт на оплату / Счёт</td><td>rus_bill</td><td>true</td><td>true</td></tr><tr><td>Счёт-фактура</td><td>rus_invoice</td><td>true</td><td>true</td></tr><tr><td>Универсальный передаточный документ (УПД)</td><td>rus_upd</td><td>true</td><td>true</td></tr><tr><td>Договор</td><td>rus_contract</td><td>true</td><td>true</td></tr><tr><td>Товарная накладная — ТОРГ-12</td><td>rus_torg_12</td><td>true</td><td>true</td></tr><tr><td>Акт сверки взаиморасчётов</td><td>rus_act_reconciliation</td><td>true</td><td>true</td></tr><tr><td>Акт приёма-передачи основных средств ОС-1</td><td>rus_os_1</td><td>true</td><td>true</td></tr><tr><td>Счёт-договор (оферта)</td><td>rus_contract_invoice</td><td>true</td><td>true</td></tr><tr><td>Банковский платёжный ордер</td><td>rus_bank_order</td><td>false</td><td>true</td></tr><tr><td>ОС-6</td><td>rus_os_6</td><td>false</td><td>true</td></tr><tr><td>Акт списания нематериальных активов</td><td>rus_act_retirement</td><td>false</td><td>true</td></tr><tr><td>ОС-15</td><td>rus_os_15</td><td>false</td><td>true</td></tr><tr><td>ОС-1Б</td><td>rus_os_1b</td><td>false</td><td>true</td></tr><tr><td>Доверенность</td><td>rus_power_of_attorney</td><td>false</td><td>true</td></tr><tr><td>Посторонний документ</td><td>other</td><td>false</td><td>true</td></tr></tbody></table>

### Перечень извлекаемых полей

<table><thead><tr><th width="311">Поле в документе</th><th>Название в API</th></tr></thead><tbody><tr><td>Основание передачи</td><td>basis</td></tr><tr><td>Покупатель: адрес</td><td>buyer_address</td></tr><tr><td>Покупатель: название компании</td><td>buyer_company</td></tr><tr><td>Покупатель: ФИО</td><td>buyer_fio</td></tr><tr><td>Покупатель: ИНН</td><td>buyer_inn</td></tr><tr><td>Покупатель: КПП</td><td>buyer_kpp</td></tr><tr><td>Покупатель: ОКПО</td><td>buyer_okpo</td></tr><tr><td>Валюта</td><td>currency</td></tr><tr><td>Дата документа</td><td>date</td></tr><tr><td>Руководитель организации: ФИО</td><td>lead_name</td></tr><tr><td>Сумма НДС</td><td>nds_sum</td></tr><tr><td>Номер документа</td><td>number</td></tr><tr><td>Номер связанного документа</td><td>related_document</td></tr><tr><td>Продавец: адрес</td><td>seller_address</td></tr><tr><td>Продавец: номер банковского счёта</td><td>seller_bank_account_number</td></tr><tr><td>Продавец: БИК</td><td>seller_bank_bic</td></tr><tr><td>Продавец: название банка</td><td>seller_bank_name</td></tr><tr><td>Продавец: название компании</td><td>seller_company</td></tr><tr><td>Продавец: ФИО</td><td>seller_fio</td></tr><tr><td>Продавец: ИНН</td><td>seller_inn</td></tr><tr><td>Продавец: КПП</td><td>seller_kpp</td></tr><tr><td>Продавец: ОКПО</td><td>seller_okpo</td></tr><tr><td>Продавец: ОКУД</td><td>seller_okud</td></tr><tr><td>Главный бухгалтер: ФИО</td><td>senior_accountant_name</td></tr><tr><td>Груз принял: ФИО</td><td>shipment_acceptor_name</td></tr><tr><td>Груз принял: должность</td><td>shipment_acceptor_position</td></tr><tr><td>Получатель груза: адрес</td><td>shipment_recepient_address</td></tr><tr><td>Получатель груза: компания</td><td>shipment_recepient_company</td></tr><tr><td>Получатель груза: ИНН</td><td>shipment_recepient_inn</td></tr><tr><td>Получатель груза: КПП</td><td>shipment_recepient_kpp</td></tr><tr><td>Получатель груза: ОКДП</td><td>shipment_recepient_okdp</td></tr><tr><td>Получатель груза: ОКПО</td><td>shipment_recepient_okpo</td></tr><tr><td>Отпуск груза разрешил: ФИО</td><td>shipment_release_authorised_by_name</td></tr><tr><td>Отпуск груза разрешил: должность</td><td>shipment_release_authorised_by_position</td></tr><tr><td>Груз отпустил: ФИО</td><td>shipment_released_by_name</td></tr><tr><td>Груз отпустил: должность</td><td>shipment_released_by_position</td></tr><tr><td>Поставщик: адрес</td><td>shipment_supplier_address</td></tr><tr><td>Поставщик: название компании</td><td>shipment_supplier_company</td></tr><tr><td>Поставщик: ИНН</td><td>shipment_supplier_inn</td></tr><tr><td>Поставщик: КПП</td><td>shipment_supplier_kpp</td></tr><tr><td>Поставщик: ОКПО</td><td>shipment_supplier_okpo</td></tr><tr><td>Поставщик: главный бухгалтер: ФИО</td><td>shipment_supplier_senior_accountant_name</td></tr><tr><td>Поставщик: должность</td><td>shipment_supplier_senior_accountant_position</td></tr><tr><td>Сторона А: название компании</td><td>side_a_company</td></tr><tr><td>Сторона А: ФИО</td><td>side_a_name</td></tr><tr><td>Сторона А: должность</td><td>side_a_position</td></tr><tr><td>Сторона Б: название компании</td><td>side_b_company</td></tr><tr><td>Сторона Б: ФИО</td><td>side_b_name</td></tr><tr><td>Сторона Б: должность</td><td>side_b_position</td></tr><tr><td>Сумма</td><td>total_sum</td></tr></tbody></table>

## Как начать работать с сервисом извлечения данных

Описали 5 популярных способов взаимодействия с сервисом. Для любого вам нужен ключ лицензии. Чтобы получить ключ, напишите нам в [телеграм](https://t.me/dbrain_support_bot) или на <hello@dbrain.io>.

Подготовьте изображение документа для теста.

<details>

<summary>Через веб-демо</summary>

1. Откройте [demo.dbrain.io](https://demo.dbrain.io)
2. Введите ключ лицензии в поле «Токен» и нажмите «Применить»
3. Выберите «Бухгалтерская первичка»
4. Нажмите кнопку «Выберите файл для распознавания»
5. Укажите изображение, которое нужно распознать
6. Нажмите кнопку «Распознать»

</details>

<details>

<summary>Через терминал</summary>

Обратитесь к методу `/rus_invoices` по адресу [latest.dbrain.io](https://latest.dbrain.io/). В этом способе только два обязательных параметра:

* `token` — ваш ключ лицензии
* `image` — файл с изображением документа

Запрос curl должен выглядеть так:

```bash
curl -X 'POST' \
  'https://latest.dbrain.io/rus_invoices?token=xxx' \
  -H 'accept: application/json' \
  -H 'Content-Type: multipart/form-data' \
  -F 'image=@image.jpg;type=image/jpeg'
```

</details>

<details>

<summary>Через Swagger</summary>

* Подготовьте ключ лицензии
* Откройте [Swagger](https://latest.dbrain.io/docs) и нажмите кнопку `Authorize` в правом верхнем углу
* Введите свой токен в любое поле и нажмите `Authorize`
* Прокрутите вниз до раздела `pipelines/run/rus_invoices`, нажмите на него
* В открывшемся разделе нажмите на кнопку `Try it out`
* Прокрутите страницу вниз до раздела `Request body`
* Нажмите на кнопку `Choose file` пункта `image`
* Укажите изображение, которое нужно распознать
* Нажмите кнопку `Execute`
* Ответ сервиса появится в пункте `Response body` раздела `Responses`
* Полученный на этом этапе `Curl` мы рекомендуем использовать как основу для написания интеграции с API сервиса Dbrain

</details>

<details>

<summary>Через Python</summary>

{% code overflow="wrap" %}

```python
import requests

url = 'https://latest.dbrain.io/rus_invoices?token=xxx'
files = {'image': open('image.jpg', 'rb')}
headers = {'accept': 'application/json'}

response = requests.post(url, headers=headers, files=files)
```

{% endcode %}

Код использует библиотеку `requests` для отправки POST-запроса с файлом изображения. Функция `open()` используется для открытия файла изображения в двоичном режиме и передачи его в параметр `files`. Параметр `headers` используется для установки заголовка `accept` в значение `application/json`. Ответ от сервера сохраняется в переменной `response`.

Тело запроса передавайте в кодировке `UTF-8`.

</details>

<details>

<summary>Через 1С</summary>

```bsl
Функция РаспознатьДокумент(ПакетДвоичныеДанные, ИмяФайла) Экспорт
	// готовит HTTP-запрос, включая заголовки и тело, и отправляет его на сервер.
	ПараметрыЗапроса ="?token=B000000000000000000000"; // токен необходимо получить собственный!
	РазделительМультисообщения = "----MessageBoundary1C";

	HTTPЗапрос = Новый HTTPЗапрос("/rus_invoices"+ПараметрыЗапроса);
	HTTPЗапрос.Заголовки.Вставить("accept", "application/json");
	HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + РазделительМультисообщения);

	ТелоПоток = Новый ПотокВПамяти();
	
	ЗаписьДанных = Новый ЗаписьДанных(ТелоПоток); 
	ЗаписьДанных.ЗаписатьСтроку("--" + РазделительМультисообщения);
	ЗаписьДанных.Записать(СоздатьСообщение_XML("image", ИмяФайла, ПакетДвоичныеДанные)); 
	ЗаписьДанных.ЗаписатьСимволы(Символы.ВК); 
	ЗаписьДанных.ЗаписатьСимволы(Символы.ПС);
	ЗаписьДанных.ЗаписатьСтроку("--" + РазделительМультисообщения + "--");
	ЗаписьДанных.Закрыть();
	
	ТелоДвоичныеДанные = ТелоПоток.ЗакрытьИПолучитьДвоичныеДанные();
	
	Попытка
		Соединение = Новый HTTPСоединение("latest.dbrain.io",
										443,
										,
										,
										,
										60,	
										ЗащищенноеСоединение());
	Исключение
		Сообщить(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));	
	КонецПопытки;

	HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(ТелоДвоичныеДанные);
	Возврат Соединение.ОтправитьДляОбработки(HTTPЗапрос);
	
КонецФункции	

Функция ЗащищенноеСоединение() 
	
	ЗащищенноеСоединение = Неопределено;
	
	СистемнаяИнфо = Новый СистемнаяИнформация;
	ТипПлатформыСервера = СистемнаяИнфо.ТипПлатформы;

	Если ТипПлатформыСервера = ТипПлатформы.Windows_x86
		Или ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда
		ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(
		Новый СертификатКлиентаWindows(),
		Новый СертификатыУдостоверяющихЦентровWindows());
	Иначе
		ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
	КонецЕсли;
	
	Возврат ЗащищенноеСоединение;
	
КонецФункции

Функция СоздатьСообщение_XML(ИмяСообщения, ИмяФайла, СообщениеДвоичныеДанные)   
	
	Поток = Новый ПотокВПамяти();
	ЗаписьДанных = Новый ЗаписьДанных(Поток);
	// Заголовки
	ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""" + ИмяСообщения + """; filename=""" + ИмяФайла + """");
	Если Прав(ИмяФайла, 4) = ".xml" Тогда
		ТипMIME = "text/xml";
	ИначеЕсли Прав(ИмяФайла, 4) = ".pdf" Тогда
		ТипMIME = "application/pdf";
	Иначе
		ЧастиИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяФайла, ".");
		Если ЧастиИмени.Количество() > 1 Тогда
			ТипMIME = "image/" + ЧастиИмени[ЧастиИмени.ВГраница()];	
		КонецЕсли;
	КонецЕсли;                                
	ЗаписьДанных.ЗаписатьСтроку("Content-Type: " + ТипMIME);
	ЗаписьДанных.ЗаписатьСтроку("");
	// Тело
	ЗаписьДанных.Записать(СообщениеДвоичныеДанные);
	ЗаписьДанных.Закрыть();

	Возврат Поток.ЗакрытьИПолучитьДвоичныеДанные();
		
```

</details>

## Параметры запроса к API

{% hint style="success" %}

#### Асинхронный запрос

<mark style="color:green;">**async**</mark> — boolean

Поведение по умолчанию: `async=false` — сервис обрабатывает запросы синхронно. При отправке запроса вы получите ответ только после окончательного завершения обработки запроса сервисом.

Если вам нужен асинхронный режим, укажите в запросе `async=true`. В ответ на запрос сервис вернёт в `response body` параметр `task_id`. Например:

```json
"task_id": "96b8ccc950a70699927036842c624d7c"
```

Используйте этот `task_id`, чтобы получить результат работы сервиса в методе `result`:

```bash
curl -X 'GET' \
  'https://latest.dbrain.io/result/96b8ccc950a70699927036842c624d7c?token=XXX' \
  -H 'accept: application/json'
```

Не забудьте указать в параметре `token` ваш ключ лицензии. Рекомендуем запрашивать метод `result` в цикле с периодом 1-2 секунды.
{% endhint %}

{% hint style="success" %}

#### Возврат найденных областей изображения

<mark style="color:green;">**return\_crops**</mark> — boolean

* true — сервис вернёт в ответе API найденные области изображения с документами
* false (по умолчанию) —  cервис не вернёт найденные области изображения

Ответ приходит в объект images массива result
{% endhint %}

{% hint style="success" %}

#### Тегирование запроса

<mark style="color:green;">**task\_tags**</mark> — string array

Поведение по умолчанию: параметр не используется.

Функция тегирует запросы по вашему усмотрению. Это упрощает отслеживание пакетов документов, связанных с конкретным клиентом-физлицом. Для использования функции укажите в параметре `task_tags` удобный вам тег: `task_tags=тэг`
{% endhint %}

{% hint style="success" %}

#### Нормализация адресов по ФИАС

<mark style="color:green;">**normalization\_fias**</mark> — boolean

* false (по умолчанию) — сервис не нормализует адреса
* true — сервис обращается к [API сервиса Dadata.ru](https://dadata.ru/api/clean/address/#response) и возвращает адрес в [формате ФИАС](https://ru.wikipedia.org/wiki/%D0%A4%D0%B5%D0%B4%D0%B5%D1%80%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0#%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%B0_%D0%BF%D0%BE_%D0%A4%D0%98%D0%90%D0%A1). Это повышает точность извлечения поля «Адрес». Нормализация приводит неструктурированный адрес к общепринятому формату, который можно сопоставлять с адресами из других источников.

{% hint style="info" %}
Если сервис Dbrain развёрнут локально, он может обращаться за нормализацией адреса к локальному сервису Dadata. Для этого укажите адрес в параметре URL\_DADATA в .env
{% endhint %}
{% endhint %}

{% hint style="success" %}

#### Верификация результатов извлечения полей

<mark style="color:green;">**verification**</mark> — string

* disabled (по умолчанию) — сервис сразу возвращает результаты работы алгоритмов
* private — сервис отправляет результаты работы алгоритмов на ручную верификацию. Для получения доступа к интерфейсу станции верификации напишите нам в [телеграм](https://t.me/dbrain_support_bot) или на <hello@dbrain.io>
  {% endhint %}

## Тело запроса к API

{% hint style="success" %}

#### Изображение

<mark style="color:green;">**image**</mark> — string ($binary)

Изображение обязательно для передачи в запросе. Сервис ожидает изображение документа в двоичном виде
{% endhint %}

## В ответе на запрос к API:

{% hint style="info" %}
Перед началом работы с сервисами изучите раздел [«Общая информация о сервисах»](/obshaya-informaciya/obshaya-informaciya-o-servisakh.md). Там мы рассказываем про допустимые форматы файлов, виды запросов и ответов, набор HTTP-статусов и даём рекомендации по устранению ошибок
{% endhint %}

<table data-header-hidden data-full-width="true"><thead><tr><th width="232">Название</th><th width="136.33333333333331">Тип</th><th>Описание</th></tr></thead><tbody><tr><td>task_id</td><td>string</td><td>Идентификатор запроса, формат: 32 символа, 16-ричная строка</td></tr><tr><td>error</td><td>string</td><td>Текстовое описание ошибки</td></tr><tr><td>task_tags</td><td>array[string]</td><td>Теги, если они переданы в параметре task_tags</td></tr><tr><td>success</td><td>boolean</td><td>Статус запроса</td></tr><tr><td>status_code</td><td>integer</td><td><p>HTTP-код статуса запроса</p><ul><li>200 — запрос выполнен успешно</li><li>400, 403, 500 и т.д. — расшифрованы в «<a href="/pages/mtcHXyOf98EHOiHYbHeN#http-kody-otveta-na-zapros">Общей информации о сервисах</a>»</li></ul></td></tr><tr><td>result.images</td><td>array[$string]</td><td>Массив <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs">data URL</a> с MIME-типом JPEG в формате base64 — изображения найденных документов. Возвращается, если в запросе передать <code>return_crops=true</code></td></tr><tr><td>result.doc_type</td><td>string</td><td>Тип документа из <a href="#vidy-pervichnykh-dokumentov-podderzhivaemykh-servisom">списка</a><a href="#tipy-pervichnykh-dokumentov-podderzhivaemykh-servisom"> документов</a>, поддерживаемых сервисом</td></tr><tr><td>result.confidence</td><td>number</td><td>Уровень уверенности сервиса от 0 до 1 в корректности определения типа документа. Чем ближе к 1, тем выше уверенность</td></tr><tr><td>result.page_num</td><td>integer</td><td>Номер страницы в оригинальном файле, на котором найден документ</td></tr><tr><td>result.fields</td><td>array</td><td>Массив, содержащий поля, которые сервис извлёк из документа</td></tr><tr><td>result.fields.name</td><td>string</td><td>Название поля в документе из <a href="#perechen-izvlekaemykh-polei">перечня извлекаемых полей</a></td></tr><tr><td>result.fields.value</td><td>string</td><td>Текстовое содержимое поля, которое извлёк сервис</td></tr><tr><td>result.fields.confidence</td><td>number</td><td>Уровень уверенности сервиса от 0 до 1 в корректности содержимого, извлечённого из поля</td></tr><tr><td>result.fields.page_num</td><td>integer</td><td>Номер страницы в оригинальном файле, на которой найдено поле</td></tr><tr><td>result.fields.coords</td><td>array[integer]</td><td>Массив с координатами поля по четырём точкам: верхний левый угол, верхний правый, нижний левый, нижний правый. Поле может состоять из нескольких частей</td></tr><tr><td>result.fields.crops</td><td>array[$string]</td><td>Массив <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs">data URL</a> с MIME-типом JPEG в формате base64 — изображения найденных частей поля. Возвращается, если в запросе передать <code>return_crops=true</code></td></tr><tr><td>result.fields.is_found</td><td>boolean</td><td><ul><li>true — поле найдено в документе</li><li>false — поле в документе не найдено</li></ul></td></tr><tr><td>result.tables</td><td>array[array]]</td><td>Массив, содержащий найденные в документе таблицы</td></tr><tr><td>result.tables.name</td><td>string</td><td><p>Название ячейки таблицы по схеме </p><p>table_id-X_row-Y_col-Z, где: <br>• X — порядковый номер таблицы (сверху внизу)<br>• Y — порядковый номер строки в таблице, начиная с 0<br>• Z — порядковый номер столбца в таблице, начиная с 0</p></td></tr><tr><td>result.tables.value</td><td>string</td><td>Текстовое содержимое ячейки таблицы</td></tr><tr><td>result.tables.confidence</td><td>number</td><td>Уровень уверенности сервиса от 0 до 1 в корректности содержимого, извлечённого из ячейки</td></tr><tr><td>result.tables.page_num</td><td>integer</td><td>Номер страницы в оригинальном файле, на котором найдена ячейка</td></tr><tr><td>result.tables.coords</td><td>array[integer]</td><td>Массив с координатами ячейки по четырём точкам: верхний левый угол, верхний правый, нижний левый, нижний правый</td></tr><tr><td>result.tables.crops</td><td>array[$string]</td><td>Массив <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs">data URL</a> с MIME-типом JPEG в формате base64 — изображение ячейки. Возвращается, если в запросе передать <code>return_crops=true</code></td></tr><tr><td>result.tables.is_found</td><td>boolean</td><td><ul><li>true — ячейка найдена в документе</li><li>false — ячейка в документе не найдена</li></ul></td></tr></tbody></table>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://doc.dbrain.io/servisy/izvlechenie-dannykh/bukhgalterskaya-pervichka.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
