Счет можно создать с указанием данных о плательщике (адрес, телефон, имя) или без.
В первом случае житель увидит счет в мобильном приложении и оттуда же сможет оплатить.
Во втором - счет можно будет оплатить только по ссылке.
Также счет можно напрямую привязать к пользователю. Это удобно делать, например, из мини-приложения.
В этом случае житель так же увидит счет в мобильном приложении.
Анонимный счет
Минимальный набор полей, который в принципе необходим для создания счета, создает анонимный счет.
Такой счет не виден в мобильном приложении и может быть оплачен только по ссылке.
dvsenderorganizationорганизация, которая создает счетtoPayОбщая сумма счетаrowsПозиции, включенные в счет (услуги/товары). Это массив объектов вида:
json{ "name": "Услуга 1", "count": 1, "toPay": "100", "isMin": false }
Поле isMin означает, что toPay - это минимальная цена (цена от). Ставится в false после окончательного согласования цены.
Счет, в котором есть не окончательные цены, невозможно опубликовать.
paymentTypeТип оплаты. Возможные варианты:onlineиcash. Это поле носит скорее информационный характер. Всегда можно сформировать ссылку на оплату и при этом оплатить наличными.
Автоматическая смена статусов будет работать только для онлайн оплаты. При наличной оплате статусы переключаются
вручную или через АПИ.
status
Это статус счета. Возможные значения:
draft, published, paid, canceled.
Черновик невозможно оплатить и нельзя увидеть в мобильном приложении.
Опубликованный счет нельзя редактировать, как и уже оплаченный.Пример GQL-запроса
Пример ответа
graphqlmutation createInvoice { obj: createInvoice( data: { dv: 1, sender: { dv: 1, fingerprint: "playground" }, organization: {connect: {id: "e40b5367-49a8-4340-9eed-802538331326"}}, toPay: "100", rows: [{name: "Услуга 1", count: 1, toPay: "100", isMin: false}], paymentType: "online", status: "draft" } ) { id number status organization { id name } property { id address } unitName unitType toPay rows { name toPay count isMin currencyCode sku } createdAt updatedAt createdBy { id } updatedBy { id } deletedAt publishedAt paidAt } }
Счет для жителя
Чтобы счет был виден в мобильном приложении, нужно указать адрес плательщика.
Это поля
property, unitType и unitName. При наличии, можно указать имя и телефон жителя в полях clientName и clientPhone.
Тогда к счету будет привязан контакт жителя (поле contact в ответе сервера).
Если такой контакт уже добавлен, то привяжется он. Если такого контакта еще нет, то он будет создан и привязан к счету.Пример GQL-запроса
Пример ответа
graphqlmutation createInvoice { obj: createInvoice( data: { dv: 1, sender: {dv: 1, fingerprint: "docs-demo"}, organization: {connect: {id: "e40b5367-49a8-4340-9eed-802538331326"}}, property: {connect: {id: "809bff2d-b1ff-485e-b2e9-33b4c5974d3b"}}, unitName: "3", unitType: flat, clientPhone: "+79999999997", clientName: "Пушкин", toPay: "200", rows: [{name: "тестовая строка", count: 1, toPay: "200", isMin: false}], paymentType: online, status: draft} ) { id number status contact { id name phone property { id address } unitType unitName } organization { id name } property { id address } unitName unitType toPay rows { name toPay count isMin currencyCode sku } createdAt updatedAt createdBy { id } updatedBy { id } deletedAt publishedAt paidAt } }
Счет от b2c мини-приложения
Счет может быть выставлен жителю с помощью мини-приложения. Запрос на создание счета отправляется от бэкенда мини приложения.
Для этого мини-приложение должно быть авторизовано под сервисным пользователем (см. раздел аутентификация).
Сервисный пользователь мини-приложения будет иметь доступ к выставлению, редактированию и чтению счетов от имени
организации (поле
organization) после того как организация подключит мини-приложение (b2b часть).Организация, указанная при создании счета в поле
organization, будет видеть счет в разделе "Маркетплейс".
Чтобы житель получил пуш-уведомление и увидел новый счет у себя в мобильном приложении, необходимо указать следующие поля:clientИдентификатор пользователяpropertyДом, в котором зарегистрировался жительunitTypeТип помещение жителяunitNameНаименование помещения (номер квартиры)
Пример GQL-запроса
Пример ответа
graphqlmutation createInvoice { obj: createInvoice( data: { dv: 1, sender: {dv: 1, fingerprint: "docs-demo"}, organization: {connect: {id: "73b069e4-d807-4946-8725-88781e5d14ac"}}, property: {connect: {id: "2c398c8d-da20-4b4f-b8c8-a19df803e21d"}}, client: {connect: {id: "cf609bd7-5bb8-498d-865d-943f96bf11fc"}}, unitType: flat, unitName: "13", rows: [{name: "тестовая строка 3", count: 1, toPay: "203", isMin: false}], paymentType: online, status: published } ) { id number status organization { id name } toPay rows { name toPay count isMin currencyCode sku } createdAt updatedAt createdBy { id } updatedBy { id } deletedAt publishedAt paidAt } }
Редактирование счета
Для редактирование счета используется стандартный метод обновления объекта.
Пример изменения списка услуг:
Пример GQL-запроса
Пример ответа
graphqlmutation updateInvoice { obj: updateInvoice( id: "34b5c321-c086-4540-bca8-18f23580be7d" data: { dv: 1, sender: {dv: 1, fingerprint: "playground"}, rows: [{name: "Другая услуга", count: 1, toPay: "100", isMin: false}] } ) { id number status organization { id name } property { id address } unitName unitType toPay rows { name toPay count isMin currencyCode sku } createdAt updatedAt createdBy { id } updatedBy { id } deletedAt publishedAt paidAt } }
Публикация счета
После публикации счет можно увидеть в мобильном приложении и оплатить.
Если в счете есть позиции с неявной ценой (
isMin=true), то такой счет невозможно опубликовать.
Публикация - это редактирование счета, изменяется поле status на значение published.Ссылка на оплату
Шаблон ссылки на оплату выглядит вот так:
https://condo.d.doma.ai/payment-link?su={successUrl}&fu={failureUrl}&i={invoiceId}
| Поле | Описание | Тип/формат | Пример |
|---|---|---|---|
| successUrl | Адрес, на который будет перенаправлен пользователь при успешной оплате | string, url encoded | https%3A%2F%2Fcondo.d.doma.ai%2Fsuccess |
| failureUrl | Адрес, на который будет перенаправлен пользователь, если оплата не удалась | string, url encoded | https%3A%2F%2Fcondo.d.doma.ai%2Ffailure |
| invoiceId | Идентификатор счета | string, UUID | 14d5f5c9-de39-4d02-9116-6a2e501e54e1 |
При переходе по ссылке будут созданы сущности эквайринга и пользователь будет перенаправлен на страницу ввода банковской карты. После оплаты пользователь будет перенаправлен на страницу результата (успех/ошибка)