Вычисление чистой прибыли с учётом комиссий агентов и их подчинённых

Если комиссия каждого агента считается от исходной цены полиса, сложите проценты всей цепочки и вычтите эту долю. Если проценты берутся от остатка, формула будет другой.

Короткий ответ

Что ответить на собеседовании

Если комиссия каждого агента считается от исходной цены полиса, сложите проценты всей цепочки и вычтите эту долю. Если проценты берутся от остатка, формула будет другой.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо реализовать метод getProfit(), который рассчитывает чистую прибыль компании после распределения процентов (комиссий) всем участникам цепочки агентов, включая их под‑агентов.

class Agent {
    public $childAgent; // ссылка на под‑агента
    public $commission; // процент комиссии агента
}

class Policy {
    public $policyPrice; // стоимость полиса
    public function getProfit(Agent $rootAgent) {
        // реализация расчёта прибыли
    }
}

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

Ответ

Если комиссия каждого агента считается от исходной цены полиса, сложите проценты всей цепочки и вычтите эту долю. Если проценты берутся от остатка, формула будет другой.

При явно принятом первом варианте учебная реализация метода:

public function getProfit(Agent $rootAgent): float {
    $sum = function (?Agent $agent) use (&$sum): float {
        if ($agent === null) return 0;
        if ($agent->commission < 0 || $agent->commission > 100) {
            throw new InvalidArgumentException('Invalid commission');
        }
        return $agent->commission + $sum($agent->childAgent);
    };
    $percent = $sum($rootAgent);
    if ($percent > 100) throw new InvalidArgumentException('Total exceeds 100%');
    return $this->policyPrice * (1 - $percent / 100);
}

Предполагаются ациклическая цепочка, конечные проценты и неотрицательная цена. В реальной денежной системе нужны целые минимальные единицы, точные доли и согласованное округление, а не float.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее