Продажа в рассрочку
Продавец покупает актив, который хочет покупатель, приобретает его в собственность и перепродает его покупателю по раскрытой наценке, подлежащей оплате с течением времени.
Разметка фиксируется один раз, при подписании. Он не растет со временем и не растет с задержкой. Покупатель 90 Опоздавший на несколько дней обязан именно тем, что должен покупатель, оплачивающий по графику, — правонарушение отслеживается, но к долгу за него ничего не добавляется. Это единственное свойство — то, что отделяет этот продукт от кредита: возврат продавца происходит от торговли реальным активом, а не от течения времени.
Следствием для вашей интеграции является последовательность, которую вы не можете пропустить: продавец должен фактически приобрести актив, прежде чем продавать его. API Он имеет четыре перехода для этой последовательности и обеспечивает их порядок.
Базовый путь: /api/v1/pfp/installment-sales · Религиозное чтение: Мурабаха
Статус
draft ──submit──> under_review ──review──> review_passed
│ │ │
│ └──reject──> rejected │
│ │
└──────────────┬──────────────────────────────┘
│
order_asset│ (optional)
v
asset_ordered
│
purchase_asset │ ← also reachable directly from draft / review_passed
v
asset_purchased
│ deliver_asset
v
delivered
│ activate
v
active ──> completed
└──> defaulted
| статус | Значение |
|---|---|
draft | Записанные термины, ничего не изменилось |
under_review | Представлен на утверждение |
review_passed | Заключение прилагается |
rejected | Терминал. Требуется а reason |
asset_ordered | Заказ от поставщика |
asset_purchased | Продавец владеет активом |
delivered | переданы покупателю; право собственности передано |
active | Установки запущены |
completed | Оплачивается полностью |
defaulted | Написано |
Создать контракт
POST /api/v1/pfp/installment-sales
{
"customer_id": "8f2a1c44-0b6e-4d51-9a3f-1c8e5b7d2a90",
"region": "RU",
"currency": "RUB",
"asset_type": "vehicle",
"asset_description": "Lada Vesta SW Cross, 2026",
"purchase_price": "180000000",
"markup_rate": 1500,
"payment_months": 36,
"down_payment": "36000000",
"supplier_name": "AvtoDom Kazan",
"supplier_contact": "+7 843 000-00-00"
}
| Полное поле | Тип | Требуемый | Заметки |
|---|---|---|---|
customer_id | uuid | ✅ | Покупатель |
region | string | ✅ | Контрактный регион |
asset_description | string | ✅ | Что продается |
purchase_price | string | ✅ | Незначительные единицы — сколько продавец платит поставщику |
markup_rate | integer | ✅ | Базовые точки, 1–10000. 1500 is 15 % |
payment_months | integer | ✅ | 1–360 Периоды партии 30 дни |
asset_type | enum | — | vehicle | real_estate | equipment | commodity | inventory |
currency | string | — | ISO 4217 |
down_payment | string | — | Небольшие подразделения. Должна быть меньше цены продажи |
asset_specifications | object | — | Спецификация свободной формы |
supplier_name, supplier_contact | string | — | Также могут быть поставлены на order_asset |
product_id | uuid | — | Шаблон продукта |
metadata | object | — | Возвращение нетронутых |
Что представляет собой платформа
markup_amount = floor(purchase_price × markup_rate / 10000)
sale_price = purchase_price + markup_amount
financed_amount = sale_price − down_payment
monthly_payment = floor(financed_amount / payment_months)
Для запроса выше: разметка 270 000 RUBЦена продажи 2 070 000 RUBФинансируемый 1 710 000 RUBежемесячно 47 500 RUB.
Два отказа ожидать:
- Разметьте эти этажи до нуля. Маленький
purchase_priceс низкимmarkup_rateВ контракте отказано — продажа по себестоимости — это беспроцентный кредит, а не продажа, и он пройдет проверку «ставка выше нуля» при продаже по цене покупки. - Авансовый платеж по цене продажи или выше. Отказался: при равном нечего финансировать, выше него график бы продавец платил покупателю.
Последовательность приобретения
Продавец не может продать то, чем он не владеет. Четыре перехода, по порядку.
1Заказ от поставщика (факультативно)
POST /api/v1/pfp/installment-sales/{id}/order_asset
{ "supplier_name": "AvtoDom Kazan", "supplier_contact": "+7 843 000-00-00" }
Оба поля здесь необязательны, если они были даны при создании. draft or review_passed → asset_ordered.
Этот шаг можно пропустить: purchase_asset заключает договор, который до сих пор draft or review_passedИспользуйте его, когда вы отслеживаете заказ поставщика как отдельное событие, опустите его, когда вы этого не делаете.
2Продавец покупает его
POST /api/v1/pfp/installment-sales/{id}/purchase_asset
{
"asset_purchase_date": "2026-09-02",
"ownership_documents": ["invoice-4471.pdf", "title-transfer.pdf"]
}
asset_purchase_date Требуется.Доступный от asset_orderedа также непосредственно из draft or review_passed Если вы пропустили шаг заказа.
Это переход, который делает продукт тем, чем он является. Продавец должен владеть активом, хотя бы на мгновение, прежде чем перепродавать его. Контракт, который переходит от утверждения прямо к рассрочкам без этого шага, является кредитом.
3Передай это.
POST /api/v1/pfp/installment-sales/{id}/deliver_asset
{
"delivery_date": "2026-09-05",
"ownership_transfer_date": "2026-09-05"
}
Обе даты требуются и регистрируются отдельно: физическая доставка и передача права собственности не всегда являются одним и тем же днем, и какой из них регулируется, зависит от юрисдикции. asset_purchased → delivered.
4Начните рассрочку
POST /api/v1/pfp/installment-sales/{id}/activate
{ "first_payment_date": "2026-10-05" }
Факультативно, по умолчанию сегодня. Вот где формируется расписание. delivered → active.
Расписание платежей
В результате активации в payment_scheduleОдин вход за период:
{
"payment_schedule": [
{
"payment_number": 1,
"due_date": "2026-10-05",
"amount": "4750000",
"remaining_balance": "166250000"
},
{
"payment_number": 2,
"due_date": "2026-11-04",
"amount": "4750000",
"remaining_balance": "161500000"
}
]
}
Две вещи, которые нужно знать об этом:
- Периоды являются 30 дней, а не календарных месяцев. Сроки дрейфа относительно календаря: график, начинающийся 5 Октябрь стал вторым платежом 4 Ноябрь. Это преднамеренно и последовательно для всей семьи продуктов.
- Остальная часть округления добавляется к окончательной партии.
monthly_paymentЭто не в счет, так что последний платеж больше, чем тот, который выпал отделу.financed_amountТочно.
maturity_date Это первая дата оплаты плюс (payment_months − 1) × 30 Дни — дата последней партии, а не месяц после нее.
Зарегистрируйте платеж
POST /api/v1/pfp/installment-sales/{id}/payment
{ "amount": "4750000" }
уменьшать outstanding_amount, увеличивается total_paid и payments_madeнаборы last_payment_dateКогда непогашенный баланс достигает нуля, контракт переходит к completed.
Переплата ограничена непогашенным балансом. Отправка большего, чем причитается, применяется только к тому, что остается; избыток не регистрируется как оплаченный. Возврат его через ваше собственное урегулирование, а не через эту конечную точку — в противном случае «оплаченный» перестает примиряться с «финансированным».
преступность
POST /api/v1/pfp/installment-sales/{id}/delinquency
{ "days_past_due": 45, "overdue_amount": "9500000" }
days_past_due Это необходимо и может быть 0 Чтобы устранить преступность. overdue_amount необязательно.
Это фиксирует преступность; это делает не Если ваша юрисдикция разрешает просрочку платежа, который идет на благотворительность, а не на продавца, обработайте его за пределами этого контракта.
Перечислить и прочитать
GET /api/v1/pfp/installment-sales
| Параметр запроса | ценности |
|---|---|
status | любой статус выше |
region | Контрактный регион |
asset_type | vehicle | real_estate | equipment | commodity | inventory |
customer_id | uuid |
env | test | prod |
GET /api/v1/pfp/installment-sales/{id}
Подробный ответ добавляет график, поставщика, документы о собственности и даты, обзор и разбивку денег:
{
"data": {
"id": "c41d8b90-3e77-4a12-b5f6-9e2d7a1c0843",
"contract_number": "INS-RU-20260823-9E4B02",
"status": "active",
"asset_type": "vehicle",
"asset_description": "Lada Vesta SW Cross, 2026",
"purchase_price": "180000000",
"markup_rate": 1500,
"markup_amount": "27000000",
"sale_price": "207000000",
"down_payment": "36000000",
"financed_amount": "171000000",
"monthly_payment": "4750000",
"outstanding_amount": "166250000",
"total_paid": "4750000",
"payments_made": 1,
"payment_months": 36,
"days_past_due": 0,
"overdue_amount": null,
"asset_purchase_date": "2026-09-02",
"delivery_date": "2026-09-05",
"ownership_transfer_date": "2026-09-05",
"first_payment_date": "2026-10-05",
"maturity_date": "2029-08-27",
"compliance_review": null
}
}
markup_rate Это единственное число в этом ответе, которое не денежная сумма и, следовательно, не строка: это базисные баллы.
Утверждение и отклонение
POST /api/v1/pfp/installment-sales/{id}/submit
POST /api/v1/pfp/installment-sales/{id}/review
POST /api/v1/pfp/installment-sales/{id}/reject
submit Не берёт тело. review Запись о допущении - approved_by требуемый, signed_at, document_ref и note факультативно. reject требует reason и является терминальной.
reject движение under_review → rejected В светском чтении рецензия необязательна: order_asset и purchase_asset И то, и другое достижимо прямо из draftТаким образом, контракт, который никогда не проходит проверку, все еще может завершить полную последовательность.