Скип на основной контент

Партнерство

Две стороны вкладывают капитал в общее предприятие, распределяют прибыль по соглашению и несут убытки строго пропорционально тому, что каждая из них внесла.

Последний пункт – это весь продукт. Прибыль делится по соглашению сторон; убыток делится на долю взносов, и никакое соглашение не меняет этого. Контракт, в котором одна сторона защищена от потерь за счет другой, перестает быть участием и становится ссудой под проценты, нося слово «партнерство», и каждый регулирующий орган будет рассматривать его как единое целое.

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_iduuid✅контрагент
regionstring✅Контрактный регион; должен поддерживаться графиком счетов
partnership_typeenum✅permanent | diminishing
total_valuestring✅Небольшие подразделения. должна равняться сумме двух взносов
bank_contributionstring✅Небольшие подразделения
customer_contributionstring✅Небольшие подразделения
profit_sharing_ratioobject✅{"bank": n, "customer": m}Целый процент, Должен суммировать 100
currencystring—ISO 4217
term_monthsinteger—Требуется когда partnership_type is diminishing
buyout_scheduleenum—monthly | quarterly | semi_annually | annually
rental_amountstring—Незначительные единицы, за период, для использования совместного имущества
asset_descriptionstring—Бесплатный текст
metadataobject—Ваши личные данные, возвращенные нетронутыми

Две валидации отвергают большинство первых попыток:

  • 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Контрактный регион
typepermanent | diminishing
envtest | 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 соглашение.