US-реестр: Владелец агентства (US-OWN-AG)
Назначение
Реестр user stories владельца/руководителя агентства контекста rewards — как агентство распределяет
комиссию между агентом и собой (политика, agent-boost, per-deal перераспределение пула), выплачивает
доли агентам и выгружает финансовую картину в Excel (детально по сотруднику×сделке и сводно за период).
Все сущности агентства — в границах TenantId = CompanyId агентства (ADR-0052); управление — permission
rewards.commission-policy.manage / rewards.payouts.manage/approve / rewards.commission.view-all. Каждая story даёт
формулировку «как … хочу … чтобы …», приоритет, критерий приёмки и ссылки на покрывающие домены, операции,
отчёты, события и use-cases.
Metadata
| Поле | Значение |
|---|---|
| ID-диапазон | US-OWN-AG-01..15 |
| Роль | Владелец / руководитель / администратор агентства (tenant-scope CompanyId агентства) |
| Контекст | rewards |
| Статус | draft |
| Приоритеты | Must (политика распределения и выплаты) / Should (boost, корректировки, выгрузки) / Could (удобства) |
| Правило покрытия | Каждая story обязана иметь ≥ 1 покрывающий домен-документ и ≥ 1 операционный документ (api/report/UC/событие); отсутствие покрытия = дыра traceability |
Карта покрытия (обзор)
Роль: Владелец агентства — политика распределения (US-OWN-AG-01..07)
Политика определяет деление пула агентства (комиссия − удержание ПИН) между строками Agency
(удержание агентства) и Agent (доля агента). Строка Platform (удержание ПИН) вне политики и
неприкосновенна. У агентства одновременно одна активная политика; смена политики не пересчитывает уже
подтверждённые начисления (в начислении хранится снапшот применённого правила).
| № | User Story | Приоритет | Критерий приёмки | Покрытие: домен | Покрытие: API / отчёт / UC / события |
|---|---|---|---|---|---|
| US-OWN-AG-01 | Как владелец агентства, я хочу задать политику распределения комиссии (удержание агентства в % или фиксированной суммой от пула), чтобы автоматически считать долю агента и удержание агентства. | Must | Правило DefaultRule задаёт Percent/FixedAmount (удержание агентства) либо AgentPercentOfPool/AgentPercentOfPrice (доля агента); agencyShare + agentShare = пул всегда; вне диапазонов — отказ (INV-2). | ../domain/agency-commission-policy.md — AgencyRetentionKind, INV-2 | ../api/agency/create-agency-policy.md; UC-RWD-005 |
| US-OWN-AG-02 | Как владелец агентства, я хочу задавать персональные условия удержания для отдельных агентов поверх правила по умолчанию, чтобы гибко мотивировать сильных сотрудников. | Should | AgentOverrides содержит уникальные AgentUserId (каждый — активный пользователь агентства, сверка при активации, INV-3); оверрайд применяется по AgentUserId независимо от текущего членства агента. | ../domain/agency-commission-policy.md — AgentOverrides, INV-3 | ../api/agency/create-agency-policy.md, ../api/agency/update-agency-policy.md |
| US-OWN-AG-03 | Как владелец агентства, я хочу активировать новую политику так, чтобы предыдущая автоматически архивировалась, чтобы всегда была ровно одна действующая политика. | Must | Activate атомарно переводит прежнюю активную политику в Archived (INV-1); в Active документ правил иммутабелен — правка через новый Draft + Activate (INV-4). | ../domain/agency-commission-policy.md — INV-1/4, статусы | ../api/agency/activate-agency-policy.md, ../api/agency/archive-agency-policy.md, ../api/agency/list-agency-policies.md |
| US-OWN-AG-04 | Как владелец агентства, я хочу понимать поведение при отсутствии активной политики, чтобы не терять деньги агентов по недосмотру. | Should | Без активной политики в момент подтверждения начисления удержание агентства = 0, весь пул достаётся агенту (fallback INV-6); строка Platform применяется независимо. | ../domain/agency-commission-policy.md — INV-6 | ../domain/commission-accrual.md — распределение при Confirm |
| US-OWN-AG-05 | Как владелец агентства, я хочу завести временную мотивационную кампанию agent-boost (повышенная доля набора агентов на период), чтобы стимулировать продажи, не трогая базовую политику. | Should | Кампания — отдельный агрегат с периодом и набором агентов; BoostRule выражает долю агента (AgentPercentOfPool/AgentPercentOfPrice, INV-8); при подтверждении начисления активный на CompletedAt boost перекрывает базовое правило. | ../domain/agency-commission-policy.md — AgentBoostCampaignEntity, INV-8 | ../api/agency/create-agent-boost-campaign.md, ../api/agency/activate-agent-boost-campaign.md |
| US-OWN-AG-06 | Как владелец агентства, я хочу управлять жизненным циклом boost-кампаний (активировать/досрочно завершить/архивировать) и видеть их реестр, чтобы контролировать мотивационные акции. | Could | Draft → Active → Archived; в Active меняется только EffectiveTo (INV-10); периоды boost одного агента не пересекаются (INV-9) — резолюция детерминирована. | ../domain/agency-commission-policy.md — INV-9/10 | ../api/agency/activate-agent-boost-campaign.md, ../api/agency/archive-agent-boost-campaign.md, ../api/agency/list-agent-boost-campaigns.md |
| US-OWN-AG-07 | Как владелец агентства, я хочу перераспределить доли конкретной сделки (пул Agency ↔ Agent) с обязательной причиной, чтобы точечно исправлять частные договорённости. | Should | Per-deal корректировка меняет только пул между Agency и Agent (строка Platform и gross неизменны, INV-11), пока строка Agent не включена в поручение; оставляет append-only аудит-строку; при MoneyReceived дельта компенсируется проводкой кошелька. | ../domain/commission-accrual.md — INV-11, Distribution | ../api/agency/adjust-accrual-distribution.md; UC-RWD-011 |
Роль: Владелец агентства — выплаты, сводки и выгрузки (US-OWN-AG-08..15)
Выплаты собираются из долей агентов, у которых деньги от застройщика уже получены (гейт MoneyReceived).
Excel-выгрузки дают бухгалтерскую и управленческую картину; исполнение платежей — вне платформы (ручная
отметка).
| № | User Story | Приоритет | Критерий приёмки | Покрытие: домен | Покрытие: API / отчёт / UC / события |
|---|---|---|---|---|---|
| US-OWN-AG-08 | Как руководитель агентства, я хочу одобрить заявку агента на изменение его доли или отклонить её с комментарием, чтобы решения по пулу принимал именно руководитель. | Should | Агент лишь предлагает сумму своей доли; одобрение из Pending исполняет Distribution-корректировку (Agent = ProposedAgentAmount, Agency = пул − ProposedAgentAmount) под теми же guard-ами; на начисление — не более одной открытой заявки (INV-12). | ../domain/commission-accrual.md — CommissionAdjustmentRequestEntity, INV-12 | ../api/agency/approve-distribution-adjustment.md; UC-RWD-011 |
| US-OWN-AG-09 | Как руководитель агентства, я хочу сформировать платёжное поручение по свободным долям агентов за период, чтобы выплатить вознаграждения. | Must | Поручение Kind = AgencyCommission собирает свободные Agent-строки начислений в MoneyReceived (гейт пройден), группирует по агентам в позиции; занятые строки в другое поручение не попадают (INV-1). | ../domain/payout-order.md — INV-1/2, AgencyCommission | ../api/agency/create-payout-order.md, ../api/agency/update-payout-order-items.md; UC-RWD-005 |
| US-OWN-AG-10 | Как руководитель агентства, я хочу утвердить поручение (заморозив состав) и передать его в бухгалтерию, чтобы зафиксировать сумму к выплате. | Must | Approve из Draft при ItemsCount ≥ 1 замораживает состав, статус PendingPayment («ожидается»); повторные переходы отклоняются guard-ом статуса. | ../domain/payout-order.md — INV-6, статусы | ../api/agency/approve-payout-order.md |
| US-OWN-AG-11 | Как руководитель/бухгалтер агентства, я хочу отметить поручение выплаченным (исполнение вне платформы), чтобы каскадно закрыть доли агентов и провести дебет кошельков. | Must | MarkPaid из PendingPayment проставляет PaidAt поручению/позициям/строкам; начисление, у которого все Agent-строки выплачены, переходит MoneyReceived → Paid (INV-7); дебет счетов AgentCommission — по событию (ADR-0065). | ../domain/payout-order.md — INV-7 | ../api/agency/mark-payout-order-paid.md; ../events/payout-order-status-changed.md |
| US-OWN-AG-12 | Как руководитель агентства, я хочу отклонить или отменить поручение с освобождением его строк, чтобы вернуть доли в оборот при ошибке состава. | Should | Reject (с обязательной причиной) из PendingPayment и Cancel из Draft возвращают строкам PayoutOrderItemId = null (INV-8) — они снова доступны следующему поручению. | ../domain/payout-order.md — INV-8, статусы | ../api/agency/reject-payout-order.md, ../api/agency/cancel-payout-order.md, ../api/agency/list-payout-orders.md |
| US-OWN-AG-13 | Как владелец агентства, я хочу видеть онлайн-сводку комиссий агентства и по каждому агенту (получим / получили × подтверждено / ожидает / деньги получены), чтобы контролировать финансы без выгрузки. | Should | Сводка раскладывает суммы по стадиям начислений в границах tenant-а; доступ — rewards.commission.view-all; отменённые начисления в денежные суммы не входят. | ../domain/commission-accrual.md — статусы, строки распределения | ../api/agency/get-agency-commission-summary.md, ../api/agency/get-agent-commission-summary.md, ../api/agency/list-agency-accruals.md |
| US-OWN-AG-14 | Как владелец агентства, я хочу выгрузить детальную Excel-таблицу (строка = комиссионное начисление по сотруднику и сделке) с полной раскладкой (gross, удержание ПИН, пул, доля агента, удержание агентства) за период, чтобы сверять с бухгалтерией и разбирать спорные сделки. | Should | Асинхронная задача формирует XLSX по tenant-у за период (фильтры агент/статус); скачивание — по signed URL; период ≤ 1 года, ≤ 2 активных задач; PII инвесторов в файл не попадает; денежные totals исключают Cancelled. | ../domain/commission-accrual.md — строки распределения, FinalPriceAmount | ../reports/agency-rewards-by-employee-per-deal.md; ../api/agency/create-rewards-export.md, ../api/agency/get-rewards-export-job.md; UC-RWD-012 |
| US-OWN-AG-15 | Как владелец агентства, я хочу выгрузить сводную Excel-таблицу за период (строка = агент: число сделок, начислено, доля агента, удержано, разбивка по стадиям), чтобы считать зарплатные итоги и оценивать эффективность. | Should | Сводная XLSX-задача агрегирует по AgentUserId за период; строка раскладывает долю агента по стадиям (подтверждено / получено / выплачено) + ожидает подтверждения; итоговая строка по агентству; те же лимиты и signed URL. | ../domain/commission-accrual.md — статусы, строки Agent/Agency | ../reports/agency-rewards-period-summary.md; ../api/agency/create-rewards-export.md; UC-RWD-012 |
Зафиксированные ограничения покрытия
| US | Ограничение | Принято |
|---|---|---|
| US-OWN-AG-01/07 | Политика и корректировки делят только пул, не gross | Удержание ПИН (строка Platform) снимается до политики и неприкосновенно для агентства (ADR-0066) |
| US-OWN-AG-03/05 | Правка политики/boost не пересчитывает подтверждённые начисления | Снапшот применённого правила (AppliedPolicyId/AppliedBoostCampaignId) фиксируется в начислении (ADR-0068 п.4) |
| US-OWN-AG-09/11 | Выплата только после гейта денег | Источник строк — доли агентов из начислений в MoneyReceived (ADR-0067) |
| US-OWN-AG-11 | Исполнение платежей отложено | Полная структура поручений + ручной MarkPaid (решение №9 ТЗ); банковские реквизиты не хранятся |
| US-OWN-AG-14/15 | Выгрузки — Sensitive | Async pipeline + signed URL (TTL 1 час), audit ExportSensitive, retention файла 7 дней (ADR-0041); PII инвесторов не выгружается |
Обратные ссылки
Автоссылки: где используется этот документ.
- Use Cases (1): US-реестр: Финансовый блок ПИН (US-FIN)
- registries (1): Реестр use cases и user stories PIN
Связанные документы
- Дома полей: ../domain/agency-commission-policy.md (политика,
agent-boost, деление пула), ../domain/commission-accrual.md (строки
распределения, корректировки, заявки), ../domain/payout-order.md
(
AgencyCommission, статусы выплат). - Отчёты: ../reports/agency-rewards-by-employee-per-deal.md, ../reports/agency-rewards-period-summary.md.
- Use cases: UC-RWD-005, UC-RWD-011, UC-RWD-012.
- Кошелёк (дебет по выплате, кредит по получению денег): ../../wallet/README.md.
- Смежные реестры US: партнёр — user-stories-partner.md; финансовый блок ПИН — user-stories-pin-finance.md.