Загрузка данных


Отлично, **последняя проверка больше не находит случаев «ФИО сертификата заполнено, ФИО связанного отчёта пустое»**. Этот пункт закрываем.

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

| certificateRow | Мероприятие | Сертификат |
| -------------: | ----------: | ---------- |
|           3518 |       16001 | 079875     |
|           6919 |       16304 | 083341     |
|           9715 |       15918 | 086145     |
|          11626 |       16288 | 088060     |

Получите актуальные идентификаторы:

```sql
SELECT
    c.kod AS certificateRow,
    c.kodMerop,
    c.kodMember,
    c.kodReport,
    c.sessionId,
    c.participantId AS certificateParticipantId,
    m.participantId AS memberParticipantId,
    m.profileId,
    c.mtsCertNumber,
    c.formReceived,
    c.firstSeenAt,
    c.lastCheckAt,
    c.lastError
FROM dbo.dat_mts_certificates AS c
LEFT JOIN dbo.dat_members AS m ON m.kod = c.kodMember
WHERE c.kod IN (3518, 6919, 9715, 11626)
ORDER BY c.kod;
```

Для тех, у кого ещё `formReceived=0`, нужна **сырая выгрузка постформы МТС**:

```text
GET /v3/eventsessions/{sessionId}/form-passing/export
```

Используйте существующий способ авторизации демона. Если ответ разбит на страницы, нужны все страницы.

В ответе ищем участника по обоим `participantId`, номеру сертификата и `userId`, если он присутствует. **`dat_mts_certificates.formData` для этой проверки не подходит: там сохранён объект сертификата.**

| Что обнаружится                                    | Следующее действие                                                                         |
| -------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| Участник есть, ответы заполнены                    | Проверить, почему демон отбрасывает или не связывает постформу                             |
| Участник есть, ответы пустые                       | Проверить исходную форму и содержимое экспорта                                             |
| Отличается `participantId`, совпадает пользователь | Проверить сопоставление внутри того же мероприятия                                         |
| Участника нет во всём экспорте                     | Сверить наличие ответов в интерфейсе МТС; при наличии — передать расхождение поддержке МТС |

Пришлите результат SQL и экспорт **одного из этих мероприятий** — этого достаточно для начала. Токен авторизации не нужен.

Оставшийся порядок:

1. **18 расхождений по постформам** — текущий приоритет.
2. **Зависшее письмо** — найти `sendKod` в исходном аудите: пустая выборка отправлений не подтверждает отправку.
3. **Несоответствия формата и количества слушателей** — сравнить исходные ответы с результатом обработки группы/индивидуального участия.
4. **Повторный email в мероприятии 15732** — проверить идентификаторы, не объединяя записи только по email.

Отсутствующие ссылки мероприятия 16028 и пропуски оценок по последним выполненным запросам уже не воспроизводились.