# Распознавание актов выполненных работ и оказанных услуг

Исполнитель и заказчик, договор-основание, перечень работ и услуг, суммы и итог — из подписанного скана или PDF акта.

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

| Поле | Описание | Тип | Проверка |
| --- | --- | --- | --- |
| `number` | Номер акта | string |  |
| `date` | Дата акта | string (date) |  |
| `contractor` | Исполнитель | object |  |
| `contractor.name` | Наименование | string |  |
| `contractor.inn` | ИНН | string | ИНН |
| `customer` | Заказчик | object |  |
| `customer.name` | Наименование | string |  |
| `customer.inn` | ИНН | string | ИНН |
| `contract` | Договор-основание | object |  |
| `contract.number` | Номер договора | string |  |
| `contract.date` | Дата договора | string (date) |  |
| `services[]` | Работы и услуги | array |  |
| `services[].name` | Наименование | string |  |
| `services[].amount` | Сумма | number |  |
| `vat_amount` | НДС (null — без НДС) | number |  |
| `total` | Итого | number | сумма строк |

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

## JSON Schema

```json
{
  "type": "object",
  "properties": {
    "number": {
      "type": "string",
      "description": "Номер акта"
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "Дата акта"
    },
    "contractor": {
      "type": "object",
      "description": "Исполнитель",
      "properties": {
        "name": {
          "type": "string",
          "description": "Наименование"
        },
        "inn": {
          "type": "string",
          "description": "ИНН",
          "x-typizer-check": "inn"
        }
      },
      "required": [
        "name",
        "inn"
      ]
    },
    "customer": {
      "type": "object",
      "description": "Заказчик",
      "properties": {
        "name": {
          "type": "string",
          "description": "Наименование"
        },
        "inn": {
          "type": "string",
          "description": "ИНН",
          "x-typizer-check": "inn"
        }
      },
      "required": [
        "name",
        "inn"
      ]
    },
    "contract": {
      "type": "object",
      "description": "Договор-основание",
      "properties": {
        "number": {
          "type": "string",
          "description": "Номер договора"
        },
        "date": {
          "type": "string",
          "format": "date",
          "description": "Дата договора"
        }
      },
      "required": [
        "number",
        "date"
      ]
    },
    "services": {
      "type": "array",
      "description": "Работы и услуги",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Наименование"
          },
          "amount": {
            "type": "number",
            "description": "Сумма"
          }
        },
        "required": [
          "name",
          "amount"
        ]
      }
    },
    "vat_amount": {
      "type": "number",
      "description": "НДС (null — без НДС)"
    },
    "total": {
      "type": "number",
      "description": "Итого",
      "x-typizer-check": "sum_of",
      "x-typizer-sum-of": "services[].amount"
    }
  },
  "required": [
    "number",
    "date",
    "contractor",
    "customer",
    "contract",
    "services",
    "vat_amount",
    "total"
  ]
}
```

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

```json
{
  "number": "57",
  "date": "2026-09-30",
  "contractor": {
    "name": "ООО «Разработка и сопровождение»",
    "inn": "0055667788"
  },
  "customer": {
    "name": "АО «Условный завод»",
    "inn": "0044332211"
  },
  "contract": {
    "number": "12/2026",
    "date": "2026-02-01"
  },
  "services": [
    {
      "name": "Сопровождение информационной системы, сентябрь 2026 г.",
      "amount": 180000
    },
    {
      "name": "Доработка отчётов",
      "amount": 45000
    }
  ],
  "vat_amount": null,
  "total": 225000
}
```

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

- Акт ссылается на договор: номер и дата договора-основания — отдельные поля, по ним удобно сопоставлять акты с договорами в учёте.
- На сканах подписанных актов печати и подписи часто перекрывают текст. Источник у каждого значения показывает, где именно было найдено значение, — спорные места видно сразу.
- Период оказания услуг встречается и как диапазон дат, и как «за сентябрь 2026 г.». Опишите в схеме, в каком виде он вам нужен.

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

- ИНН исполнителя и заказчика — контрольные цифры.
- Итого — сумма строк работ и услуг против итоговой суммы.

## Вызов 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":{"number":{"type":"string","description":"Номер акта"},"date":{"type":"string","format":"date","description":"Дата акта"},"contractor":{"type":"object","description":"Исполнитель","properties":{"name":{"type":"string","description":"Наименование"},"inn":{"type":"string","description":"ИНН","x-typizer-check":"inn"}},"required":["name","inn"]},"customer":{"type":"object","description":"Заказчик","properties":{"name":{"type":"string","description":"Наименование"},"inn":{"type":"string","description":"ИНН","x-typizer-check":"inn"}},"required":["name","inn"]},"contract":{"type":"object","description":"Договор-основание","properties":{"number":{"type":"string","description":"Номер договора"},"date":{"type":"string","format":"date","description":"Дата договора"}},"required":["number","date"]},"services":{"type":"array","description":"Работы и услуги","items":{"type":"object","properties":{"name":{"type":"string","description":"Наименование"},"amount":{"type":"number","description":"Сумма"}},"required":["name","amount"]}},"vat_amount":{"type":"number","description":"НДС (null — без НДС)"},"total":{"type":"number","description":"Итого","x-typizer-check":"sum_of","x-typizer-sum-of":"services[].amount"}},"required":["number","date","contractor","customer","contract","services","vat_amount","total"]}' \
  --form-string 'instructions=Номер и дата акта, исполнитель и заказчик с ИНН, номер и дата договора, работы и услуги с суммами, НДС, итого'
```

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

### Можно ли обработать сразу сотни актов за квартал?

Да: до 500 файлов или ZIP-архив за один запрос пакетной обработки, общая выгрузка в XLSX или CSV. В кабинете — то же самое без кода.

### Что делать, если сумма прописью не совпадает с суммой цифрами?

Добавьте в схему оба поля. Typizer извлечёт каждое со своим источником; расхождение будет видно в результате, а не скрыто «исправлением».

### Поддерживаются ли акты сверки?

Да, это тоже документ с таблицей: опишите нужные поля — сальдо, обороты по датам, документы-основания — и получите их в своей схеме.
