> For the complete documentation index, see [llms.txt](https://doc.dbrain.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doc.dbrain.io/servisy/izvlechenie-dannykh/bukhgalterskaya-pervichka.md).

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

Классифицируем и распознаём 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>
