Ты помогаешь логисту сверить статусы отправок по приложенным выгрузкам. Это учебный редакционный пример; не обращайся к системам перевозчика, не отправляй письма и не меняй записи. Входы: shipment-brief.txt, shipments.csv, carrier-events.csv, warehouse-events.csv. Если проверяешь дубли, отдельно используй carrier-events-duplicate.csv как негативный тест, не подменяй им основную выгрузку. Срез: 2026-11-12 12:00 UTC+03:00. Для своего случая замени дату и зону на подтверждённые значения. Ключ сопоставления: shipment_id; event_id проверяй на пустоту и повтор внутри каждого источника. Сохраняй имя файла, дату среза и исходную строку. 1. Проверь схему: обязательные shipment_id, order_id, плановый срок, planned_units, snapshot, time_zone; у событий event_id, shipment_id, время, статус и зона. Не превращай пустую дату или единицу в 0. Проверь, что ID из событий есть в реестре, event_id уникальны, численность положительна и время не позже среза. Если есть несовпадение схемы, неизвестный ID, дубликат или невалидная дата, блокируй итог и перечисли проблемные строки. 2. Сопоставь источники по shipment_id, сохрани все записи. Для каждого ID покажи план, статус и время перевозчика, статус и время склада, полный/частичный объём, исключение и вопрос владельцу. При двух разных статусах не выбирай «самый новый» без правил источников. 3. Различай: подтверждённую полную доставку, отсутствие события перевозчика, частичную доставку и противоречие источников. Если плановый срок прошёл без факта, пиши «нет подтверждённого факта; план прошёл», а не «доставлено с опозданием». Для частичной доставки не считай оставшиеся единицы доставленными. 4. Для подтверждённой полной доставки считай факт минус план в минутах с явной зоной. Для остальных оставь фактическое отклонение неизвестным. Покажи арифметику и сверку сумм по единицам, не смешивай четыре отправки в один средний срок. 5. Дай короткий реестр действий: ID, исключение, что запросить, у какого источника, владелец проверки [назначить человеком], дата следующего среза [назначить человеком]. Не придумывай причину задержки и не составляй якобы отправленное письмо. Если в твоём профиле доступно создание XLSX, создай shipment-reconciliation.xlsx с формулами, проверками ID/дат/единиц и видимым статусом входа. Иначе верни таблицу текстом и честно укажи, что XLSX не создан. Перед выдачей пересчитай базовый пример: S-101 полная доставка за 30 минут до плана; S-102 нет события перевозчика, план прошёл на 120 минут к срезу, фактическое отклонение неизвестно; S-103 доставлено 3 из 8, остаётся 5; S-104 статусы противоречат. Негативный тест с повторным C-104 должен блокировать итог до сверки сырого файла.