Договор
Договор хранит условия работы с контрагентом и используется в заказах покупателей, спецификациях, счетах на оплату и печатных документах. В системе договор всегда создается в карточке контрагента и связывается с конкретным контрагентом, нашей организацией, банковскими реквизитами, почтами, подписантами и документом договора.
Страница актуальна для пользовательской работы в интерфейсе и для фиксации договоренностей по реализации.
Где открыть
Договоры доступны в карточке контрагента на вкладке Договора:
- карточка контрагента:
/partners/:id/edit?sideTab=contracts; - открыть конкретный договор:
/partners/:id/edit?sideTab=contracts&ti_contractId=:contractId; - открыть создание договора:
/partners/:id/edit?sideTab=contracts&ti_addContract; - открыть создание договора с заранее выбранной нашей организацией:
/partners/:id/edit?sideTab=contracts&ti_addContract&ti_ourOrganizationId=:ourOrganizationId.
На договор также ведут ссылки из заказа покупателя, задач по спецификации и формы счета на оплату.
Что показывает таблица
Вкладка Договора показывает договоры выбранного контрагента.
Колонки таблицы:
- Номер;
- Покупатель;
- Наша организация;
- Типовой;
- Дата;
- Архивный;
- Автор;
- Действия.
В таблице доступны фильтры, сортировка, пагинация и сброс настроек таблицы.
В колонке действий доступны:
- Просмотр - открыть договор без редактирования;
- Редактировать - открыть форму редактирования;
- Заархивировать - архивировать договор.
Если договор архивный, действия редактирования и архивирования скрываются. Двойной клик по неархивному договору открывает редактирование.
Создание договора
Договор создается кнопкой Добавить договор к контрагенту на вкладке Договора. Кнопка доступна, если у пользователя есть право редактировать текущего контрагента.
Порядок работы:
- Откройте карточку контрагента.
- Перейдите на вкладку Договора.
- Нажмите Добавить договор к контрагенту.
- Выберите нашу организацию.
- Проверьте дату, дату окончания срока действия и признак пролонгации.
- Выберите подписанта, банковские реквизиты и почту для нашей организации.
- Выберите подписанта, банковские реквизиты и почту для контрагента.
- Нажмите Создать.
Если у выбранной стороны есть ровно один подписант, один email или одни банковские реквизиты, форма может подставить это значение автоматически. Для подписанта нашей организации при создании сначала выбирается основной подписант, если он задан.
Если у контрагента нет подписантов, банковских реквизитов или почты, форма показывает подсказку со ссылкой на нужный раздел карточки контрагента.
Номер договора
При создании поле Номер договора необходимо оставить пустым. Тогда система сформирует номер автоматически. Заполнять только если уже созданный договор добавляется в систему.
Формат автоматического номера:
код нашей организации + дата договора в формате yyMMdd + порядковый номер
Пример: ОМ250609-11.
Порядковый номер считается по уже существующим договорам выбранной нашей организации. При изменении даты договора после создания номер не пересчитывается.
Если пользователь вручную указывает номер при создании, система проверяет, что среди неархивных договоров нет другого договора с таким номером. После создания номер в форме редактирования не меняется.
Редактирование договора
В режиме редактирования можно изменить:
- дату договора;
- дату окончания срока действия;
- признак пролонгации;
- подписанта нашей организации;
- банковские реквизиты нашей организации в пределах той же нашей организации;
- почту нашей организации;
- подписанта контрагента;
- банковские реквизиты контрагента;
- почту контрагента.
Нельзя изменить:
- номер договора;
- контрагента договора;
- тип договора;
- нашу организацию, если это требует сменить организацию, а не только банковские реквизиты внутри той же организации;
- архивный договор.
Если в форме редактирования нет изменений, сохранение не проходит с сообщением Нет изменений.
Просмотр договора
В режиме просмотра отображаются:
- ссылка на документ договора, если она есть;
- дата архивирования, если договор архивный;
- дата договора;
- окончание срока действия;
- признак пролонгации;
- наша организация;
- подписант нашей организации;
- банковские реквизиты нашей организации;
- почта нашей организации;
- контрагент;
- подписант контрагента;
- банковские реквизиты контрагента;
- почта контрагента.
Поля в режиме просмотра доступны только для чтения.
Документ договора
После создания договора в режиме редактирования появляется поле документа. Через него можно:
- указать или изменить ссылку на файл договора;
- открыть файл по ссылке;
- скачать файл по ссылке;
- сгенерировать docx по шаблону;
- отметить документ как типовой или нетиповой;
- отметить согласование;
- отметить подписание руководством;
- отметить отправку;
- отметить подписание клиентом;
- указать даты для статусов документа.
Ссылка на файл и статусы документа сохраняются отдельной кнопкой в поле документа. Это отдельное сохранение от кнопки Обновить в форме договора.
PDF сейчас не поддерживается. Если запросить PDF через API, система вернет сообщение, что нужно использовать docx.
Формирование docx
Docx формируется по шаблону договора. В файл попадают:
- номер и дата договора;
- год договора;
- дата окончания срока действия;
- город нашей организации, если его удалось извлечь из юридического адреса;
- полные наименования сторон;
- юридические адреса сторон;
- ИНН и КПП сторон;
- банковские реквизиты сторон;
- email сторон;
- должности, ФИО и текст полномочий подписантов.
Файл не будет сформирован, если:
- у пользователя нет доступа к договору;
- договор не найден;
- не указаны банковские реквизиты покупателя;
- не указана почта покупателя;
- не указан подписант покупателя;
- не указаны наши банковские реквизиты;
- не указана наша почта;
- не указан наш подписант;
- покупатель не найден или архивирован;
- контрагент не является покупателем;
- контрагент является самозанятым;
- у подписанта покупателя не заполнен текст в договоре;
- у подписанта покупателя не заполнена должность;
- ФИО подписанта покупателя не состоит из двух или трех частей;
- не найден шаблон
ContractTemplate.docx; - запрошен формат, отличный от docx.
Архивирование
Договор не удаляется физически, а архивируется. После архивирования у него заполняется дата архивирования.
Архивный договор:
- остается видимым в таблице;
- открывается на просмотр;
- не редактируется;
- не архивируется повторно;
- не попадает в список договоров для выбора в новых заказах и задачах, потому что список строится только по неархивным договорам.
Автозаполнение и расчеты
При создании система заполняет данные автоматически:
| Данные | Как заполняется |
|---|---|
| Дата договора | текущая дата |
| Окончание срока действия | дата договора + 1 год |
| Пролонгация | включена |
| Наша организация | выбирается пользователем или подставляется из параметра ti_ourOrganizationId |
| Наш подписант | основной подписант выбранной нашей организации или единственный подписант |
| Наши банковские реквизиты | единственные банковские реквизиты выбранной нашей организации, если они одни |
| Наша почта | единственная почта выбранной нашей организации, если она одна |
| Подписант контрагента | единственный подписант контрагента, если он один |
| Банковские реквизиты контрагента | единственные банковские реквизиты контрагента, если они одни |
| Почта контрагента | единственная почта контрагента, если она одна |
| Номер | автоматически, если пользователь не ввел номер вручную |
При изменении даты договора в форме дата окончания срока действия автоматически пересчитывается как дата договора + 1 год. Пользователь может затем изменить дату окончания вручную.
Проверки при сохранении
Договор не будет создан или обновлен, если:
- у пользователя нет доступа к редактированию договоров текущего контрагента;
- банковские реквизиты контрагента не найдены или относятся к другому контрагенту;
- подписант контрагента не найден или относится к другому контрагенту;
- почта контрагента не найдена и не относится к самому контрагенту или его контактному лицу;
- наши банковские реквизиты не найдены или относятся не к нашей организации;
- наш подписант не найден или относится не к нашей организации;
- наша почта не найдена и не относится к нашей организации или ее контактному лицу;
- при создании указан номер, который уже есть у другого неархивного договора;
- при обновлении договор не найден;
- при обновлении договор уже архивный;
- при обновлении меняются банковские реквизиты так, что фактически меняется наша организация.
Эти проверки выполняются на сервере, поэтому они срабатывают независимо от того, из какого места интерфейса или API пользователь пытается изменить договор.
Типы договоров
В справочнике есть типы:
- С покупателем;
- С поставщиком (пока не используется);
- Счет-договор (не реализован).
В текущем пользовательском экране договоров контрагента основной сценарий работает с договорами С покупателем. При создании через текущий API тип договора определяется сервером по роли пользователя: для ролей продаж создается договор С покупателем.
Важно для разработки: в сервисе есть логика для договоров С поставщиком, но текущий ContractController разрешает операции с договорами ролям продаж и администратору для просмотра. Роль снабженца в атрибутах доступа этого контроллера сейчас не указана.
Связь с заказами и процессами
Договор выбирается в заказе покупателя и используется дальше в процессе работы с заказом.
Где договор участвует:
- в заказе покупателя отображается номер договора со ссылкой на карточку договора;
- в задачах создания и согласования спецификации можно выбрать существующий договор или открыть создание нового;
- из задачи можно сгенерировать docx договора;
- в задаче подписания спецификации отображаются ссылка на договор и даты подписания/отправки;
- в счете на оплату договор подставляет основание и может фиксировать наши банковские реквизиты;
- при формировании документов отгрузки договор может передавать банковские реквизиты и подписантов.
Если в заказе выбран договор с банковскими реквизитами нашей организации, счет на оплату использует эти реквизиты как фиксированные.
Права доступа
| Действие | Роли |
|---|---|
| Смотреть таблицу договоров контрагента | начальник менеджеров по продажам, менеджер по продажам, помощник менеджера по продажам; API также разрешает администратору |
| Смотреть форму договора | начальник менеджеров по продажам, менеджер по продажам, помощник менеджера по продажам; API также разрешает администратору |
| Смотреть список договоров для выбора в заказе или задаче | начальник менеджеров по продажам, менеджер по продажам, помощник менеджера по продажам; API также разрешает администратору, но сервис дополнительно проверяет бизнес-доступ |
| Создать договор | начальник менеджеров по продажам, менеджер по продажам, помощник менеджера по продажам |
| Редактировать договор | начальник менеджеров по продажам, менеджер по продажам, помощник менеджера по продажам |
| Архивировать договор | начальник менеджеров по продажам, менеджер по продажам, помощник менеджера по продажам |
| Сгенерировать docx | начальник менеджеров по продажам, менеджер по продажам, помощник менеджера по продажам; API также разрешает администратору |
| Сгенерировать PDF | endpoint есть, но PDF не поддерживается |
Для менеджера по продажам и помощника менеджера по продажам доступ к покупателю зависит от группы доступа контрагента. Если контрагент является покупателем и у пользователя нет доступа к его группе, договоры этого контрагента недоступны.
Данные
Договор хранит:
- номер;
- дату договора;
- дату окончания срока действия;
- признак пролонгации;
- автора;
- тип договора;
- документ договора;
- банковские реквизиты контрагента;
- банковские реквизиты нашей организации;
- почту контрагента;
- почту нашей организации;
- подписанта контрагента;
- подписанта нашей организации;
- дату архивирования;
- признак импортированного договора.
В таблицу дополнительно выводятся покупатель, наша организация, автор, признак архивного договора и признак типового документа.
API
Основные операции:
| Метод | Адрес | Назначение |
|---|---|---|
| GET | /Order/Partner/:partnerId/Contract/table | получить договоры контрагента для таблицы |
| GET | /Order/Partner/:partnerId/Contract/:contractId | получить договор для просмотра или редактирования |
| GET | /Order/Partner/:partnerId/Contract/list | получить список неархивных договоров для выбора, можно передать ourPartnerId |
| POST | /Order/Partner/:partnerId/Contract | создать договор |
| PUT | /Order/Partner/:partnerId/Contract/:contractId | обновить договор |
| GET | /Order/Partner/:partnerId/Contract/:contractId/docx | сформировать docx |
| GET | /Order/Partner/:partnerId/Contract/:contractId/pdf | PDF сейчас не поддерживается, возвращается ошибка |
| DELETE | /Order/Partner/:partnerId/Contract/:contractId | архивировать договор |
Документ договора редактируется отдельными endpoints документа, потому что ссылка на файл и статусы документа относятся к общей сущности Документ.