# Извлечение данных из договоров

Стороны с ИНН и ОГРН, предмет, цена, сроки и порядок оплаты — даже из договора на десятки страниц. У каждого значения — цитата из текста.

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

| Поле | Описание | Тип | Проверка |
| --- | --- | --- | --- |
| `number` | Номер договора | string |  |
| `date` | Дата заключения | string (date) |  |
| `place` | Место заключения | string |  |
| `parties[]` | Стороны | array |  |
| `parties[].role` | Роль (Заказчик, Исполнитель, Поставщик…) | string |  |
| `parties[].name` | Наименование | string |  |
| `parties[].inn` | ИНН | string | ИНН |
| `parties[].ogrn` | ОГРН или ОГРНИП | string | ОГРН |
| `subject` | Предмет договора | string |  |
| `price` | Цена договора | number |  |
| `valid_until` | Срок действия | string (date) |  |
| `payment_terms` | Порядок оплаты | string |  |

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

## JSON Schema

```json
{
  "type": "object",
  "properties": {
    "number": {
      "type": "string",
      "description": "Номер договора"
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "Дата заключения"
    },
    "place": {
      "type": "string",
      "description": "Место заключения"
    },
    "parties": {
      "type": "array",
      "description": "Стороны",
      "items": {
        "type": "object",
        "properties": {
          "role": {
            "type": "string",
            "description": "Роль (Заказчик, Исполнитель, Поставщик…)"
          },
          "name": {
            "type": "string",
            "description": "Наименование"
          },
          "inn": {
            "type": "string",
            "description": "ИНН",
            "x-typizer-check": "inn"
          },
          "ogrn": {
            "type": "string",
            "description": "ОГРН или ОГРНИП",
            "x-typizer-check": "ogrn"
          }
        },
        "required": [
          "role",
          "name",
          "inn",
          "ogrn"
        ]
      }
    },
    "subject": {
      "type": "string",
      "description": "Предмет договора"
    },
    "price": {
      "type": "number",
      "description": "Цена договора"
    },
    "valid_until": {
      "type": "string",
      "format": "date",
      "description": "Срок действия"
    },
    "payment_terms": {
      "type": "string",
      "description": "Порядок оплаты"
    }
  },
  "required": [
    "number",
    "date",
    "place",
    "parties",
    "subject",
    "price",
    "valid_until",
    "payment_terms"
  ]
}
```

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

```json
{
  "number": "44",
  "date": "2026-01-10",
  "place": "г. Санкт-Петербург",
  "parties": [
    {
      "role": "Поставщик",
      "name": "ООО «Опт-Пример»",
      "inn": "0013579240",
      "ogrn": "1020000000129"
    },
    {
      "role": "Покупатель",
      "name": "ООО «Склад на Неве»",
      "inn": "0024681359",
      "ogrn": null
    }
  ],
  "subject": "Поставка строительных материалов по заявкам Покупателя",
  "price": null,
  "valid_until": "2026-12-31",
  "payment_terms": "Оплата в течение 10 рабочих дней с даты поставки"
}
```

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

- Договор — свободный текст на десятки страниц. Условия ищутся по смыслу во всём документе, а у каждого значения есть цитата и страница, откуда оно взято, — юристу не нужно искать пункт заново.
- Если условия в документе нет (например, нет срока действия), поле получает статус missing и null. Для договоров это особенно важно: пропущенное условие видно сразу, а не всплывает позже.
- Для реестра договоров удобна выгрузка в XLSX: одна строка на договор, стороны и суммы в колонках.

## Что проверяет 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":{"number":{"type":"string","description":"Номер договора"},"date":{"type":"string","format":"date","description":"Дата заключения"},"place":{"type":"string","description":"Место заключения"},"parties":{"type":"array","description":"Стороны","items":{"type":"object","properties":{"role":{"type":"string","description":"Роль (Заказчик, Исполнитель, Поставщик…)"},"name":{"type":"string","description":"Наименование"},"inn":{"type":"string","description":"ИНН","x-typizer-check":"inn"},"ogrn":{"type":"string","description":"ОГРН или ОГРНИП","x-typizer-check":"ogrn"}},"required":["role","name","inn","ogrn"]}},"subject":{"type":"string","description":"Предмет договора"},"price":{"type":"number","description":"Цена договора"},"valid_until":{"type":"string","format":"date","description":"Срок действия"},"payment_terms":{"type":"string","description":"Порядок оплаты"}},"required":["number","date","place","parties","subject","price","valid_until","payment_terms"]}' \
  --form-string 'instructions=Номер, дата и место договора, стороны с ИНН и ОГРН, предмет, цена, срок действия, порядок оплаты'
```

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

### Сколько страниц можно отправить?

До 200 страниц и 50 МБ за прогон. Длинные договоры обрабатываются частями с учётом контекста, результат собирается в одну схему.

### Можно ли извлекать нестандартные условия — штрафы, пролонгацию?

Да: добавьте в схему любые поля с описанием — «неустойка за просрочку, % в день», «автопролонгация: да/нет». Описание поля и есть инструкция для извлечения.

### Где хранятся загруженные договоры?

В России. Исходники удаляются по настройке организации — сразу после прогона, через 24 часа, 7 или 30 дней; результаты — 30 или 90 дней или не хранятся.
