Партнерство
Две стороны вкладывают капитал в общее предприятие, распределяют прибыль по соглашению и несут убытки строго пропорционально тому, что каждая из них внесла.
Последний пункт – это весь продукт. Прибыль делится по соглашению сторон; убыток делится на долю взносов, и никакое соглашение не меняет этого. Контракт, в котором одна сторона защищена от потерь за счет другой, перестает быть участием и становится ссудой под проценты, нося слово «партнерство», и каждый регулирующий орган будет рассматривать его как единое целое.
The API Это приводит к асимметрии: profit_sharing_ratio Ваша задача - установить, bank_ownership_percent Он является производным от взносов и не может быть установлен вообще.
Базовый путь: /api/v1/pfp/partnerships · Религиозное чтение: Мушарака
Две формы
partnership_type | Что происходит | Конец когда |
|---|---|---|
permanent | Обе стороны сохраняют свои акции на всю жизнь предприятия и делят то, что оно зарабатывает. | Стороны распускают его |
diminishing | Одна сторона выкупает долю другой в запланированных единицах; собственность смещается в течение срока. | Последняя единица покупается |
diminishing форма, используемая для совладения вещью — имуществом, оборудованием, транспортным средством. Доля стороны финансирования уменьшается с каждым выкупом, и если договор включает арендную плату за использование совместного актива, арендная плата падает вместе с ним: вы платите за часть, которой вы еще не владеете.
Выбор diminishing делать term_months Затем платформа выводит единицы выкупа:
units_total = term_months / period_length(buyout_schedule)
buyout_unit_value = floor(bank_contribution / units_total)
buyout_schedule может быть monthly, quarterly, semi_annually or annually; опущено, означает месячные. 30 дней, а не календарных месяцев.
Статус
draft ──submit──> under_review ──review──> review_passed ──┐
│ │ │
│ └──reject──> rejected │
│ │
└────────────────── fund ────────────────────────────────┘
│
v
funded ──activate──> active
│
┌───────────────────┼──────────────┐
v v v
buyout_in_progress dissolved completed
| статус | Значение |
|---|---|
draft | Создано, ничего не движется |
under_review | Представлен на утверждение |
review_passed | Заключение прилагается |
rejected | Терминал. Требуется а reason |
funded | Взносы вносятся; устанавливаются даты начала и ожидаемые даты окончания |
active | Предприятие работает; прибыль и убыток могут быть зарегистрированы. |
buyout_in_progress | Уменьшение формы, единицы закупаются |
completed | Последняя единица была выкуплена |
dissolved | досрочно, по соглашению или иным образом |
В светском чтении fund досягаемости от draft а также из review_passed - обзор необязателен. В религиозном чтении только review_passed средства.
Создать партнерство
POST /api/v1/pfp/partnerships
{
"customer_id": "8f2a1c44-0b6e-4d51-9a3f-1c8e5b7d2a90",
"region": "RU",
"partnership_type": "diminishing",
"currency": "RUB",
"total_value": "500000000",
"bank_contribution": "350000000",
"customer_contribution": "150000000",
"profit_sharing_ratio": { "bank": 60, "customer": 40 },
"term_months": 60,
"buyout_schedule": "quarterly",
"rental_amount": "1200000",
"asset_description": "Warehouse, 1 400 m², Kazan"
}
| Полное поле | Тип | Требуемый | Заметки |
|---|---|---|---|
customer_id | uuid | ✅ | контрагент |
region | string | ✅ | Контрактный регион; должен поддерживаться графиком счетов |
partnership_type | enum | ✅ | permanent | diminishing |
total_value | string | ✅ | Небольшие подразделения. должна равняться сумме двух взносов |
bank_contribution | string | ✅ | Небольшие подразделения |
customer_contribution | string | ✅ | Небольшие подразделения |
profit_sharing_ratio | object | ✅ | {"bank": n, "customer": m}Целый процент, Должен суммировать 100 |
currency | string | — | ISO 4217 |
term_months | integer | — | Требуется когда partnership_type is diminishing |
buyout_schedule | enum | — | monthly | quarterly | semi_annually | annually |
rental_amount | string | — | Незначительные единицы, за период, для использования совместного имущества |
asset_description | string | — | Бесплатный текст |
metadata | object | — | Ваши личные данные, возвращенные нетронутыми |
Две валидации отвергают большинство первых попыток:
bank_contribution + customer_contributionдолжен быть равнымtotal_valueТочно, здесь нет закругления.profit_sharing_ratioДолжна быть точно определена 100.
Ответ — 201 Created, status: "draft"с bank_ownership_percent и customer_ownership_percent полученных от взносов:
{
"data": {
"id": "3b9c2f18-77a4-4e0d-8c15-6ad2f9e40b31",
"contract_number": "PRT-D-RU-20260823-4A7F1C",
"status": "draft",
"partnership_type": "diminishing",
"customer_id": "8f2a1c44-0b6e-4d51-9a3f-1c8e5b7d2a90",
"region": "RU",
"currency": "RUB",
"total_value": "500000000",
"bank_contribution": "350000000",
"customer_contribution": "150000000",
"bank_ownership_percent": 70,
"customer_ownership_percent": 30,
"profit_sharing_ratio": { "bank": 60, "customer": 40 },
"units_total": 20,
"buyout_unit_value": "17500000",
"units_bought": 0,
"buyout_history": [],
"total_profit": "0",
"total_loss": "0",
"bank_profit_share": "0",
"customer_profit_share": "0",
"rental_amount": "1200000",
"rental_paid_total": "0",
"term_months": 60,
"asset_description": "Warehouse, 1 400 m², Kazan",
"compliance_review": null,
"inserted_at": "2026-08-23T09:14:22Z"
}
}
Обратите внимание на два соотношения в этом ответе и на то, насколько они далеки друг от друга. 70/30Прибыль — это 60/40Это законно — сторона, выполняющая работу, может получить больший кусок прибыли, чем ее доля в капитале, но если предприятие теряет деньги, потери падают. 70/30Нет. 60/40.
Перечень партнерств
GET /api/v1/pfp/partnerships
| Параметр запроса | ценности |
|---|---|
status | любой статус выше |
region | Контрактный регион |
type | permanent | diminishing |
env | test | prod (по умолчанию) prod) |
Возвращает короткую форму — личность, статус, взносы, проценты владения. Акции прибыли, история выкупа и обзор приведены только в подробном ответе.
GET /api/v1/pfp/partnerships/{id}
Переходы жизненного цикла
Представление на утверждение
POST /api/v1/pfp/partnerships/{id}/submit
Никакого тела. draft → under_review.
Приложить официальное утверждение
POST /api/v1/pfp/partnerships/{id}/review
{
"approved_by": "Investment Committee, minutes 14/2026",
"signed_at": "2026-08-01",
"document_ref": "IC-2026-014",
"note": "Approved subject to quarterly reporting"
}
approved_by Он необходим и не должен быть пустым. under_review → review_passed.
отклонить
POST /api/v1/pfp/partnerships/{id}/reject
{ "reason": "Collateral valuation not supported" }
Причина хранится в metadata.rejection_reason. under_review → rejectedТерминал.
Взносы находятся в
POST /api/v1/pfp/partnerships/{id}/fund
Нет тела. start_date Сегодня и expected_end_date to term_months × 30 Выходные дни - 120 Для убывающего партнерства он также вычисляет next_buyout_date.
Начать работу
POST /api/v1/pfp/partnerships/{id}/activate
Никакого тела. funded → active.
Прибыль и убыток
Распределять прибыль
POST /api/v1/pfp/partnerships/{id}/profit
{
"gross_profit": "8000000",
"period_end_date": "2026-09-30"
}
Валовая прибыль делится на profit_sharing_ratioДобавлено в total_profit, bank_profit_share и customer_profit_share — и доля контрагента перемещается в него путем размещения в бухгалтерской книгедатируется period_end_dateЭто не начисление на бумаге: деньги покидают счет предприятия.
period_end_date Это необходимо, потому что запись в реестре датирована им.
Остатки округления идут к контрагенту, а не к стороне финансирования. Над многими распределениями альтернатива спокойно аккумулировала бы копейки на одной стороне.
Рекордный убыток
POST /api/v1/pfp/partnerships/{id}/loss
{ "amount": "3000000" }
разделенный на Доля взносов, а не по коэффициенту прибыли. 70/30 Как уже было сказано выше, потеря 3 000 000 разделять 2 100 000 / 900 000 - независимо от того, 60/40 соглашение о прибыли.
Раскол записывается в metadata.last_loss и накопленный в total_loss:
{
"last_loss": {
"amount": "3000000",
"bank_share": "2100000",
"customer_share": "900000",
"date": "2026-09-30"
}
}
Выкуп (только убывающая форма)
POST /api/v1/pfp/partnerships/{id}/buyout
{ "units": 1 }
units Дефолты для 1Каждая единица движется buyout_unit_value от финансовой стороны к контрагенту и пересчитывает оба процента владения:
customer_percent = floor((customer_contribution + buyout_unit_value × units_bought) × 100 / total_value)
bank_percent = 100 − customer_percent
Собственный первоначальный взнос контрагента является частью суммы, поэтому право собственности перемещается вперед от того места, где оно уже стояло. 30 % и достигает 33 % после первой из двадцати единиц.
Каждый звонок добавляется к buyout_history, уменьшает арендную плату пропорционально доле, все еще принадлежащей стороне финансирования, и перемещает контракт на completed После того, как последняя единица куплена — в какой момент контрагент держит 100 %.
Называется a permanent Партнерство возвращается 422 — выкуп существует только в убывающей форме.
Поскольку процент владения перемещается, **Расщепление потерь движется вместе с ними.**Убыток, зарегистрированный после того, как половина единиц была куплена, отличается от убытка, зарегистрированного в первый день. Это предполагаемое поведение: убыток следует за владением в том виде, в котором он существует в то время.
растворяться
POST /api/v1/pfp/partnerships/{id}/dissolve
{ "reason": "Parties agreed to wind up the venture" }
Контракт заканчивается досрочно.
Работающий пример
Кооперативный фонд и член совместно купить склад для 5 000 000 RUBФонд вкладывает в 3 500 000, член 1 500 000Они соглашаются, что член, который будет управлять складом, берет 40 Член выкупает фонд ежеквартально в течение пяти лет.
"${AUTH[@]}" Надпись ниже обозначает два заголовка, каждый из которых PFP Потребности вызова — токен сеанса, а не API
ключевое, и организация сессии решается в:
AUTH=(-H "Authorization: Bearer $TOKEN" -H "x-organization-id: $ORG_ID")
# 1. Create — amounts in kopecks
curl -X POST https://4pay.online/api/v1/pfp/partnerships \
"${AUTH[@]}" -H "Content-Type: application/json" \
-d '{
"customer_id": "8f2a1c44-0b6e-4d51-9a3f-1c8e5b7d2a90",
"region": "RU", "partnership_type": "diminishing", "currency": "RUB",
"total_value": "500000000",
"bank_contribution": "350000000",
"customer_contribution": "150000000",
"profit_sharing_ratio": {"bank": 60, "customer": 40},
"term_months": 60, "buyout_schedule": "quarterly",
"rental_amount": "1200000"
}'
# 2. Contributions are in, work starts
curl -X POST .../partnerships/$ID/fund "${AUTH[@]}" -d '{}'
curl -X POST .../partnerships/$ID/activate "${AUTH[@]}" -d '{}'
# 3. First quarter earned 80 000 RUB
curl -X POST .../partnerships/$ID/profit "${AUTH[@]}" \
-d '{"gross_profit": "8000000", "period_end_date": "2026-11-30"}'
# fund 48 000 RUB, member 32 000 RUB — by the 60/40 agreement
# 4. First buyout unit
curl -X POST .../partnerships/$ID/buyout "${AUTH[@]}" \
-d '{"units": 1}'
# 175 000 RUB of ownership moves: the member goes from 30 % to 33 %,
# and the rent falls because less of the warehouse is rented
# (ownership percentages are whole numbers, rounded down)
Если бы четверть проиграла 80 000 RUBРаскол был бы 56 000 / 24 000 - через 70/30 взносов, а не на 60/40 соглашение.