Необходимые cookie-файлы нужны для работы сайта. Аналитические cookie (Яндекс Метрика) — только с вашего согласия. Политика cookie-файлов

Тема оформления
Инструкции

Счета и УПД

Готовые схемы для счетов и УПД с проверками x-typizer-check: какие поля извлекаются и как их проверить.

Ниже — рабочие схемы для двух самых частых типов документов. Создайте типизатор с такой схемой («Первый вызов API», шаг «Сохранить типизатор») и при необходимости уберите или добавьте поля под свой формат документа.

Счёт на оплату

JSON
{
  "type": "object",
  "properties": {
    "invoice_number": { "type": "string" },
    "invoice_date": { "type": "string", "format": "date" },
    "supplier_name": { "type": "string" },
    "supplier_inn": { "type": "string", "x-typizer-check": "inn" },
    "supplier_kpp": { "type": "string", "x-typizer-check": "kpp" },
    "supplier_account": { "type": "string", "x-typizer-check": "account" },
    "supplier_bik": { "type": "string", "x-typizer-check": "bik" },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": { "type": "string" },
          "quantity": { "type": "number" },
          "price": { "type": "number" },
          "amount": { "type": "number" }
        },
        "required": ["name", "amount"]
      }
    },
    "total": {
      "type": "number",
      "x-typizer-sum-of": "items[].amount"
    }
  },
  "required": ["invoice_number", "total", "supplier_inn"]
}

x-typizer-sum-of на поле total сверяет его с суммой amount по всем строкам items — расхождение (например, итог в документе округлён иначе, чем сумма строк) даёт полю total статус warn с причиной sum_mismatch, а не падение всего прогона.

УПД (универсальный передаточный документ)

JSON
{
  "type": "object",
  "properties": {
    "document_number": { "type": "string" },
    "document_date": { "type": "string", "format": "date" },
    "seller_name": { "type": "string" },
    "seller_inn": { "type": "string", "x-typizer-check": "inn" },
    "seller_kpp": { "type": "string", "x-typizer-check": "kpp" },
    "buyer_name": { "type": "string" },
    "buyer_inn": { "type": "string", "x-typizer-check": "inn" },
    "buyer_kpp": { "type": "string", "x-typizer-check": "kpp" },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": { "type": "string" },
          "quantity": { "type": "number" },
          "price_without_vat": { "type": "number" },
          "vat_rate": { "type": "string" },
          "vat_amount": { "type": "number" },
          "amount_with_vat": { "type": "number" }
        },
        "required": ["name", "amount_with_vat"]
      }
    },
    "total_without_vat": { "type": "number" },
    "total_vat": { "type": "number" },
    "total_with_vat": {
      "type": "number",
      "x-typizer-sum-of": "items[].amount_with_vat"
    }
  },
  "required": ["document_number", "seller_inn", "buyer_inn", "total_with_vat"]
}

УПД совмещает счёт-фактуру и передаточный документ, поэтому в нём два ИНН/КПП (продавца и покупателя) — обе пары проверяются одинаково, по контрольным цифрам.

Проверки x-typizer-check для реквизитов

Для российских реквизитов есть готовые проверки — их достаточно один раз указать в схеме (или положиться на автоопределение по имени поля), и Typizer сам выставит полю статус ok/warn с причиной расхождения:

ПроверкаЧто проверяется
innИНН: контрольные цифры, 10 знаков (юрлицо) или 12 (физлицо/ИП)
kppКПП: формат из 9 символов
ogrnОГРН/ОГРНИП: контрольная цифра
bikБИК: 9 цифр, код России
accountРасчётный счёт: контрольная сумма относительно БИК, если он есть в документе
snilsСНИЛС: контрольная сумма
sum_ofСходимость суммы с перечнем слагаемых (x-typizer-sum-of)

Подробнее о статусах и причинах — «Проверки полей»; полный список ключевых слов схемы — «Поддерживаемый JSON Schema».

Частые ошибки распознавания

  • Скан низкого качества или фото под углом. Контрольные суммы (ИНН, БИК, счёт) часто спасают от опечатки распознавания на одну цифру — поле уйдёт в warn, а не в ok с неверным значением. Если таких warn много на однотипных документах — попробуйте режим precise («Тарификация страниц»), он даёт более точное распознавание ценой повышенного тарифа.
  • Итоговая сумма прописью вместо цифр. Поле со значением прописью («сто рублей 00 копеек») извлекается как есть в string-поле; если нужно число для x-typizer-sum-of, описывайте итог как number-поле рядом с суммой цифрами в документе, а не с суммой прописью.
  • Нестандартная таблица строк. Если строки счёта/УПД объединены в документе нетипично (например, несколько позиций в одной ячейке), уменьшите число полей в items до действительно нужных — это снижает шанс, что модель перепутает колонки.

Что дальше