# Распознавание кассовых чеков

Продавец и его ИНН, дата и время, фискальные реквизиты, позиции, итог и способ оплаты — с фото или скана чека, для авансовых отчётов и учёта расходов.

## Что извлекается

| Поле | Описание | Тип | Проверка |
| --- | --- | --- | --- |
| `seller` | Продавец | string |  |
| `seller_inn` | ИНН продавца | string | ИНН |
| `address` | Адрес расчётов | string |  |
| `datetime` | Дата и время | string (date-time) |  |
| `fd_number` | Номер фискального документа (ФД) | string |  |
| `fn_number` | Номер фискального накопителя (ФН) | string |  |
| `fpd` | Фискальный признак документа (ФПД) | string |  |
| `items[]` | Позиции | array |  |
| `items[].name` | Наименование | string |  |
| `items[].quantity` | Количество | number |  |
| `items[].amount` | Сумма | number |  |
| `total` | Итог | number | сумма строк |
| `payment` | Способ оплаты | "cash" \| "card" \| "mixed" |  |
| `vat_amount` | Сумма НДС | number |  |

Если значения нет в документе, поле возвращается как null со статусом missing.

## JSON Schema

```json
{
  "type": "object",
  "properties": {
    "seller": {
      "type": "string",
      "description": "Продавец"
    },
    "seller_inn": {
      "type": "string",
      "description": "ИНН продавца",
      "x-typizer-check": "inn"
    },
    "address": {
      "type": "string",
      "description": "Адрес расчётов"
    },
    "datetime": {
      "type": "string",
      "format": "date-time",
      "description": "Дата и время"
    },
    "fd_number": {
      "type": "string",
      "description": "Номер фискального документа (ФД)"
    },
    "fn_number": {
      "type": "string",
      "description": "Номер фискального накопителя (ФН)"
    },
    "fpd": {
      "type": "string",
      "description": "Фискальный признак документа (ФПД)"
    },
    "items": {
      "type": "array",
      "description": "Позиции",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Наименование"
          },
          "quantity": {
            "type": "number",
            "description": "Количество"
          },
          "amount": {
            "type": "number",
            "description": "Сумма"
          }
        },
        "required": [
          "name",
          "quantity",
          "amount"
        ]
      }
    },
    "total": {
      "type": "number",
      "description": "Итог",
      "x-typizer-check": "sum_of",
      "x-typizer-sum-of": "items[].amount"
    },
    "payment": {
      "type": "string",
      "enum": [
        "cash",
        "card",
        "mixed"
      ],
      "description": "Способ оплаты"
    },
    "vat_amount": {
      "type": "number",
      "description": "Сумма НДС"
    }
  },
  "required": [
    "seller",
    "seller_inn",
    "address",
    "datetime",
    "fd_number",
    "fn_number",
    "fpd",
    "items",
    "total",
    "payment",
    "vat_amount"
  ]
}
```

## Пример результата (данные вымышлены)

```json
{
  "seller": "ООО «Кафе Пример»",
  "seller_inn": "0078978973",
  "address": "г. Москва, условная ул., 5",
  "datetime": "2026-10-03T13:42:00+03:00",
  "fd_number": "24871",
  "fn_number": "0000000000000001",
  "fpd": "1234567890",
  "items": [
    {
      "name": "Бизнес-ланч",
      "quantity": 2,
      "amount": 980
    },
    {
      "name": "Кофе американо",
      "quantity": 2,
      "amount": 360
    }
  ],
  "total": 1340,
  "payment": "card",
  "vat_amount": null
}
```

## Особенности документа

- Чеки фотографируют на ходу: мятая термобумага, тени, наклон. Распознавание текста справляется с большинством снимков, а поле, прочитанное неуверенно или не прошедшее проверку, получает статус warn.
- Фискальные реквизиты (номер ФН, номер ФД, ФПД) печатаются мелким шрифтом в конце чека — описывайте их отдельными полями, если чек нужен для учёта.
- Один снимок может содержать несколько чеков. Опишите в схеме массив чеков — каждый вернётся отдельным элементом.

## Что проверяет Typizer

- ИНН продавца — контрольные цифры.
- Итог — сумма позиций против итога чека.
- Дата — правдоподобный год (1900–2100), иначе статус warn.

## Вызов API

Инструкция: Продавец и ИНН, адрес расчётов, дата и время, номер ФД и ФН, ФПД, позиции с количеством и суммой, итог, способ оплаты, НДС

```bash
curl -X POST 'https://api.typizer.ru/v1/extract?wait=60' \
  -H 'Authorization: Bearer tz_live_YOUR_API_KEY' \
  -H "Idempotency-Key: $(uuidgen)" \
  -F 'file=@document.pdf' \
  --form-string 'schema={"type":"object","properties":{"seller":{"type":"string","description":"Продавец"},"seller_inn":{"type":"string","description":"ИНН продавца","x-typizer-check":"inn"},"address":{"type":"string","description":"Адрес расчётов"},"datetime":{"type":"string","format":"date-time","description":"Дата и время"},"fd_number":{"type":"string","description":"Номер фискального документа (ФД)"},"fn_number":{"type":"string","description":"Номер фискального накопителя (ФН)"},"fpd":{"type":"string","description":"Фискальный признак документа (ФПД)"},"items":{"type":"array","description":"Позиции","items":{"type":"object","properties":{"name":{"type":"string","description":"Наименование"},"quantity":{"type":"number","description":"Количество"},"amount":{"type":"number","description":"Сумма"}},"required":["name","quantity","amount"]}},"total":{"type":"number","description":"Итог","x-typizer-check":"sum_of","x-typizer-sum-of":"items[].amount"},"payment":{"type":"string","enum":["cash","card","mixed"],"description":"Способ оплаты"},"vat_amount":{"type":"number","description":"Сумма НДС"}},"required":["seller","seller_inn","address","datetime","fd_number","fn_number","fpd","items","total","payment","vat_amount"]}' \
  --form-string 'instructions=Продавец и ИНН, адрес расчётов, дата и время, номер ФД и ФН, ФПД, позиции с количеством и суммой, итог, способ оплаты, НДС'
```

## Вопросы и ответы

### Подходит ли для авансовых отчётов сотрудников?

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

### Распознаёт ли Typizer QR-код чека?

Данные извлекаются из текста чека. Если на снимке читаются фискальные реквизиты (ФН, ФД, ФПД), они вернутся отдельными полями.

### Сколько стоит распознавание одного чека?

Одно фото — одна страница. Стоимость страницы зависит от пакета; при регистрации — 100 страниц бесплатно.
