# АНАЛИЗ РИСКОВ: РЕФАКТОРИНГ СИСТЕМЫ РЕГИСТРАЦИИ ОРГАНИЗАЦИЙ **Дата:** 17 сентября 2025 **Проект:** SFERA - Рефакторинг registerOrganization **Статус:** Детальный анализ рисков --- ## 🚨 КРИТИЧЕСКИЕ РИСКИ (P0) ### 1. Breaking Changes для Frontend **Вероятность:** ВЫСОКАЯ | **Влияние:** КРИТИЧЕСКОЕ **Описание:** Изменение названий GraphQL мутаций сломает все UI формы регистрации **Затронутые файлы:** - `/src/hooks/useAuth.ts` - основные функции регистрации - `/src/components/auth/` - все компоненты регистрации - `/src/app/register/page.tsx` - страница регистрации - Все компоненты использующие `registerFulfillmentOrganization`/`registerSellerOrganization` **Последствия:** - ❌ Полная блокировка новых регистраций - ❌ Runtime ошибки в production - ❌ Потеря новых пользователей **Мера защиты:** ```typescript // Вариант 1: Старые мутации (для отката) /* mutation RegisterFulfillmentOrganization($input: FulfillmentRegistrationInput!) { registerFulfillmentOrganization(input: $input) { ... } } */ // Вариант 2: Новая мутация (активная) mutation RegisterOrganization($input: OrganizationRegistrationInput!) { registerOrganization(input: $input) { ... } } ``` ### 2. Database Integrity **Вероятность:** СРЕДНЯЯ | **Влияние:** КРИТИЧЕСКОЕ **Описание:** Ошибки в новой логике могут создать inconsistent данные **Риски:** - Orphan записи пользователей без организаций - Duplicate организации при сбоях - Broken реферальные связи - Invalid API keys записи **Последствия:** - 💾 Коррупция данных в production - 🔗 Нарушение связей между сущностями - 👥 Пользователи без доступа к кабинетам **Мера защиты:** ```typescript // Обязательные транзакции const result = await prisma.$transaction(async (tx) => { const organization = await tx.organization.create({...}) const user = await tx.user.upsert({...}) const partnership = await tx.counterparty.create({...}) return { organization, user, partnership } }, { timeout: 30000, // 30 секунд maxWait: 5000 // Максимум 5 секунд ожидания }) ``` ### 3. Authentication Flow Failure **Вероятность:** НИЗКАЯ | **Влияние:** КРИТИЧЕСКОЕ **Описание:** Нарушение базового flow регистрации → блокировка новых пользователей **Критические точки:** - SMS отправка и верификация - JWT token генерация - Session создание - User context установка **Последствия:** - 🚫 Полная блокировка onboarding новых пользователей - 💸 Потеря revenue от новых клиентов - 📞 Рост support tickets **Мера защиты:** ```typescript // Rollback на старую систему при критических ошибках const REGISTRATION_ROLLBACK_ENABLED = process.env.REGISTRATION_ROLLBACK === 'true' if (REGISTRATION_ROLLBACK_ENABLED && errorRate > 5%) { // Автоматический откат на старые функции return await legacyRegisterOrganization(input) } ``` ### 4. Transaction Safety **Вероятность:** ВЫСОКАЯ | **Влияние:** КРИТИЧЕСКОЕ **Описание:** Отсутствие proper транзакций может создать partial records **Текущие проблемы:** ```typescript // ❌ ПРОБЛЕМА: Нет транзакций const organization = await prisma.organization.create({...}) // Если сбой здесь - organization создана, но user нет! const user = await prisma.user.create({...}) ``` **Исправление:** ```typescript // ✅ РЕШЕНИЕ: Atomic операции await prisma.$transaction([ prisma.organization.create({...}), prisma.user.create({...}), prisma.counterparty.create({...}) ]) ``` --- ## ⚠️ ВЫСОКИЕ РИСКИ (P1) ### 5. API Keys Validation **Вероятность:** СРЕДНЯЯ | **Влияние:** ВЫСОКОЕ **Описание:** Новая логика валидации может отклонять валидные ключи **Проблемные сценарии:** - Wildberries API изменяет формат ключей - Ozon добавляет новые поля валидации - Временные недоступности внешних API - Rate limiting от маркетплейсов **Последствия:** - 🛒 Селлеры не могут зарегистрироваться - 📊 Потеря данных о товарах - 🤝 Нарушение partnership flow **Мера защиты:** ```typescript // Fallback валидация для API ключей async validateMarketplaceKeys(keys: ApiKeys) { try { // Новая строгая валидация await strictValidation(keys) } catch (error) { console.warn('Strict validation failed, trying legacy:', error) // Откат на старую менее строгую валидацию return await legacyValidation(keys) } } ``` ### 6. Partnership Logic **Вероятность:** СРЕДНЯЯ | **Влияние:** ВЫСОКОЕ **Описание:** Изменения могут нарушить автопартнерство и реферальную систему **Критические компоненты:** - Partner code обработка (строки 312-396) - Автоматическое создание counterparty записей - Referral points начисление - Notification система **Потенциальные поломки:** ```typescript // Риск: Если partner не найден, создание организации все равно продолжается // но партнерские связи не создаются const partner = await prisma.organization.findUnique({ where: { referralCode: args.input.partnerCode } }) if (!partner) { // ❌ РИСК: Тихий сбой партнерства console.warn('Partner not found, but continuing...') // Должно быть более явное handling } ``` **Мера защиты:** Comprehensive audit logging для всех partnership операций ### 7. DaData Integration **Вероятность:** СРЕДНЯЯ | **Влияние:** ВЫСОКОЕ **Описание:** Внешний API может изменить формат или стать недоступным **Зависимости:** - `/src/services/dadata-service.ts` - внешний API - Валидация ИНН организаций - Автозаполнение реквизитов - Проверка актуальности данных **Риски отказа:** - 🌐 Network timeouts - 📋 API rate limits - 💰 Billing issues с DaData - 🔄 Breaking changes в API **Мера защиты:** ```typescript // Circuit breaker pattern для DaData class DaDataCircuitBreaker { private failureCount = 0 private lastFailureTime = 0 private readonly FAILURE_THRESHOLD = 5 private readonly TIMEOUT = 60000 // 1 минута async call(operation: () => Promise) { if (this.shouldReject()) { throw new Error('DaData circuit breaker OPEN') } try { const result = await operation() this.onSuccess() return result } catch (error) { this.onFailure() throw error } } } ``` --- ## 🔶 УМЕРЕННЫЕ РИСКИ (P2) ### 8. Performance Impact **Вероятность:** ВЫСОКАЯ | **Влияние:** СРЕДНЕЕ **Описание:** Единая функция может работать медленнее из-за дополнительной логики **Факторы замедления:** - Больше условных проверок - Комплексная валидация всех типов - Multiple external API calls в одной функции - Database queries оптимизация **Benchmark цели:** - Регистрация SELLER: <15 секунд - Регистрация бизнес-org: <30 секунд - API availability: >99.5% - Error rate: <2% ### 9. Code Complexity **Вероятность:** ВЫСОКАЯ | **Влияние:** СРЕДНЕЕ **Описание:** Объединение может усложнить понимание и поддержку кода **Проблемы сложности:** - Большая функция с множественной логикой - Сложные условные ветвления по типам - Testing становится комплекснее - Debugging труднее **Мера защиты:** Разбиение на smaller focused функции: ```typescript class OrganizationRegistrationService { // Основная функция-оркестратор async registerOrganization(input: Input): Promise { if (isBusinessOrganization(input.type)) { return this.registerBusinessOrganization(input) } else { return this.registerSellerOrganization(input) } } // Специализированные функции private async registerBusinessOrganization(input: BusinessInput) { } private async registerSellerOrganization(input: SellerInput) { } } ``` ### 10. Testing Coverage **Вероятность:** СРЕДНЯЯ | **Влияние:** СРЕДНЕЕ **Описание:** Нужно тестировать больше edge cases в одной функции **Testing challenges:** - 4 типа организаций × множественные сценарии - External API mocking (DaData, SMS, маркетплейсы) - Partnership и referral logic coverage - Error handling для всех paths **Решение:** Comprehensive test matrix: ```typescript describe('registerOrganization', () => { describe('FULFILLMENT organization', () => { it('should create with valid INN') it('should fail with invalid INN') it('should handle DaData failures') it('should create partnership links') // ... 20+ test cases }) describe('SELLER organization', () => { it('should create with WB API key') it('should create with Ozon API key') it('should fail without API keys') // ... 15+ test cases }) }) ``` --- ## 🛡️ ОБЩАЯ СТРАТЕГИЯ МИТИГАЦИИ РИСКОВ ### 1. Фазированный подход - **Фаза 1:** Исправление текущих critical bugs - **Фаза 2:** Создание новой системы ПАРАЛЛЕЛЬНО старой - **Фаза 3:** A/B testing между системами - **Фаза 4:** Постепенное переключение - **Фаза 5:** Откат старой системы ### 2. Мониторинг и алерты ```typescript // Критические метрики для мониторинга const CRITICAL_METRICS = { registrationErrorRate: '<1%', registrationLatency: '<30s p95', databaseConsistency: '100%', apiKeyValidationRate: '>95%', partnershipCreationRate: '>98%' } // Автоматические алерты if (errorRate > 1% || latency > 30000) { await sendAlert('CRITICAL: Registration issues detected') if (errorRate > 5%) { await enableRollbackMode() } } ``` ### 3. Rollback готовность - **Feature flags** для быстрого отключения - **Database migrations** с rollback scripts - **Комментарии-переключатели** для instant code rollback - **Monitoring dashboards** для real-time visibility ### 4. Тестовая стратегия - **Unit tests:** >90% coverage для новой логики - **Integration tests:** Все external API interactions - **E2E tests:** Complete registration flows - **Load tests:** Performance под нагрузкой - **Chaos engineering:** Failure scenarios --- ## 📊 RISK MATRIX | Риск | Вероятность | Влияние | Приоритет | Мера защиты | |------|-------------|---------|-----------|-------------| | Breaking Changes Frontend | Высокая | Критическое | P0 | Комментарии-переключатели | | Database Integrity | Средняя | Критическое | P0 | Транзакции + мониторинг | | Auth Flow Failure | Низкая | Критическое | P0 | Feature flags + rollback | | Transaction Safety | Высокая | Критическое | P0 | Atomic операции | | API Keys Validation | Средняя | Высокое | P1 | Fallback валидация | | Partnership Logic | Средняя | Высокое | P1 | Audit logging | | DaData Integration | Средняя | Высокое | P1 | Circuit breaker | | Performance Impact | Высокая | Среднее | P2 | Benchmarking + оптимизация | | Code Complexity | Высокая | Среднее | P2 | Модульное разбиение | | Testing Coverage | Средняя | Среднее | P2 | Test matrix | --- ## ✅ ГОТОВНОСТЬ К РИСК-МИНИМИЗАЦИИ **Статус:** ✅ Все критические риски идентифицированы **Защита:** ✅ Меры митигации определены для каждого риска **Мониторинг:** ✅ Метрики и алерты подготовлены **Rollback:** ✅ Стратегия отката через комментарии готова **ВЫВОД:** Проект готов к безопасной реализации с comprehensive risk mitigation.