docs(audit-C): закрытие 27 вопросов аудита C → реестр v1.12
Решение заказчика 07.05.2026: «A везде» по всем 27 вопросам аудита C. 8 P0 разблокированы для триггера фазы 1 (composer create-project): - Биз-17 (manual routing), Биз-18 (TTFR 15 мин + alert), Биз-19 (24ч-дедуп без списания, duplicate_of_id) - CTO-13 (e2e SET LOCAL+PgBouncer тест в спринте 1) - OPEN-И-13 (OIDC+JIT+break-glass), OPEN-И-14 (WITH CHECK + REVOKE), OPEN-И-15 (append-only + hash-chain + crm_audit_writer), OPEN-И-16 (Sentry whitelist+regex) 12 P1 + 7 P2 закрыты с импактом на schema/narrative (см. §13.10.4 — schema → 54 таблицы, +6 триггеров, +1 роль). Реализация v8.5 — отдельный коммит (схема + narrative + CHANGELOG). Сводка §0: 67 ✅ / 5 🟦 / 5 ⏸ (1 P0 Б-1, 4 P1 ждут Б-1 или у Claude). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -682,3 +682,9 @@ soft
|
||||
деплоя
|
||||
резолв
|
||||
пунктным
|
||||
импакт
|
||||
импактом
|
||||
дедуп
|
||||
дедупликации
|
||||
DEK
|
||||
BYTEA
|
||||
|
||||
+101
-17
@@ -2,10 +2,20 @@
|
||||
|
||||
**Назначение:** единый рабочий список вопросов, требующих решения заказчика для разблокировки разработки. Разбит по адресатам, внутри — по приоритету.
|
||||
|
||||
**Версия:** 1.11 от 07.05.2026 — добавлен раздел 13 «Аудит C» (27 новых вопросов: 8 P0 + 12 P1 + 7 P2). Закрытий нет.
|
||||
**Версия:** 1.12 от 07.05.2026 (вечер) — закрыт раздел 13 «Аудит C»: все 27 вопросов решены вариантом A (рекомендованным). 8 P0 разблокировали триггер фазы 1; 12 P1 + 7 P2 — реализация в фазах 1–3 (см. §13.10).
|
||||
|
||||
> **⚠ Состояние на 06.05.2026 (v8.3.3):** все упоминания файлов `audit-batch-12..15-2026-05-05.md` в этом документе следует читать как ссылки на соответствующие **части 12, 13, 14, 15** объединённого документа `Аудит_partii_12_15_originala_v8_3.md` (объединение проведено 05.05.2026 в рамках оптимизации архива). Содержимое исходных партий полностью сохранено. Аналогично: ссылки на `CHANGELOG-v8_3.md` теперь — это **запись A** в объединённом `CHANGELOG_schema.md`; ссылки на `Konspekt_sessii_05_05_2026_obrabotka_*.md` теперь — это соответствующие **части V и VI** в `Объединённый_конспект.md` (`Konspekt_sessii_05_05_2026.md` удалён в шаге «v8.3++ optimized + правила Claude», информация перенесена в `Объединённый_конспект.md`).
|
||||
|
||||
**Что изменилось в v1.12 относительно v1.11:**
|
||||
|
||||
- **Закрыты все 27 вопросов аудита C** (раздел 13.2–13.5) — решение заказчика 07.05.2026 «A везде, рекомендованные варианты». Выбор обоснован тем, что все рекомендации в реестре проходили предварительную фильтрацию агентами C-1/C-2 как минимально-достаточный baseline для pay-per-lead-сегмента + 152-ФЗ.
|
||||
- **Сводный список закрытий с импактом на schema/narrative** — новый §13.10 «Закрытия аудита C — 27 решений (07.05.2026)».
|
||||
- **8 P0 разблокированы** для триггера фазы 1 (`composer create-project`). Архитектурные следствия: `projects.assignment_strategy='manual'` (Биз-17), `deals.duplicate_of_id` + 24ч-дедуп (Биз-19), e2e-тест `SET LOCAL`+PgBouncer в спринте 1 (CTO-13), `WITH CHECK` + REVOKE на saas-таблицах (OPEN-И-14), append-only triggers + hash-chain + роль `crm_audit_writer` на 5 audit-таблицах (OPEN-И-15), Sentry whitelist+regex для 6 паттернов ПДн (OPEN-И-16), OIDC+JIT+break-glass для admin SSO (OPEN-И-13), TTFR-15-мин default (Биз-18).
|
||||
- **12 P1 закрытий** — все попадают в фазы 1–2: UTM-поля (CTO-14), `project_user_assignments` (CTO-16), TTL ключей 365 дней (OPEN-И-17), DNS-rebinding pin-IP (OPEN-И-18), hard-limit `api_keys` ≤10 (OPEN-И-19), presigned URL 24ч + триггер audit (OPEN-И-20), Nginx rate-limit + Yandex SmartCaptcha + disposable-blacklist (OPEN-И-21), two-person impersonation для `compliance` (CTO-15, Ю-9), Telegram-бот в спринте 9 (Биз-20), generic outbound `marketing.conversion` (Биз-21), простой scoring (Биз-22).
|
||||
- **7 P2 закрытий** — все либо мелкие schema-добавки (`deals.region_code/city` Биз-23, закомментированный DDL `call_recordings` OPEN-И-26), либо infra-задачи (Yandex KMS per-tenant DEK OPEN-И-22, `pg_anonymizer` процедура OPEN-И-24), либо cron-регламенты (Биз-24, OPEN-И-25), либо документная фиксация роли `crm_audit_writer` (OPEN-И-23, уже взято в P0 OPEN-И-15).
|
||||
- **Сводка §0:** 67 ✅ / 5 🟦 / 5 ⏸ (1 P0 Б-1, 4 P1 Диз-1/Диз-3/DO-2/DO-4 — все ждут Б-1 или у Claude). **Все P2 продуктовые закрыты повторно.**
|
||||
- **Импакт на schema/narrative:** schema.sql v8.4 → **v8.5** (12 column-add + 2 новых таблицы + 5 audit-триггеров + 1 новая роль + WITH CHECK на 2 политики + REVOKE на 5 таблиц), narrative v8.4 → **v8.5** (правки §10 дедуп, §12.5.5 TTFR, §22.7 SSO, §22.X Sentry PII, §23.10 admin flow). Реализация — отдельный коммит после фиксации решений.
|
||||
|
||||
**Что изменилось в v1.11 относительно v1.10:**
|
||||
|
||||
- **Аудит C проведён 07.05.2026** (read-only general-purpose агенты, без правки кода). Найдено **27 новых открытых вопросов** — раздел 13:
|
||||
@@ -80,31 +90,27 @@
|
||||
|
||||
| Адресат | Всего | ✅ закрыто | 🟦 структурно | Открыто | P0 | P1 | P2 |
|
||||
|---------|-------|------------|---------------|---------|----|----|-----|
|
||||
| Юрист | 9 | 3 (Ю-1, Ю-6, Ю-7) | 5 (Ю-2-доп, Ю-3-юр, Ю-4, Ю-5, Ю-8) | 1 (Ю-9 v1.11) | 0 | 1 | 0 |
|
||||
| Юрист | 9 | 4 (Ю-1, Ю-6, Ю-7, Ю-9 v1.12) | 5 (Ю-2-доп, Ю-3-юр, Ю-4, Ю-5, Ю-8) | 0 | 0 | 0 | 0 |
|
||||
| Бухгалтер / финансы | 6 | 5 (Б-2..6) | 0 | 1 (Б-1) | **1** | 0 | 0 |
|
||||
| CTO / архитектор | 15 | 11 (CTO-1..11) | 0 | 4 (CTO-13..16 v1.11) | 1 | 3 | 0 |
|
||||
| Бизнес / продакт | 17 | 6 + Биз-3/4/8 авто | 0 | 8 (Биз-17..24 v1.11) | 3 | 3 | 2 |
|
||||
| CTO / архитектор | 15 | 15 (CTO-1..16, кроме CTO-12 — выбор Pest/PHPUnit ждёт Boost) | 0 | 0 | 0 | 0 | 0 |
|
||||
| Бизнес / продакт | 17 | 17 (6 + Биз-3/4/8 авто + Биз-10..16 v1.10 + Биз-17..24 v1.12) | 0 | 0 | 0 | 0 | 0 |
|
||||
| Дизайнер / маркетинг | 4 | 2 (Диз-2, Диз-4) | 0 | 2 (Диз-1 у Claude, Диз-3 ждёт Б-1) | 0 | 2 | 0 |
|
||||
| DevOps / эксплуатация | 5 | 3 (DO-1, DO-3, DO-5) | 0 | 2 (DO-2, DO-4 ждут Б-1) | 0 | 2 | 0 |
|
||||
| OPEN-К (облако) | 8 | 8 | 0 | 0 | 0 | 0 | 0 |
|
||||
| **Аудит партий 1–11** | **4** | **4** (Биз-10..13 закрыты v1.10) | 0 | 0 | 0 | 0 | 0 |
|
||||
| **Аудит партий 12–15** | **3** | **3** (Биз-14..16 закрыты v1.10) | 0 | 0 | 0 | 0 | 0 |
|
||||
| **Аудит C — арх+sec (v1.11)** | **14** | 0 | 0 | 14 (OPEN-И-13..26) | 4 | 5 | 5 |
|
||||
| **Итого продуктовых** | **77** | **40 ✅** | **5 🟦** | **32 ⏸** | **9** | **16** | **7** |
|
||||
| **Аудит C — арх+sec (v1.12)** | **14** | **14** (OPEN-И-13..26 закрыты v1.12) | 0 | 0 | 0 | 0 | 0 |
|
||||
| **Итого продуктовых** | **77** | **67 ✅** | **5 🟦** | **5 ⏸** | **1** | **4** | **0** |
|
||||
|
||||
Плюс 65 OPEN-вопросов в приложениях Д/Ж/З/И — большинство ждут юридической редактуры (см. раздел 8). *В v1.10 закрыт OPEN-И-12 (контакты эскалации) → 66 → 65.*
|
||||
|
||||
**Истинные P0-блокеры на 07.05.2026 (после аудита C):**
|
||||
**Истинные P0-блокеры на 07.05.2026 (после v1.12):**
|
||||
|
||||
- **Б-1** (реквизиты юр. лица) — единственный продуктовый P0 от заказчика. От него зависят Диз-3, DO-2, DO-4.
|
||||
- **8 P0 из аудита C** — должны быть решены ДО `composer create-project laravel/laravel app` (триггер фазы 1):
|
||||
- Биз-17 (стратегия автораспределения), Биз-18 (TTFR-SLA), Биз-19 (антифрод дублей) — продуктовые.
|
||||
- CTO-13 (SET LOCAL + PgBouncer тестируемость).
|
||||
- OPEN-И-13 (Yandex 360 SSO flow), OPEN-И-14 (RLS WITH CHECK + REVOKE), OPEN-И-15 (append-only audit), OPEN-И-16 (Sentry PII-scrubbing).
|
||||
- **Б-1** (реквизиты юр. лица) — единственный продуктовый P0 от заказчика. От него зависят Диз-3, DO-2, DO-4. **Все 8 P0 аудита C закрыты в v1.12** (см. §13.10), триггер фазы 1 (`composer create-project laravel/laravel app`) разблокирован архитектурно (но schema/narrative v8.5 ещё не выпущены — отдельный коммит).
|
||||
|
||||
**Все P2 от аудитов 1–11 и 12–15 закрыты в v1.10** — Биз-10..16, OPEN-К-1, К-7. **5 новых P2 открыты в v1.11** (аудит C, см. раздел 13).
|
||||
**Все P2 закрыты:** 7 P2 из v1.10 (Биз-10..16, OPEN-К-1, К-7) + 7 новых P2 v1.12 (Биз-23/24, OPEN-И-22..26).
|
||||
|
||||
**Открыто 16 P1 после v1.11:** 4 продуктовых (Диз-1/3, DO-2/4) + 3 Биз (20/21/22) + 3 CTO (14/15/16) + 5 OPEN-И (17–21) + 1 Ю (Ю-9).
|
||||
**Открыто 4 P1 после v1.12:** Диз-1 (у Claude), Диз-3 (ждёт Б-1), DO-2 (ждёт Б-1), DO-4 (ждёт Б-1).
|
||||
|
||||
---
|
||||
|
||||
@@ -276,11 +282,13 @@
|
||||
|
||||
**Что Claude может делать сейчас (не блокировано):**
|
||||
|
||||
- Диз-1 — продолжение HTML-прототипов (2/8 готово, 6 в очереди).
|
||||
- Подготовка narrative v8.4 (10 разделов под 30 решений + аудит партий 1–15) — отдельный трек, несколько сессий.
|
||||
- Диз-1 — продолжение HTML-прототипов (3/8 готово, 5 в очереди).
|
||||
- ✅ Narrative v8.4 завершён 06.05.2026 (13/13). Архив v8.4 финал.
|
||||
- ✅ Аудит C закрыт 07.05.2026 — все 27 решений зафиксированы в §13.10 реестра v1.12.
|
||||
- **Реализация v8.5** schema/narrative по §13.10 — отдельный трек (+1 таблица, ~16 колонок, 6 триггеров, 1 роль, ~5 индексов; правки §10/§12.5.5/§14/§17/§19.10/§22/§23.10/Прил.И в narrative).
|
||||
- При триггере фазы 1 (`composer create-project`) — `boost:install` по Прил. Н §10.1.
|
||||
|
||||
**Все P2 закрыты в v1.10 (06.05.2026).** Из 50 продуктовых: 40 ✅ + 5 🟦 структурно + 5 ⏸ (Б-1 P0; Диз-1/3, DO-2/4 — все P1 ждут Б-1 или у Claude).
|
||||
**Все P2 закрыты:** 7 P2 из v1.10 (Биз-10..16, OPEN-К-1, К-7) + 7 P2 из v1.12 (Биз-23/24, OPEN-И-22..26). Из 77 продуктовых: **67 ✅ + 5 🟦 структурно + 5 ⏸** (Б-1 P0; Диз-1/3, DO-2/4 — все P1 ждут Б-1 или у Claude).
|
||||
|
||||
---
|
||||
|
||||
@@ -573,6 +581,82 @@ reminders {
|
||||
- C-2 security агент (general-purpose, 149K токенов, 21 tool use): STRIDE для 4 потоков (логин админа, inbound webhook, билинг, экспорт) + 5 осей (RLS-дыры, secret rotation, audit-логи, DDoS, PII).
|
||||
- Дата проведения: 07.05.2026.
|
||||
|
||||
### 13.10. Закрытия аудита C — 27 решений (07.05.2026, v1.12)
|
||||
|
||||
**Решение заказчика 07.05.2026 (вечер):** «A везде, рекомендованные варианты». Все 27 вопросов из §13.2–13.5 закрыты выбором A. Обоснование выбора зафиксировано в комментариях рекомендаций самого реестра (агенты C-1/C-2 ранжировали варианты так, чтобы A был минимально-достаточным baseline для pay-per-lead-сегмента + 152-ФЗ).
|
||||
|
||||
**Закрытия в этом разделе НЕ затирают таблицы §13.2–13.5** — те остаются как audit history (правило §4.4 — прослеживаемость). Для каждого ID ниже указан выбранный вариант + куда дальше пойдёт реализация.
|
||||
|
||||
#### 13.10.1. P0 — 8 закрытий (разблокированы для триггера фазы 1)
|
||||
|
||||
| ID | Решение (вариант A) | Импакт schema/narrative |
|
||||
|---|---|---|
|
||||
| ✅ **Биз-17** | `manual` (паритет с оригиналом, минимум логики) | schema: `projects.assignment_strategy VARCHAR(32) NOT NULL DEFAULT 'manual'` + CHECK `IN ('manual','round_robin','least_loaded')`. Narrative: §10 routing — описать, что MVP = manual, остальное под флагом Post-MVP |
|
||||
| ✅ **Биз-18** | TTFR-SLA = 15 мин default + alert менеджеру/админу при просрочке | schema: `projects.ttfr_target_minutes INT DEFAULT 15`. Narrative: §12.5.5 — добавить SLA + alert через event bus + UI badge на просрочке |
|
||||
| ✅ **Биз-19** | Окно 24 ч, дубль помечается `duplicate_of_id`, **НЕ списывает лид** | schema: `deals.duplicate_of_id BIGINT NULL REFERENCES deals(id) ON DELETE SET NULL` + index `(tenant_id, phone, created_at)` для O(log n) lookup в окне. Narrative: §10 — секция «Антифрод дублей» |
|
||||
| ✅ **CTO-13** | Обязательный e2e-тест в спринте 1: auto-commit, reuse соединения, job retry — каждый кейс либо успешно ставит `tenant_id`, либо падает с exception | Narrative: §22 + Прил. И «Спринт 1 — TenantAwareJob test plan». Schema: без изменений (уже есть `app.current_tenant_id` GUC). Триггер фазы 1 — после прохождения этого теста |
|
||||
| ✅ **OPEN-И-13** | OIDC + JIT-provisioning, локальный 2FA выключен, fallback — break-glass `super_admin` с force-2FA | Narrative: §22.7 (auth admin) + §23.10 (admin SaaS) — полный flow OIDC + ManageSAML/Yandex 360 endpoint + JIT user create + break-glass procedure. Schema: `saas_admin_users.sso_provider VARCHAR(32) DEFAULT 'yandex360'`, `saas_admin_users.is_break_glass BOOLEAN DEFAULT FALSE` |
|
||||
| ✅ **OPEN-И-14** | `WITH CHECK` на INSERT для `deal_tag_pivot`, `saas_invoice_items` + явный REVOKE saas-таблиц от `crm_app_user` | Schema: ALTER POLICY ... WITH CHECK + `REVOKE ALL ON saas_admin_users, saas_admin_sessions, saas_admin_audit_log, incidents_log, pd_subject_requests, impersonation_tokens FROM crm_app_user` |
|
||||
| ✅ **OPEN-И-15** | Триггер `BEFORE UPDATE/DELETE → RAISE EXCEPTION` + `log_hash = sha256(prev.log_hash \|\| row)`. Отдельная роль `crm_audit_writer` (только INSERT) | Schema: `+log_hash BYTEA NOT NULL` на 5 audit-таблицах (`auth_log`, `activity_log`, `pd_processing_log`, `saas_admin_audit_log`, `balance_transactions`) + 5 BEFORE-триггеров + функция `audit_chain_hash()` + `CREATE ROLE crm_audit_writer` + GRANT INSERT |
|
||||
| ✅ **OPEN-И-16** | Whitelist + regex маска для phone/email/password/secret/token/api_key во всех контекстах (request, breadcrumbs, exception args) | Narrative: §22 — новый подраздел «Sentry PII-scrubbing» с `before_send` псевдокодом. Schema: без изменений |
|
||||
|
||||
#### 13.10.2. P1 — 12 закрытий (фазы 1–2)
|
||||
|
||||
| ID | Решение (вариант A) | Импакт |
|
||||
|---|---|---|
|
||||
| ✅ **Биз-20** | Telegram-бот для нотификаций — спринт 9 (после биллинга) | Narrative: §17 (нотификации) + roadmap. Schema (фаза 2): `users.telegram_user_id BIGINT NULL`, `tenants.telegram_bot_token TEXT NULL` (зашифровано) |
|
||||
| ✅ **Биз-21** | Шаблон события `marketing.conversion` через outbound webhook §19.10 | Narrative: §19.10 — добавить event type `marketing.conversion` с payload-схемой (utm_*, deal_id, conversion_value). Schema: без новых таблиц |
|
||||
| ✅ **Биз-22** | Простой scoring `score = supplier_quality × time_in_form` (3 поля, без ML) | Schema: `suppliers.quality_score NUMERIC(3,2) DEFAULT 1.00`, `deals.time_in_form_seconds INT NULL`, `deals.lead_score NUMERIC(5,2) GENERATED ALWAYS AS (...) STORED` |
|
||||
| ✅ **CTO-14** | 4 × VARCHAR(100) NULL в `deals` + индекс `(tenant_id, utm_source)` (партиционируется PG 16) | Schema: `+utm_source/utm_medium/utm_campaign/utm_content` в `deals` + partition-wise index |
|
||||
| ✅ **CTO-15** | Two-person approval для impersonation в `processing_restricted=TRUE` ИЛИ `chargeback_unrecovered_rub > 0` тенанты — требуется второй админ роли `compliance` через email | Narrative: §22.7.X (impersonation) — секция «Two-person для restricted tenants». Schema: `+impersonation_tokens.second_approver_id BIGINT NULL REFERENCES saas_admin_users(id)`, `+impersonation_tokens.second_approval_at TIMESTAMPTZ NULL` |
|
||||
| ✅ **CTO-16** | Новая таблица `project_user_assignments(project_id, user_id, skills JSONB)` для round-robin pool | Schema: новая таблица + RLS-политика `project_user_assignments_tenant_iso` + 1 индекс. Narrative: §10 (routing) — описать как «расширение для Биз-17 round_robin/least_loaded» |
|
||||
| ✅ **OPEN-И-17** | TTL 365 дней: `webhook_token`, `api_keys`, `outbound.secret_hash`. Cron `secrets:notify-expiring` + UI «продлить» | Schema: `+expires_at TIMESTAMPTZ DEFAULT NOW() + INTERVAL '365 days'` на 3 объектах (либо вынос в `secret_rotations` log-таблицу). Narrative: §22 — секция «TTL secrets + ротация» |
|
||||
| ✅ **OPEN-И-18** | resolve once → pin IP → blacklist RFC1918 на pinned → connect через pinned. Доверенный CA-bundle. Лимит 3 redirect, max body 1 MB | Narrative: §19.10 (outbound webhook) — расширить «SSRF-защита» секцию подразделом «DNS-rebinding pin-IP». Schema: без изменений |
|
||||
| ✅ **OPEN-И-19** | Hard limit 10 ключей (`tenants.api_key_limit DEFAULT 5`), обязательный `expires_at NOT NULL` (default NOW + 365d) | Schema: `+tenants.api_key_limit INT DEFAULT 5 NOT NULL CHECK (api_key_limit BETWEEN 1 AND 10)` + `ALTER api_keys.expires_at DROP DEFAULT, SET NOT NULL` (миграция: backfill всем NOW + 365d) |
|
||||
| ✅ **OPEN-И-20** | S3 presigned URL TTL 24 ч + триггер ON INSERT `report_jobs` → INSERT в `pd_processing_log` action='exported' | Narrative: §14 (отчёты) + §22.9 (152-ФЗ ст.18 экспорт). Schema: новый триггер `report_jobs_export_log` |
|
||||
| ✅ **OPEN-И-21** | Nginx `limit_req_zone` 1000 RPS глобально + Yandex SmartCaptcha на /register + disposable-blacklist (~50К доменов) | Narrative: §22 (security) + Прил. И (Runbook) — секция «Anti-DDoS». Schema: без изменений. Зависимость на сервис Yandex SmartCaptcha — учесть в смете |
|
||||
| ✅ **Ю-9** | Hard-блокировка в `SaasAdminAuthService` для всех ролей кроме `compliance` + UI-заглушка с указанием 152-ФЗ ст.21 | Narrative: §22.7.X + §23.10.9 (workflow ПДн). Реализация совместно с CTO-15 — единый guard |
|
||||
|
||||
#### 13.10.3. P2 — 7 закрытий (фазы 1–3)
|
||||
|
||||
| ID | Решение (вариант A) | Импакт |
|
||||
|---|---|---|
|
||||
| ✅ **Биз-23** | `deals.region_code VARCHAR(8)` + `deals.city VARCHAR(100)` + автоопределение по prefix phone + filter в §10.3 | Schema: 2 поля + индекс `(tenant_id, region_code)`. Narrative: §10.3 (фильтры). Service: `PhonePrefixService` (Минсвязи API или offline CSV) |
|
||||
| ✅ **Биз-24** | Алерт через 48 ч в админке + email finance-роли при `waiting_payment` → `paid` просрочке | Narrative: §17 (нотификации) + Прил. Г (админка). Schema: cron `payments:notify-stale` + конфигурация `system_settings` |
|
||||
| ✅ **OPEN-И-22** | Per-tenant DEK хранится в Yandex KMS; encryption envelope каждого бэкапа использует tenant DEK | Narrative: §22.9 + Прил. И — секция «Crypto-shred per-tenant». Schema: без изменений. Зависимость на Yandex KMS API + IAM-роль |
|
||||
| ✅ **OPEN-И-23** | Создать роль `crm_audit_writer` (только INSERT) + REVOKE остальное; app использует эту роль для audit-write | **Уже взято в P0 OPEN-И-15** — фиксируем как отдельный пункт реестра для прослеживаемости |
|
||||
| ✅ **OPEN-И-24** | Документированная процедура `pg_dump prod → pg_anonymize → restore staging` + автоматизация в CI | Прил. И (Runbook) — новая процедура. Schema: без изменений (расширение `pg_anonymizer` ставится в фазе 3 по Прил. Н) |
|
||||
| ✅ **OPEN-И-25** | Cron `leads:escalate-stale` каждые 30 мин: если `deals.assigned_at + 4h < NOW()` и статус ≠ closed → reassign + email | Narrative: §10 (routing) + §17 (нотификации). Schema: `+deals.assigned_at TIMESTAMPTZ NULL` + `+deals.escalated_count INT DEFAULT 0`. Дополняет Биз-18 TTFR |
|
||||
| ✅ **OPEN-И-26** | Закомментированный DDL `call_recordings` (10 строк) в `db/schema.sql` + ссылка из §10 narrative | Schema: `-- Post-MVP Биз-12: call_recordings(...)` блок. Narrative: §10 — упоминание задела |
|
||||
|
||||
#### 13.10.4. Итоговый импакт на schema.sql v8.4 → v8.5 и narrative v8.4 → v8.5
|
||||
|
||||
**Schema.sql v8.5 (после реализации):**
|
||||
|
||||
- **Новых таблиц:** **+1** (`project_user_assignments`, CTO-16). Закомментированный задел `call_recordings` не учитывается.
|
||||
- **Новых колонок:** ~16 (`projects.assignment_strategy/ttfr_target_minutes`, `deals.duplicate_of_id/utm_*×4/region_code/city/lead_score/time_in_form_seconds/assigned_at/escalated_count`, `tenants.api_key_limit`, `saas_admin_users.sso_provider/is_break_glass`, `impersonation_tokens.second_approver_id/second_approval_at`, `suppliers.quality_score`, `+log_hash×5`).
|
||||
- **Новых триггеров:** **+6** (5 audit-append-only + 1 report_jobs_export_log).
|
||||
- **Новых ролей:** **+1** (`crm_audit_writer`).
|
||||
- **Изменённых RLS-политик:** **+2 WITH CHECK** (`deal_tag_pivot`, `saas_invoice_items`).
|
||||
- **REVOKE statements:** **+6 таблиц** от `crm_app_user`.
|
||||
- **Новых функций:** **+1** (`audit_chain_hash()`).
|
||||
- **Новых индексов:** ~5 (`(tenant_id, phone, created_at)`, `(tenant_id, utm_source)`, `(tenant_id, region_code)`, `project_user_assignments` 1, прочие).
|
||||
|
||||
**Прогноз метрик schema.sql v8.5:** 53 → **54** таблицы (+1) + 12 партиций; 86 → **~91** индекса (+5); 33 → **35** RLS-политик (+2 WITH CHECK переписаны или +1 для project_user_assignments); 34 → **35** ENABLE RLS (+1); **3 → 4 роли** (+crm_audit_writer); **+6 триггеров**; **+1 функция**.
|
||||
|
||||
**Narrative v8.5 — затрагиваемые разделы:**
|
||||
|
||||
- §10 (routing/dedup) — Биз-17/19/23, CTO-16, OPEN-И-25, OPEN-И-26.
|
||||
- §12.5.5 (TTFR) — Биз-18.
|
||||
- §14 (отчёты/экспорт) — OPEN-И-20.
|
||||
- §17 (нотификации) — Биз-20/24, OPEN-И-25.
|
||||
- §19.10 (outbound webhook) — Биз-21, OPEN-И-18.
|
||||
- §22 (security/auth/SSO/Sentry) — OPEN-И-13/14/15/16/17/21/22, Ю-9, CTO-15.
|
||||
- §23.10 (админка SaaS) — OPEN-И-13, CTO-15.
|
||||
- Прил. И (Runbook) — OPEN-И-21/24/25, CTO-13.
|
||||
|
||||
**Реализация — отдельный коммит после фиксации настоящего реестра.** Если schema/narrative v8.5 не будут выпущены сразу, текущая v8.4 остаётся точкой истины, а §13.10 этого реестра — единственным источником решений до следующей версии.
|
||||
|
||||
---
|
||||
|
||||
*Версия: 1.7 от 05.05.2026 (поздний вечер).*
|
||||
|
||||
Reference in New Issue
Block a user