Выезды, наряды и договор
Всё, что происходит после продажи: наряды монтажника, данные для договора и подпись на телефоне, календарь, обзвон, план выездов по монтажникам и бригадам, отчёты по выездам.
Содержание раздела
- Наряды монтажника
- Данные для договора: вносит монтажник у клиента
- Съёмка паспорта
- Кто что видит
- Главная монтажника
- Подписание договора на телефоне
- Как проходит подписание
- Ограничения кода
- Включение и границы первой версии
- Тексты договоров на интернет
- Договор с физическим лицом
- Договор с юридическим лицом и ИП
- Чего нет в карточке — берётся из ФНС
- Лицензия оператора в договоре
- Календарь и синхронизация с телефоном
- Синхронизация по CalDAV
- Обзвон
- Первый звонок роботом
- План выездов
- Как собирается план
- Ручная правка: «Кто едет» и перетаскивание
- Время в пути: маршрутизатор по дорогам
- Утверждение и рассылка
- Свободные окна
- Несколько организаций
- График монтажников и бригады
- Кто утверждает и напоминание
- Отчёты по выездам
Наряды монтажника
Срезы «Сегодня / Завтра / Неделя / Все» показывают число нарядов, в шапке — сколько нарядов в выбранном срезе; если список длинный, видно «показано 200 из N».
URL: /admin/crm/montazh/ — вид «Наряды» календаря
(переключатель «Календарь | Наряды» на обеих страницах). Мобильный сценарий
«мой наряд на день»: назначенные монтажи карточками — дата и окно времени,
клиент, телефон одним касанием, адрес со ссылкой «маршрут», тариф и комментарий.
Просроченный наряд помечается красным. Кнопка «Выполнено»
переводит сделку в стадию «Подключено» её воронки прямо с телефона и оставляет
системную заметку; «Перенести» сдвигает дату с причиной.
Монтажник (группа installer) видит только свои наряды и не может
закрыть чужой; менеджеру доступны все наряды и фильтр по монтажнику.
Выезды на день раскладывает «План выездов»; напарник бригады, которого нет в нарядах, получает свой день сообщением при рассылке плана.
Данные для договора: вносит монтажник у клиента
Паспортные данные нельзя спрашивать по телефону: личность абонента устанавливают при предъявлении документа. Поэтому вносит их тот, кто приехал к клиенту, — прямо из своего наряда. До выезда этих данных в системе нет, и договор без них не подписывается: экран подписания сообщает «Не внесены паспортные данные клиента».
В карточке наряда появляется строка «Данные для договора» — пока наряд не закрыт. Рядом со строкой видно, заполнены ли данные: если да, показываются последние цифры номера, а не сам паспорт.
flowchart LR
A["Монтажник
приехал к клиенту"] --> B["Открывает наряд
«Данные для договора»"]
B --> C{"Как вносить?"}
C -->|"с документа"| D["Заполняет поля
вручную"]
C -->|"съёмка"| E["Фотографирует
разворот"]
E --> F["Распознавание"]
F --> G["Поля заполнены
— сверить с паспортом"]
D --> H["Сохранить"]
G --> H
H --> I["Данные в карточке клиента"]
I --> J["Договор подписывается
росчерком и кодом из СМС"]
E -. "снимок не сохраняется" .-> X["удалён после
распознавания"]
Съёмка паспорта
Кнопка «Сфотографировать паспорт» открывает заднюю камеру телефона. Со снимка читаются серия и номер, кем и когда выдан, дата рождения и адрес регистрации; даты приводятся к нужному виду сами.
Снимок нигде не сохраняется. Он живёт внутри одного запроса: уходит на распознавание и удаляется. Ни в хранилище, ни в базе, ни в журнале его нет — фотография паспорта самый чувствительный вид персональных данных, и держать её нам незачем.
Распознавание экономит набор, но не отменяет проверку: поля нужно сверить с документом до сохранения. Отвечает за верность данных тот, кто держит паспорт в руках.
Кто что видит
Доступ к персональным данным даётся под задачу, а не «на всякий случай».
| Что | Как устроено |
|---|---|
| Чей наряд | Только свой: чужой наряд монтажнику не открывается |
| Когда можно вносить | Пока наряд не закрыт; после закрытия данные уже в договоре |
| Что видно после сохранения | «Заполнено» и последние цифры номера, а не сами данные |
| Раздел «Клиенты» | Монтажнику закрыт: в карточках клиентов лежат паспорта, а для работы хватает наряда |
| Журнал | Пишется, кто открыл данные, кто их изменил и какие именно поля |
Требование 152-ФЗ вести учёт доступа к персональным данным закрывается журналом: фиксируются и правки, и просмотры. Просмотр одного клиента одним сотрудником записывается не чаще раза в полчаса — иначе журнал состоял бы из одних открытий карточки.
flowchart TB
subgraph M["Монтажник в поле"]
N["Свои наряды"]
F["Данные для договора
своего наряда"]
end
subgraph Z["Закрыто монтажнику"]
K["Раздел «Клиенты»"]
P["Паспорта других абонентов"]
D["Чужие наряды"]
end
N --> F
F --> L["Журнал:
кто открыл и что изменил"]
M -.->|"нет доступа"| Z
Состав данных совпадает с полями группы «Договор — физ. лицо» в карточке сделки: серия и номер, кем выдан, дата выдачи, дата рождения, адрес регистрации. После сохранения они переносятся в карточку клиента — оттуда их берут и договор, и выгрузка СОРМ.
Главная монтажника
Общая главная с выручкой и графиками монтажнику не нужна и по правам закрыта. Вместо неё он видит два блока: «Мои монтажи» — на сегодня с адресом, окном времени и телефоном, ниже ближайшая неделя; и «У меня в подотчёте» — что числится за ним на складе.
Если есть наряды прошедшей даты, которые он не закрыл, в заголовке появляется метка «просрочено: N». Позиции с серийными номерами помечаются отдельно — их нужно вернуть или списать на клиента.
Блок видят только те, кто состоит в монтажной группе (по умолчанию
installer, набор групп задаётся в настройках CRM). Остальным
сотрудникам главная не меняется.
Подписание договора на телефоне
Клиент подписывает договор прямо при подключении — на телефоне монтажника, пальцем на экране, с подтверждением одноразовым кодом из СМС. Это простая электронная подпись по 63-ФЗ: ключ — код, подписант определяется по номеру телефона, на который код пришёл. Соглашение об использовании подписи входит в сам договор отдельным разделом.
sequenceDiagram
participant M as Монтажник
participant S as Система
participant C as Клиент
M->>S: Открывает договор из наряда
S-->>M: Текст договора с данными клиента, тарифом и адресом
C->>M: Читает и расписывается пальцем на экране
M->>S: Запрос кода
S-->>C: СМС с одноразовым кодом
C->>M: Называет или вводит код
M->>S: Код и подпись
S->>S: Проверка кода, PDF со штампом, запись в реестр
S-->>C: Письмо с PDF и СМС со ссылкой на копию
Как проходит подписание
- В наряде монтажник открывает договор сделки. Система заранее проверяет, всё ли готово: паспортные данные клиента, мобильный телефон в сделке, включена ли функция.
- Клиент читает договор и расписывается. Поле подписи разворачивается на весь экран; при повороте телефона росчерк не растягивается.
- Клиенту уходит СМС с кодом из 6 цифр. После ввода кода собирается PDF: на последней странице — штамп с подписью, временем и контрольной суммой текста договора.
- Договор попадает в реестр подписанных, копия уходит клиенту письмом с PDF (если указан e-mail) и СМС со ссылкой. Сбой доставки подписание не отменяет.
Ограничения кода
| Параметр | Значение |
|---|---|
| Длина кода | 6 цифр |
| Срок действия | 10 минут |
| Попыток ввода | 5 |
| Кодов на одно подписание | 5 |
| СМС на один номер | не чаще 1 в минуту и 5 в час |
В базе хранится не сам код, а его отпечаток. Каждый шаг пишется в журнал аудита.
Включение и границы первой версии
- Включается настройкой
CONTRACT_ESIGN_ENABLED(по умолчанию выключено). Отдельно — письмо с PDF (CONTRACT_ESIGN_EMAIL) и СМС со ссылкой (CONTRACT_ESIGN_SMS_NOTIFY). - Первая версия — только физические лица и только при внесённых паспортных данных. Юрлица подписывают по-прежнему.
- Нужен мобильный телефон клиента в сделке — на него приходит код.
Тексты договоров на интернет
Договор с клиентом собирается из шаблона, который правят в
Продажи → Документы: «Договор (физлицо)» и «Договор (юрлицо)»
для сделок типа «Интернет». Эталонные тексты лежат в репозитории
(billing/templates/video/docs/seed/) и ставятся командой
manage.py install_contract_fiz [--doc contract_ur] --apply; прежний текст
она сохраняет в каталог резервных копий (папка doc_templates).
Договор с физическим лицом
Десять разделов: предмет и адрес подключения, подключение и оборудование, расчёты, права и обязанности сторон, ответственность и претензии, персональные данные, срок и расторжение, подписание, реквизиты и подписи.
- Оплата авансовая, расчётный период — календарный месяц; при нуле на лицевом счёте услуги приостанавливаются, доступен обещанный платёж.
- Об изменении тарифов оператор извещает не менее чем за 10 дней.
- Претензии принимаются в течение шести месяцев, рассматриваются в течение 60 дней.
- Подписать можно на бумаге или простой электронной подписью на телефоне: росчерк клиента встаёт на строку подписи абонента, рядом с подписью и печатью оператора.
Договор с юридическим лицом и ИП
Тринадцать разделов. Отличия от договора с физлицом:
- оплата по счёту авансом не позднее 10-го числа расчётного месяца, разовые услуги — в течение 5 рабочих дней с даты счёта;
- НДС берётся из реквизитов организации-оператора;
- приёмка: акт или УПД до 5-го числа следующего месяца, мотивированный отказ — 5 рабочих дней, иначе услуги считаются принятыми;
- при перерыве по вине оператора дольше 24 часов подряд абонентская плата уменьшается пропорционально — по заявлению абонента;
- срок — год с продлением, расторжение с уведомлением за 30 дней;
- обмен документами через ЭДО, споры — в арбитражном суде по месту нахождения оператора.
- ИП (ИНН из 12 цифр) получает свою вводную: «действующий на основании записи в ЕГРИП», ОГРНИП вместо ОГРН, без «в лице».
Подпись на телефоне для юрлиц выключена: организация подписывает на бумаге с печатью или через ЭДО.
Чего нет в карточке — берётся из ФНС
Если в карточке клиента не хватает реквизитов, договор дополняет их открытыми данными ФНС по ИНН (тот же источник, что у разбора платежей): официальное название организации, руководитель (в строке «в лице» и под подписью), КПП, ОГРН и адрес, а для ИП — ФИО предпринимателя вместо торгового названия. Ответ кешируется на сутки. Карточка клиента при этом не меняется: её реквизиты уходят в СОРМ, и правит их сотрудник. Адрес подключения: если у сделки адрес не указан, берётся адрес дома клиента.
Лицензия оператора в договоре
Номер лицензии на услуги связи — обязательное сведение договора. Он хранится у каждой
организации: карточка организации → вкладка
«Реквизиты» → поле «Лицензия на услуги связи». Вписывать нужно так, как в реестре
Роскомнадзора, вместе с видом услуг, например
№ Л030-00000-00/00000000 от 01.01.2020 (телематические услуги связи) —
в договоре печатается «лицензией Оператора» и далее это значение целиком. Поле пустое —
строка лицензии в договор не попадает.
Доступ в сеть Интернет — это телематические услуги связи, и лицензия должна быть именно на них: лицензия на предоставление каналов связи такие услуги не покрывает.
Календарь и синхронизация с телефоном
URL: /admin/crm/calendar/. Монтажи и задачи CRM на одной
месячной сетке; на телефоне — списком по дням. Переключатель слоёв «Всё /
Монтажи / Задачи», цвет события — по стадии сделки или срочности задачи
(просрочено, сегодня, позже), легенда рядом. Монтаж или задачу можно создать
прямо с календаря (нажатие на пустой день) и перенести перетаскиванием на другую
дату. Переключатель «Календарь | Наряды» ведёт к нарядам.
Синхронизация по CalDAV
События сами попадают в календарь рабочей почты сотрудника на почтовом сервере системы. Этот календарь подключается на телефоне как обычный (CalDAV) — выезды и задачи видны в штатном календаре смартфона.
- Монтаж: когда у сделки назначены дата, монтажник и стадия
«Назначен монтаж», событие появляется в календаре монтажника. Повторное
назначение обновляет то же событие, дублей нет. Дополнительно монтажнику
уходит письмо с приглашением
.ics— оно открывается в любом телефоне, даже без ящика на почтовом сервере системы. - Задачи CRM со сроком — событием в календаре исполнителя. Изменили текст, срок или тип, отметили выполненной — событие обновляется; переназначили — переезжает к новому исполнителю; удалили — исчезает. Выгружаются задачи со сроком с сегодняшнего дня.
- Чей календарь: ящик сотрудника в домене организации сделки.
- Настройки CRM:
CRM_CALDAV_SYNC(вкл/выкл, по умолчанию включено),CRM_CALDAV_GROUPS— чьи задачи синхронизировать (по умолчанию монтажники). Сверка — командаmanage.py crm_caldav_sync. - Запись в календарь идёт в фоне после сохранения: сбой календаря не мешает сохранить сделку или задачу.
Обзвон
CRM → «Обзвон» (/admin/crm/obzvon/) — очередь звонков по заявкам,
которым пора назначить или подтвердить монтаж. Своей таблицы у очереди нет: она
собирается из сделок на этапах из настроек — «Тариф выбран»
(FIELD_CALL_AGREE_STAGES, согласовать дату) и «Назначен монтаж»
(FIELD_CALL_CONFIRM_STAGES, подтвердить выезд).
- Срезы: «К звонку», «Перезвонить позже», «У менеджера», «Выезд подтверждён»; в сводке — звонки сегодня, согласованные и подтверждённые, отказы.
- В строке — клиент, телефон с кнопкой звонка, адрес, этап, вердикт техвозможности и история попыток.
- Результат звонка: дата согласована (дата и окно пишутся в сделку), выезд подтверждён, перенос, отказ с причиной (сделка закрывается по правилам воронки), не дозвонились.
- Попытки — это задачи CRM. После трёх недозвонов менеджер сделки получает задачу перезвонить; когда он её закроет, счёт начинается заново.
- Этап меняется тем же запросом, что на доске, — с правилами входа и автоматизациями.
Первый звонок роботом
Подтвердить выезд может робот автообзвона: кнопка «Роботу» у заявки или «Подтвердить роботом (N)» для всей очереди. Робот называет дату и время монтажа и просит нажать 1 — «подтверждаю» или 2 — «нужен оператор».
- Нажал 1 — выезд подтверждён, как если бы звонил оператор.
- Нажал 2 — оператор получает задачу позвонить сейчас.
- Не взял трубку — попытка засчитывается как недозвон; ответил без нажатия — в сделке заметка, звонок остаётся за оператором.
- Не больше одного звонка робота по заявке в день; тихий час и согласие клиента на голосовые звонки проверяются, как в автообзвоне.
Робот звонит настоящим клиентам, поэтому запускается только кнопкой оператора — сам по расписанию он не звонит.
План выездов
CRM → «План выездов» (/admin/crm/plan/) — кто из монтажников, куда и во
сколько едет в выбранный день. Выезды — сделки с датой монтажа на этот день; план
раскладывает их по монтажникам и бригадам, строит маршрут по дорогам и после
утверждения пишет время и монтажника в сделки.
Девять шагов для диспетчера, оператора обзвона и главного инженера: обзвон и дата монтажа, чтение плана, ручная правка, свободные окна, утверждение, рассылка монтажникам, график и отчёты.
При первом входе на страницу открывается знакомство с разделом: первым шагом этот ролик, дальше — короткие экраны о плане, ручной правке, свободных окнах, утверждении и графике. Открыть его снова — кнопка «Знакомство» в шапке страницы.
Снимки в этом разделе и в ролике сделаны на копии базы с выдуманными клиентами и телефонами; дома и монтажники — настоящие.
flowchart LR
LEAD["Заявка"] --> HOME["Дом в сделке"]
HOME --> TECH{"Техвозможность"}
TECH -- "можно" --> CALL["Обзвон
или робот"]
CALL --> DATE["Дата и окно
в сделке"]
DATE --> PLAN["План выездов
маршрут по дорогам"]
CREW["График
и бригады"] --> PLAN
PLAN --> OK["Утвердить
монтажник · время · бригада"]
REM["18:00 — план на завтра
не утверждён?"] -.-> OK
OK --> SEND["Отправить монтажникам
мессенджер · Telegram"]
OK --> CAL["Календарь
и наряды"]
OK --> REP["Отчёты
по выездам"]
style PLAN fill:#134e4a,stroke:#43b77a,color:#fff
style OK fill:#43b77a,stroke:#2d9a5f,color:#fff
style SEND fill:#0f766e,stroke:#43b77a,color:#fff
style REM fill:#78350f,stroke:#d97706,color:#fff
Как собирается план
- Выезд, у которого в сделке уже есть монтажник, остаётся за ним. «Кто едет» у выезда переносит его к другому, «Распределить заново» снимает все закрепления.
- Затем — выезды с окном клиента, потом юрлица (их берут монтажники с навыком «Юрлица», если такие работают в этот день), остальные — по кругу от офиса.
- Каждый выезд встаёт туда, где добавляет меньше всего пути, если монтажник успевает в рабочий день и в окно клиента. Время приезда кратно 5 минутам; к первому клиенту монтажник не ждёт, а выезжает позже.
- Длительность — нормы из графика: частный дом и квартира в МКД.
- Что не поместилось — отдельной карточкой «Не вошли в план» с причиной: нет координат дома, монтажник не работает или без машины, не успевает.
У каждого монтажника или бригады — время выезда, число выездов, километры, время окончания и кнопка «Маршрут» со всеми точками дня в Яндекс Картах; у выезда — вид работ, длительность и сколько добавляет дорога. Справа — маршруты на карте цветом монтажника.
Ручная правка: «Кто едет» и перетаскивание
Раскладку можно поправить до утверждения — план пересчитается сразу, а в сделки правка попадёт только после «Утвердить».
- «Кто едет» у выезда — выбрать человека. Сверху списка те, кто в этот день работает: с выездами (сколько и до какого часа), потом свободные; ниже — кто не поедет и кто выключен в графике. «Авто» оставляет выбор плану.
- Перетаскивание — за значок слева от клиента на карточку другого монтажника или на имя в строке «Свободны». Пока выезд тянут, подходящие карточки обведены, а на той, над которой он сейчас, написано «отпустите, выезд перейдёт сюда».
- После переноса — уведомление с временем у нового монтажника и кнопкой «Вернуть»; если выезд у него не помещается, уведомление назовёт причину.
- На телефоне значка нет — там выезд переносят через «Кто едет».
- «Распределить заново» снимает все закрепления, и план раскладывает выезды сам.
Время в пути: маршрутизатор по дорогам
Расстояние и время между точками дня план берёт у маршрутизатора OSRM, который работает на сервере биллинга с картой OpenStreetMap: одна таблица «время и расстояние» на все точки дня. Время маршрутизатора — без пробок, поэтому оно умножается на поправку из графика (по умолчанию 1,3: пробки, светофоры, парковка). На странице — «км по дорогам» и у каждого выезда «+N км, M мин в пути», на карте — линия маршрута по улицам.
- Если маршрутизатор не ответил, план считает по прямой с поправкой на извилистость и средней скоростью и пишет об этом над планом.
- Карта дорог обновляется сама раз в месяц; состояние видно в графике — «маршрутизатор работает».
- Адрес маршрутизатора — настройка
FIELD_PLAN_ROUTER_URL; пусто — расчёт по прямой.
Утверждение и рассылка
«Утвердить (N)» записывает в сделки время в поле «Монтаж назначен» и монтажника — тем же запросом, что карточка сделки: с проверкой права, занятости и событием в календаре монтажника. У бригады монтажником записывается водитель, а весь состав — в системное поле сделки «Бригада». Перед записью окно показывает, что изменится, после — «Отменить» возвращает прежние значения.
«Отправить монтажникам» — каждый участник бригады получает свой день: выезды по порядку с телефонами и адресами, ссылку на маршрут и на наряды — личным сообщением в мессенджере от имени отправителя и в личный Telegram, если он привязан в профиле. Кнопка активна, только когда план уже записан в сделки: черновик не уходит. После отправки видно, кому и куда дошло.
Свободные окна
Если заявка отказалась или перенеслась, у монтажника появляется «Свободно 13:05–18:00» и до трёх ближайших заявок, которые ждут дату монтажа (этап «Тариф выбран», техвозможность не «Нельзя»), с расстоянием от соседнего выезда и кнопкой звонка. «Согласовано» записывает выбранное время тем же запросом, что обзвон, переводит заявку на «Назначен монтаж», и план пересчитывается сразу. Окна показываются на сегодня (не раньше чем через час) и будущие дни.
Несколько организаций
Монтажники бывают общими у нескольких организаций. План показывает монтажников организаций сотрудника (или выбранной в навбаре) и учитывает выезды другой организации, у которых монтажник уже назначен: такой выезд занимает его время ровно в назначенный час, план его не двигает и не утверждает. Если к той организации у сотрудника нет доступа, выезд показан без клиента, адреса и точки на карте — нет его и в ссылке на маршрут, и в линии пути. У каждого выезда — бейдж организации.
График монтажников и бригады
CRM → «План выездов» → «График монтажников» (/admin/crm/plan/crew/) — кто
ездит, в какие дни и часы, откуда выезжает, с кем и на какой машине. Своей
таблицы нет: график — одна настройка FIELD_PLAN_CREW.
- Как считать план: офис, нормы времени на частный дом и квартиру, насколько бригада быстрее одного, поправка ко времени в пути, время напоминания; скорость и извилистость нужны для расчёта по прямой.
- Монтажник: работает ли, рабочие дни и часы, точка выезда (пусто — из офиса), навыки, отпуска и отгулы датами.
- Бригада и машина: «Ездит с» — напарник; машина — модель или номер; «без машины».
Бригада — напарники, которые в этот день работают. У неё один маршрут от точки водителя, общие часы и общие навыки; на месте она работает быстрее на заданный процент. Если общих часов меньше двух, напарники едут по отдельности, и план об этом пишет. Кто без машины и без водителя рядом, в план не попадает — причина видна в строке «Не поедут».
Кто утверждает и напоминание
Утверждать и рассылать план и менять график может группа из настройки
FIELD_PLAN_APPROVER_GROUP (например, «Главный инженер») и
администраторы; остальные смотрят план и пересчитывают его у себя. Пустая
настройка — как раньше: все, кому можно назначать монтажника. Ставить монтажника
в карточке отдельной сделки можно по общему праву CRM.
В заданный час (по умолчанию 18:00, поле «Напомнить, если план не утверждён») система проверяет план на завтра. Если в нём есть выезды без монтажника или без точного времени, группа получает сообщение в «Системные уведомления» мессенджера и в личный Telegram — один раз за день, со ссылкой на план. Пустое поле — напоминания нет.
Отчёты по выездам
«План выездов» → «Отчёты» (/admin/crm/plan/report/) — факт за период (по
умолчанию 30 дней, период запоминается) в шести разделах, каждый выгружается в
CSV:
- Подключения — по дням и монтажникам, в среднем за рабочий день.
- Отказы — причины (разные написания одной причины склеиваются), с какого этапа уходят, по районам. Сделки «Не по подключению» — отдельной плашкой: это не отказ, а не та заявка.
- Обзвон — звонки, результаты и операторы.
- Пробег — утверждённые выезды по монтажникам; дома дальше 150 км от точки выезда не учитываются — это ошибка координат.
- По районам — техвозможность открытых заявок: сколько ждёт сети.
- Опоры — изменения по опорам за период, если подключена карта сети.