/**

 * @defgroup public_capital_diallocate_process Деаллокации программных инвестиций
 * @ingroup public_capital_processes
 * 
 * Процесс, при котором кооператив деаллоцирует неиспользованные инвестиции из завершенного проекта
 * и возвращает их обратно в кооперативный кошелек программы "Благорост" для повторного использования в других проектах.
 * 
 * @pre <b>Обязательные условия:</b>
 * - Проект завершен со статусом COMPLETED
 * - В проекте есть неиспользованные программные средства
 * - Авторизация от имени кооператива
 * 
 * \htmlonly
 * <div class="mermaid">
 * sequenceDiagram
 *     participant К as Кооператив
 *     participant Контракт as Capital Contract
 *     participant Пр as Проект
 *     participant П as Программа благороста
 *     
 *     К->>Контракт: 1. Запрос деаллокации средств
 *     Note over Контракт: Проверка статуса проекта
 *     Контракт->>Пр: 2. Получение данных проекта
 *     Note over Пр: Проверка наличия средств
 *     alt Коэффициент использования > 100%
 *         Контракт->>Контракт: 3. Расчет неиспользованных средств
 *     else Коэффициент использования <= 100%
 *         Note over Контракт: Все средства считаются неиспользованными
 *     end
 *     Контракт->>П: 4. Возврат средств в программу
 *     Note over П: Обновление баланса программы
 * </div>
 * \endhtmlonly
 * 
 * ## Пошаговое описание процесса
 * 
 * ### Шаг 1: Инициация деаллокации средств
 * <b>Действие:</b> @ref capital::diallocate "Деаллокация инвестиций"
 * 
 * Кооператив инициирует процесс деаллокации неиспользованных средств из завершенного проекта.
 * Это необходимо для возврата средств в программу "Благорост" и повторного их использования.
 * 
 * @note Авторизация требуется от аккаунта кооператива, подтверждая его
 * право распоряжаться средствами программы благороста
 * 
 * ### Шаг 2: Проверка статуса проекта
 * <b>Действие:</b> Валидация статуса проекта
 * 
 * Система проверяет, что проект завершен со статусом COMPLETED.
 * Только завершенные проекты могут подвергаться деаллокации средств.
 * 
 * @post Projects::get_project_or_fail подтверждает существование и статус проекта
 * 
 * ### Шаг 3: Проверка наличия программных средств
 * <b>Действие:</b> Проверка баланса программных средств
 * 
 * Система проверяет, что в проекте есть неиспользованные программные средства.
 * Проект должен иметь положительный баланс в fact.program_invest_pool.
 * 
 * @post Проверка project.fact.program_invest_pool.amount > 0
 * 
 * ### Шаг 4: Расчет неиспользованных средств
 * <b>Действие:</b> Определение суммы к возврату
 * 
 * Система рассчитывает сумму неиспользованных программных средств:
 * - При коэффициенте использования > 100% часть средств считается неиспользованной
 * - При коэффициенте использования <= 100% все программные средства считаются неиспользованными
 * - Расчет производится на основе фактически использованной суммы
 * 
 * @post Capital::Core::Generation::calculate_investor_used_amount рассчитывает использованную сумму
 * 
 * ### Шаг 5: Возврат средств в программу
 * <b>Действие:</b> Деаллокация и возврат средств
 * 
 * Система возвращает неиспользованные программные средства в глобальный пул:
 * - Средства списываются из пула инвестиций проекта
 * - Средства зачисляются в кошелек программы благороста
 * - Обновляется баланс программы благороста
 * 
 * @post Capital::Core::deallocate_program_investment_from_project производит деаллокацию средств
 * 
 * ### Шаг 6: Завершение процесса
 * <b>Действие:</b> Финализация операции
 * 
 * После деаллокации средства становятся доступны для повторного использования:
 * - В других проектах кооператива
 * - Для новых аллокаций в рамках программы благороста
 * 
 * @post После завершения процесса:
 * 1. Неиспользованные средства возвращены в программу благороста
 * 2. Баланс программы благороста увеличен
 * 3. Пул инвестиций проекта уменьшен
 * 4. Средства доступны для повторной аллокации
 * 
 */