📦 Накладные

валовый доход
📱 Мобильная версия
Накладные
Журнал
Расценки
📖 Вики
Загрузка...
Действуют с 01.04.2026 · * +275 ₽ · ** +363 ₽ · Вне таблицы — 21 ₽/км
ГруппаПункт назначенияДо 20 кг, ₽Доп. кг, ₽Дни доставкиСноска
Справочник населённых пунктов Красноярского края
Каноническое имяРайонЗонаАлиасыПартнёры

Добавить пользователя

Все пользователи

🗺️ Рабочие зоны курьеров

Отчёт за день:
Время Отправитель Тема Авто-класс Решение Статус Накладные
Нажмите «Обновить»
Дата
забора / создано
Отправитель Телефон Адрес забора Город Тариф Статус Источник KD-номер
Нажмите «Обновить»
ИНН Название (canonical) ОПФ Город Роли Активность Последний контакт
Нажмите «Обновить»
Время Пользователь Действие Накладная Детали IP
Нажмите «Обновить»
Фото расписки

📦 Накладные

Войдите в систему

📋 История релизов

Загрузка…

🗂 Бэклог

Загрузка…

Добавить правило определения группы

Тест определения группы

Введите номер накладной из базы — Claude попробует определить её группу по текущим правилам.

Назначение групп

Обрабатывает до 50 накладных без группы — Claude определит группу по текущим правилам.

Правила

Загрузка…

📖 Как устроена «Катя доставит»

Это карта системы простыми словами: откуда приходят документы, что с ними происходит, где они хранятся и как принимаются решения.

Технических подробностей здесь нет — только логика работы. Если что-то поменялось в поведении системы, обновите эту страницу.

🗺️ Общая картина

Система собирает документы о посылках из разных источников, приводит их к единому виду, хранит в одной базе и отдаёт наружу — в виде интерфейса, отчётов и архива на Яндекс.Диске.

Всё держится на одном принципе: единый источник правды — это база данных. Файлы на Яндекс.Диске, отчёты, выгрузки — это «слепки», которые формируются из базы, а не наоборот.

Telegramфото и файлы от курьеров
Электронная почтаманифесты и заявки от партнёров
Веб-интерфейсручная загрузка, мобильное приложение
РаспознаваниеClaude читает фото и файлы, достаёт поля
База данныхединый источник правды: накладные, заявки, клиенты
Интерфейсэта админка и приложение курьера
Яндекс.Дискпомесячные таблицы и фото расписок
Отчётыбиллинг партнёрам

📥 Каналы поступления

Документы приходят тремя путями. Каждый ведёт к одному и тому же месту в базе, но по-своему.

Telegram

Электронная почта

Почтовый ящик проверяется автоматически каждые несколько минут. Каждое новое письмо сначала сортируется на один из трёх типов — манифест, заявка на забор или прочее — и в зависимости от типа либо разбирается автоматически, либо отправляется оператору на ручную проверку.

ℹ️ Письмо считается «обработанным» только после явного результата: запись попала в базу, либо ушло уведомление оператору, либо зафиксирована ошибка. Молчаливого «прочитано и забыто» быть не должно — иначе документ потеряется.

Веб-интерфейс

📸 Любое фото при поступлении сначала выравнивается по ориентации — иначе снятые «боком» расписки распознаются плохо. Это работает на всех каналах загрузки фото.

🚚 Путь накладной — от поступления до архива

Накладная — это запись об одном отправлении. Вот её жизненный путь.

1. Поступлениефото / таблица / письмо
2. Распознаваниедостаём номер, города, получателя, вес, оплату
3. Определение группыкакой это партнёр/перевозчик
4. Запись в базуили обновление существующей по номеру
5. В работеждёт доставки
6. Распискакурьер подтверждает доставку фото
7. Доставленостатус и дата зафиксированы
8. Синхронизация и архивпопадает в помесячную таблицу на Диске

Как система понимает, что накладная «та же самая»

Одна накладная может прийти дважды — сначала таблицей-реестром, потом фотографией расписки. Чтобы не плодить дубликаты, запись опознаётся по сочетанию: номер накладной + группа + год + месяц.

🔢 Распознавание иногда «склеивает» дефис в номере (например, 849-2748193 читается как 8492748193). Поэтому для сопоставления используется «канонический номер» — без пробелов и дефисов. Так фото-расписка находит свою таблицу-накладную, даже если дефис потерялся.

🤖 Распознавание и определение группы

Что на фото — накладная или расписка?

Перед разбором система определяет тип изображения и дальше использует подходящий способ чтения. Накладная — это документ об отправлении; расписка — подтверждение получения.

Сортировка писем

Каждое письмо относится к одному из типов:

⚠️ Сортировщик не всегда уверен. Поверх него стоят «страховочные правила»: например, если в теме письма есть слово «заявка», письмо принудительно считается заявкой на забор, даже если автомат назвал его манифестом. А если уверенности мало — письмо уходит оператору на ручную разметку, а не теряется.

Определение группы

«Группа» — это принадлежность накладной к конкретному партнёру или перевозчику (например, Major Express, Кинетика). От группы зависят тарифы и отчёты. Откуда она берётся — по убыванию частоты:

🚦 Статусы доставки

Статус показывает, на каком этапе находится отправление.

не доставлено / в работе доставлено забрано просрочено аннулирована

🔒 Доставленную накладную нельзя вернуть в «не доставлено». Это защита от случайной потери факта доставки — действует и при ручной правке, и при загрузке расписки.

✍️ Расписки и обогащение данных

Расписка — это подтверждение получения груза. Основной путь сегодня: курьер сам выбирает накладную или заявку в приложении и прикрепляет к ней фото — расписка гарантированно попадает к нужной записи. Фото при этом всё равно читается автоматикой: из него берутся отметка о доставке, дата и рукописная фамилия получателя.

Запасной путь — загрузить «просто фото» (например, в Telegram): тогда система сама распознаёт номер и ищет накладную по текущему и двум предыдущим месяцам — расписку часто загружают с задержкой.

🧩 Расписка дополняет, но не перезатирает. Из расписки переносится результат доставки — статус, дата, отметка о получении. А вот справочные поля (получатель, адрес, вес) заполняются только если в накладной они были пустыми. Логика простая: данные перевозчика из реестра надёжнее, чем распознанный от руки текст расписки.
📅 Для расписки авторитетна дата загрузки в систему, а рукописная дата с фото — лишь подсказка. Распознавание иногда путает год (печатает 2016 вместо 2026) — такие явно неверные даты в отчётах отбрасываются.

📤 Заявки на забор

Заявка на забор — это просьба партнёра приехать и забрать груз. Она живёт отдельно от накладных, потому что у неё другая жизнь: время «с/по», адрес забора, своё содержимое.

Письмо с заявкойот партнёра: PDF или текст
Разбор и нормализациятелефон, адрес, отправитель, признак «в зоне»
Заявка в спискекурьер видит её в приложении
Курьер прикрепил фото грузасоздаётся черновик накладной, заявка становится «связана»

Когда сортировщик писем уверен, заявка заводится полностью автоматически. Оператору уходят только сомнительные письма и письма, из которых не удалось извлечь данные, — молча ничего не теряется.

🤝 Связь заявки с накладной ставит только человек. Автоматических подсказок «возможно, это та накладная» больше нет: они ошибались на несвязанных грузах. Связь создаёт само действие курьера — прикрепление фото груза к конкретной заявке.

Статусы заявки: открыта связана закрыта отменена не смогли связаться просрочена

🌙 Недозвоны курьер отмечает прямо в заявке («не дозвонились ×N» — заявка остаётся в работе). Если к концу дня заявку с недозвонами так и не закрыли, она автоматически переводится в «не смогли связаться» и попадает в вечерний отчёт — оператор возвращает её заказчику на актуализацию данных.

👥 Клиенты и города

Справочник клиентов

Один и тот же клиент в разных документах пишется по-разному («АО АбИнБев Эфес», «АбИнБев», «Эфес»). Чтобы это был один клиент, ведётся единый справочник. Каждый встреченный отправитель/получатель приводится к канонической записи с ИНН.

Как система понимает, что это тот же клиент (по порядку):

При повторной встрече к существующему клиенту просто добавляются новые варианты написания, телефоны и роли — ничего не теряется.

🧹 Если один клиент всё же завёлся дважды, дубликаты объединяются специальной операцией слияния: все ссылки, телефоны и псевдонимы переносятся на «победителя», дубль удаляется.

Справочник городов

Города ведутся отдельным списком с регионом и вариантами написания. Он нужен, чтобы понимать, относится ли точка к Красноярскому краю (признак «в зоне»), и чтобы сопоставлять обрезанные распознаванием названия («Зеленогорск(Кра») с правильными.

💾 Хранение и Яндекс.Диск

База данных — главный и единственный источник правды. Яндекс.Диск — это витрина и архив, которые формируются из базы:

Как разложено на Диске
Накладные / группа / год / «2026-05 Май».xlsx
Расписки / группа / год / «2026-05 Май» / номер_время.jpg

📊 Отчёты партнёрам

Из базы можно собрать помесячный счёт партнёру (реализован для Major Express). В отчёт попадают только отработанные отправления выбранного месяца.

Каждая строка делится на два типа по тому, где находится «крайняя точка в Красноярском крае»:

Имя клиента в отчёте берётся из единого справочника (чтобы не было разнобоя), тариф — из таблицы расценок по нормализованному названию города.

📌 Месяц в реестре партнёра — это не обязательно месяц фактической работы. Бывает, что строки за март-апрель помечены отменёнными, а реально отработанные лежат в майском реестре. В отчёт за месяц попадают только отработанные строки именно этого реестра-месяца. Ручные корректировки (штрафы, особые ставки) в базе не хранятся — оператор правит готовую таблицу вручную.

Помимо помесячного счёта, система сама рассылает регулярные сводки: вечерний отчёт дня в Telegram (19:00), ежедневные отчёты по Major Express и Кинетике на электронную почту (19:30), понедельничную сводку аномалий почты (09:00) и ночную сводку распознаваний (04:30, см. следующий раздел).

Проверка отчёта перед отправкой

Дневной отчёт можно переотправить вручную за любой день — из раздела «Почта» на сайте или с вкладки «Все накладные» в мобильном приложении. В приложении перед отправкой отчёт можно проверить: кнопка разворачивает ленту с теми же строками, что уйдут в письмо, — приёмки и доставки с номерами заявок и накладных, получателями, курьером и фотографией каждой накладной. Накладные без фото помечаются предупреждением (они попадут в таблицу письма, но не в фотоархив). Если при сверке нашлось несоответствие, группу и статус накладной можно поправить прямо в ленте — правка сохраняется сразу и попадает в историю изменений; карточка помечается «в этот отчёт уже не попадёт». Кнопка «Проверено — отправить» внизу ленты отправляет отчёт без лишних вопросов.

📮 Система сама следит, нужна ли ещё ручная проверка: если 10 дней подряд в отчётных данных (группа, статус, дата доставки, города накладных отчётных групп) не было ни одной ручной правки, администраторам приходит сообщение в Telegram с предложением включить отправку отчёта сразу на конечного получателя. Подсказка повторяется не чаще раза в 10 дней; автоматические изменения (импорт писем, бот) правками не считаются.

🔍 Самоконтроль системы

Система записывает не только сами данные, но и то, как они менялись и как автоматика принимала решения.

🌙 Каждую ночь в 04:30 система сверяет одно с другим: если человек исправил поле после автозаполнения — это ошибка автоматики, если не тронул — верный ответ. Сводка с точностью методов приходит администраторам в Telegram. Ночи без событий пропускаются молча.

Зачем это нужно: по накопленной статистике видно, каким методам можно доверять больше, а где ИИ со временем можно заменить простыми правилами. Разметка для этого копится сама, как побочный продукт обычной работы, — никого не нужно просить размечать данные вручную.

💬 Чат-помощник администратора

Кнопка «✦» на сайте (справа внизу) и на главном экране мобильного приложения — только для администраторов.

Помощник отвечает на вопросы о работе системы двумя способами:

📖 Помощник читает эту страницу как источник знаний об устройстве системы. Если поведение системы поменялось — обновите вики, и помощник сразу начнёт отвечать по-новому. Если данных нет ни в вики, ни в журналах, он честно говорит, что не знает. Вопросы администраторов пишутся в журнал действий.

🗂️ Справочник таблиц

Что именно хранится в базе. Названия даны для справки — в работе они скрыты за интерфейсом.

Основные данные

ТаблицаЧто хранитКлючевое правило
nakladnye
Накладные
Все отправления: номера, города, получатель, оплата, вес, статус доставки, дата, ссылка на фото расписки, признак архива.Уникальна по номеру + группе + году + месяцу. Доставку нельзя «откатить».
pickup_orders
Заявки на забор
Просьбы приехать за грузом: адрес и время забора, вложение, признак «в зоне», подсказанная и подтверждённая связь с доставкой.Живут отдельно от накладных. Уникальны по своему номеру.
counterparties
Клиенты
Единый справочник юр.лиц, ИП и частных лиц: каноническое имя, ИНН, псевдонимы, телефоны, роли.Один клиент = одна запись; дубли сливаются. Уникальность по ИНН.
cities
Города
Справочник городов: регион, варианты написания.Определяет признак «в зоне» (Красноярский край).
prices
Расценки
Тарифы по направлениям и группам, с периодом действия.Версионируются датами «действует с / по».

Почта и обработка

ТаблицаЧто хранит
email_classificationСостояние разбора каждого письма: какой тип определён, обработано ли, когда уведомляли оператора.
email_importsСвязь «письмо → созданная накладная или заявка». Гарантирует, что у каждого импорта есть след.
address_normalize_cache
party_normalize_cache
Запомненные ответы внешнего справочника по адресам и организациям — чтобы не спрашивать одно и то же дважды. Можно безопасно очистить.
kd_number_seqСчётчик номеров для веб-заказов (вид KD-ГОД-НОМЕР).

Служебное

ТаблицаЧто хранит
usersПользователи системы и их роли (администратор, суперадминистратор, курьер).
action_logЖурнал действий: кто, что и когда сделал — для разбора инцидентов.
история_измененийПо-полевая история правок накладных и заявок: что было → что стало, кто и откуда. Пишется самой базой, поэтому видит даже ручные правки мимо приложения.
распознаванияЖурнал ответов автоматики: задача, метод, ответ, уверенность. Основа ночной сводки точности.
group_hintsПравила определения группы со вкладки «Группы» — словесные описания бланков для Claude.
receipt_examplesУдачно распознанные расписки — показываются ИИ как примеры при чтении следующих фото.
courier_zonesЗоны обслуживания курьеров: какой курьер возит в какой город, дни и сроки доставки.
roadmap_tasksЗадачи вкладки «Задачи» (дорожная карта развития системы).
schema_migrationsТехнический список применённых изменений структуры базы.

📚 Глоссарий

ТерминЧто это
НакладнаяЗапись об одном отправлении — основная единица в системе.
Манифест / реестрТаблица со списком отправлений от партнёра (приходит файлом или письмом).
РаспискаПодтверждение получения груза; обычно фото от курьера.
Заявка на заборПросьба партнёра приехать и забрать груз.
ГруппаПринадлежность накладной к партнёру/перевозчику; влияет на тарифы и отчёты.
Клиент (контрагент)Отправитель или получатель из единого справочника.
Канонический номерНомер накладной без пробелов и дефисов — для надёжного сопоставления.
В зонеПризнак, что точка находится в Красноярском крае.
Черновик накладнойНакладная, создаваемая автоматически, когда курьер прикрепляет фото груза к заявке на забор; именно она связывает заявку с доставкой.
История измененийЖурнал «что было → что стало» по каждому полю; пишется самой базой и видит даже правки мимо приложения.
Журнал распознаванийЗаписанные ответы автоматики с методом и уверенностью; из него ночная сводка считает точность.
АрхивСтарые записи, спрятанные из обычных списков.

Эта страница — обзор логики системы для операторов. Технические детали и регламенты — в служебной документации проекта.

📷 Обработка расписок...
Помощник
отвечает по вики и журналам системы
Спросите, как устроена система или что произошло с конкретной накладной.

Например:
«Почему накладная 212693 попала в группу Major?»
«Кто прислал накладную 4160 и с какой почты?»
«Кто из курьеров обработал накладную 212705?»