Commit Graph

1 Commits

Author SHA1 Message Date
Дмитрий 8177cac39b feat(смс-клиент): канал умеет рассказать судьбу сообщения — разъём и читатель МТС
Этап 5, Task 1. Кода, который что-то меняет в базе или в деньгах, здесь нет —
только новая способность канала и её читатель для МТС.

Что появилось:
- SmsDeliveryState — словарь судеб ПОРТАЛА (везу / доставлено / не доставлено /
  оператор не отправил). Один дом на все каналы: у МТС свои слова, у следующего
  оператора будут другие, а экран и деньги обязаны говорить одним языком.
- SmsDeliveryReport — что канал рассказал про одно сообщение.
- SmsDeliveryReporter — НЕОБЯЗАТЕЛЬНАЯ способность канала. Отдельно от SmsProvider
  намеренно: канал, умеющий только отправлять, остаётся годным каналом. Когда у
  Т2, Мегафона и Билайна появятся кабинеты, их файл реализует этот разъём — и
  журнал, экран, деньги, итоги не тронутся ни строчкой (решение владельца 31.07).
- MtsSmsProvider::fetchDelivery — читатель, до 1000 номеров сообщений за запрос.

Форма ответа взята из ЖИВОЙ пробы 30.07 (журнал В-211), а НЕ из документации МТС:
там описан вход по логину-паролю (events_info), а мы ходим по токену и получаем
data[].statuses[]. Тест на выдуманной форме охранял бы выдумку (В-72).

Незнакомое слово оператора НЕ угадывается: судьба остаётся пустой, слово уходит в
журнал. Угадать значило бы соврать про деньги — за «не доставлено» клиенту
возвращаются рубли.

Цена МТС (cost) сохраняется как есть, в рубли не переводится: единицы поля
неизвестны, выдумывать ответ внешней стороны запрещено.

Проверено: 7 тестов зелёные, оба выреза покраснили ровно те тесты, что должны
(подмена NotSent на «не доставлено» и угадывание незнакомого слова). Соседи —
36/36. phpstan — ровно 2 чужие давние, pint чисто.
2026-07-31 05:46:20 +03:00