Holding Lifecycle · v0.9.2

Corporation

Full lifecycle of holding structure: promote company to holding, attach or detach subsidiaries, dissolve. Immutable corporate event journal with audit trail.

Promote to Holding Add / Remove Subsidiaries Corporate Event Journal Dissolve Holding migration 103
Lifecycle

Four corporate actions, one context

Every structural change to a holding group is a formal corporate action — validated, recorded in an immutable journal and propagated to access control, IC transactions and consolidated reports.

🏗️

Promote to Holding

Any standalone company becomes a holding root with one action. First subsidiaries can be attached in the same flow.

POST /corporation/companies/:id/promote

Add / Remove Subsidiaries

Attach any existing company to a holding or detach it. Open IC transactions are checked before removal — financial integrity guaranteed.

POST /corporation/holdings/:id/subsidiaries
📋

Corporate Event Journal

Every structural change is recorded as an immutable corporate event. Complete audit trail for regulators and internal governance.

GET /corporation/holdings/:id/events
💥

Dissolve Holding

One-action dissolution: all subsidiaries detached, scope=holding users migrated — no user is left without access. Preview step shows full impact before confirm.

POST /corporation/holdings/:id/dissolve
Data Integrity

8 enforced invariants

Every corporate action runs through a validation chain. Business invariants are enforced at the application layer — no structural change can violate them regardless of who triggers the operation.

I-1
Single parent
A company can belong to at most one holding at a time. Prevents ambiguous ownership chains.
I-2
No holding-of-holding
A holding company cannot become a subsidiary of another holding. Flat two-level hierarchy enforced in v0.9.x.
I-4
No open IC transactions on removal
Unmatched inter-company transactions block subsidiary removal. System returns a structured conflict list — not a generic error.
I-6
No orphaned users on dissolve
Dissolution migrates every scope=holding user to single-company access on the former holding company. No user is left without a company context.
I-7
License slot check
Adding a subsidiary requires a free license slot for the holding. Prevents exceeding the purchased company count per license.
corporate_events migration 103 · immutable · never updated
holding_promoted Standalone → Holding. Records company_id and operator.
subsidiary_added Company attached to holding. Includes holding_id and company_id.
subsidiary_removed Company detached. metadata includes ic_transactions_archived count.
holding_dissolved Holding dissolved. metadata: subsidiaries_detached + users_migrated.
// corporate_events table row
{
  "event_type": "subsidiary_added",
  "holding_id": "019e68…",
  "company_id": "019e71…",
  "performed_by": "admin-uuid",
  "metadata": { "ic_archived": 0 }
}
UI · Corporation Page

Structure, charts and lifecycle in one view

The Corporation page combines KPI summary, two analytical spline charts, holding tree with subsidiary kanban cards and a paginated corporate event log — all in a single responsive layout.

Corporation page — Structure tab
Корпорація Управління структурою холдингової групи ▲ Промоція 🗑 Розпустити По статусу По типу подій Місяць Квартал Рік 1 Холдинг 4 Дочірні 5 Всього 39111001 ЄДРПОУ ▲ Структура 📋 Журнал подій АРХ Груп ТОВ 39111001 · Холдинг Активна ДОЧІРНІ (4) × АРХ Агрохімія 39111002 з 01.01.2024 active × АРХ Трейдинг 39111003 з 15.03.2024 active × АРХ Сервіс 39111004 з 01.06.2024 active + Додати дочірню
Corporation page — Event Journal
Корпорація Журнал корпоративних подій 1 Холдинг 4 Дочірні ▲ Структура 📋 Журнал подій subsidiary_added АРХ Сервіс додано до холдингу АРХ Груп 01.06.2024 10:22 subsidiary_added АРХ Трейдинг додано до холдингу АРХ Груп 15.03.2024 14:05 subsidiary_added АРХ Агрохімія додано до холдингу АРХ Груп 01.01.2024 09:15 holding_promoted АРХ Груп ТОВ промоційовано до статусу холдингу 15.12.2023 11:00 subsidiary_added АРХ Агрохімія... [попередня версія] 01.01.2024 08:50 Завантажити ще
Add Subsidiary dialog
Додати дочірню АРХ Груп ТОВ Додати дочірню компанію Оберіть компанію для приєднання 🏢 АРХ Агрологістик ТОВ (39999001) 🏢 АРХ Агрологістик ТОВ (39999001) 🏢 АРХ Фарм ТОВ (39888002) 🏢 АРХ Будінвест ТОВ (39777003) Примітка (необов'язково) Причина або коментар… Скасувати Приєднати
Dissolve — preview step
Розпуск холдингу Незворотня операція Розпуск холдингу ✓ Конфліктів не знайдено — можна продовжити 4 Дочірніх до від'єднання 3 Користувачів для міграції Ця дія незворотня. Всі дочірні стануть самостійними компаніями. Примітка (необов'язково) Причина або коментар… Скасувати Розпустити
REST API

7 endpoints — full lifecycle

Method Endpoint Description Auth
GET /corporation/holdings/:id/structure Full holding tree: root + subsidiaries with status company:read
GET /corporation/holdings/:id/events Paginated corporate event log (cursor-based) company:read
POST /corporation/companies/:id/promote Promote standalone company to holding status system:admin
POST /corporation/holdings/:id/subsidiaries Attach existing company to holding (license slot check) company:write
DEL /corporation/holdings/:id/subsidiaries/:cid Detach subsidiary (I-4 IC conflict check) company:write
GET /corporation/holdings/:id/dissolve/preview Dry-run: returns users_to_migrate + ic_conflicts system:admin
POST /corporation/holdings/:id/dissolve Dissolve holding — I-6 user migration guaranteed system:admin
Related

Part of the Holding ecosystem