Отлично, **последняя проверка больше не находит случаев «ФИО сертификата заполнено, ФИО связанного отчёта пустое»**. Этот пункт закрываем.
Дальше — **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 и пропуски оценок по последним выполненным запросам уже не воспроизводились.