# πŸ— АрхитСктура NANAXE CRM ## ΠžΠ±Ρ‰Π°Ρ схСма ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Flutter Application β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Presentation Layer (UI) β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Screens β”‚ Widgets β”‚ Themes β”‚ Navigation β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ (GoRouter) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ State Management Layer (Riverpod) β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Providers β”‚ Notifiers β”‚ Streams β”‚ State β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Domain Layer (Business Logic) β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Models β”‚ Repositories β”‚ Services β”‚ Use Cases β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Data Layer β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Local Storage (Hive) β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ β”‚ β”‚ Tasks β”‚ Alarms β”‚ MindMaps β”‚ Events β”‚ β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Remote Storage (Firebase Firestore) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ β–Ό β–Ό β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Firebase Auth β”‚ β”‚ AI Services β”‚ β”‚ Google Calendar β”‚ β”‚ (Google Sign- β”‚ β”‚ (OpenAI, β”‚ β”‚ API β”‚ β”‚ In, Email) β”‚ β”‚ Anthropic) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ## ΠŸΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… ### 1. АутСнтификация ``` User β†’ AuthScreen β†’ AuthNotifier (Riverpod) β†’ Firebase Auth ↓ UserModel β†’ Firestore ↓ HomeScreen ``` ### 2. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ ``` User β†’ TasksScreen β†’ TaskNotifier β†’ FirestoreService β†’ Firestore ↓ LocalStorageService (Hive) ↓ Offline Cache ``` ### 3. AI гСнСрация ``` User β†’ TaskScreen β†’ AIService β†’ OpenAI API ↓ Generate Subtasks ↓ TaskModel β†’ Firestore ``` ### 4. Mind-ΠΊΠ°Ρ€Ρ‚Π° ``` User β†’ MindMapScreen β†’ MindMapNotifier β†’ FirestoreService ↓ MindMap Nodes (Tree) ↓ GraphView Widget (Render) ``` ### 5. Бинхронизация ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” Compare β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Local Hive β”‚ ←───────────→ β”‚ Firestore β”‚ β”‚ (Offline) β”‚ β”‚ (Remote) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ↓ ↓ Merge Conflicts Real-time Sync ↓ ↓ Local Priority Remote Priority β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ↓ Merged Data β†’ UI ``` ## ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½Π°Ρ структура ### Core Module ``` core/ β”œβ”€β”€ firebase_config.dart # Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Firebase β”œβ”€β”€ firestore_service.dart # CRUD ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Firestore β”œβ”€β”€ local_storage_service.dart # Hive кэш β”œβ”€β”€ ai_service.dart # AI ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ β”œβ”€β”€ router.dart # GoRouter ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Ρ‹ └── theme.dart # Material Ρ‚Π΅ΠΌΡ‹ ``` ### Features Modules ``` features/ β”œβ”€β”€ auth/ β”‚ β”œβ”€β”€ auth_screen.dart β”‚ β”œβ”€β”€ auth_provider.dart β”‚ └── auth_service.dart β”œβ”€β”€ tasks/ β”‚ β”œβ”€β”€ task_list_screen.dart β”‚ β”œβ”€β”€ task_detail_screen.dart β”‚ β”œβ”€β”€ task_provider.dart β”‚ └── task_service.dart β”œβ”€β”€ mindmap/ β”‚ β”œβ”€β”€ mindmap_screen.dart β”‚ β”œβ”€β”€ mindmap_widget.dart β”‚ β”œβ”€β”€ mindmap_provider.dart β”‚ └── mindmap_service.dart β”œβ”€β”€ calendar/ β”‚ β”œβ”€β”€ calendar_screen.dart β”‚ β”œβ”€β”€ event_provider.dart β”‚ └── google_calendar_service.dart └── alarms/ β”œβ”€β”€ alarms_screen.dart β”œβ”€β”€ alarm_provider.dart └── notification_service.dart ``` ## РолСвая модСль ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ User Roles β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Admin β”‚ Member β”‚ Viewer β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ βœ“ ВсС ΠΏΡ€Π°Π²Π° β”‚ βœ“ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ β”‚ βœ“ ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ β”‚ β”‚ βœ“ Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎ- β”‚ Π·Π°Π΄Π°Ρ‡ β”‚ Π·Π°Π΄Π°Ρ‡ β”‚ β”‚ Π²Π°Π½ΠΈΠ΅ mind-β”‚ βœ“ Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎ- β”‚ βœ“ ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ β”‚ β”‚ ΠΊΠ°Ρ€Ρ‚ β”‚ Π²Π°Π½ΠΈΠ΅ β”‚ mind-ΠΊΠ°Ρ€Ρ‚ β”‚ β”‚ βœ“ Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ β”‚ своих Π·Π°Π΄Π°Ρ‡β”‚ βœ— Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎ- β”‚ β”‚ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ β”‚ βœ“ ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ β”‚ Π²Π°Π½ΠΈΠ΅ β”‚ β”‚ βœ“ Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ β”‚ ΠΎΠ±Ρ‰ΠΈΡ… Π·Π°Π΄Π°Ρ‡β”‚ βœ— Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ β”‚ β”‚ Π»ΡŽΠ±Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡β”‚ βœ— Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎ- β”‚ β”‚ β”‚ β”‚ Π²Π°Π½ΠΈΠ΅ mind-β”‚ β”‚ β”‚ β”‚ ΠΊΠ°Ρ€Ρ‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ## МодСль Π΄Π°Π½Π½Ρ‹Ρ… ### Task Model ```dart TaskModel { String id; String title; String? description; String projectId; String? parentTaskId; // Для ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ TaskStatus status; // todo, inProgress, review, done TaskPriority priority; // low, medium, high, urgent String? assigneeId; String? creatorId; List tags; DateTime? dueDate; int estimatedHours; Map aiMetadata; // AI Π΄Π°Π½Π½Ρ‹Π΅ DateTime createdAt; DateTime updatedAt; } ``` ### MindMapNode Model ```dart MindMapNode { String id; String projectId; String? parentId; // Для Π΄Π΅Ρ€Π΅Π²Π° int level; // Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ влоТСнности String title; String? taskId; // Бвязь с Π·Π°Π΄Π°Ρ‡Π΅ΠΉ String color; double x, y; // ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ DateTime createdAt; DateTime updatedAt; } ``` ## Бинхронизация ### БтратСгия 1. **Offline-first**: ВсС Π΄Π°Π½Π½Ρ‹Π΅ сначала ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ локально 2. **Background sync**: ΠŸΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠ°Ρ синхронизация с Firestore 3. **Conflict resolution**: - Last write wins для простых ΠΏΠΎΠ»Π΅ΠΉ - Merge для ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ - User prompt для критичСских ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ### Flow ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ UI │────→│ Repository │────→│ Firestoreβ”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ↓ ↓ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Cache │←────│ Hive β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ## Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ### Firebase Security Rules ```javascript // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€Π°Π² доступа function hasRole(allowedRoles) { return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role in allowedRoles; } // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° владСния function isOwner(resource) { return resource.ownerId == request.auth.uid; } // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° члСнства Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ function isTeamMember(teamId) { let team = get(/databases/$(database)/documents/teams/$(teamId)).data; return team.memberIds.hasAny([request.auth.uid]); } ``` ## ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ### ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ 1. **Pagination**: Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π·Π°Π΄Π°Ρ‡ порциями ΠΏΠΎ 50 2. **Lazy loading**: Mind-ΠΊΠ°Ρ€Ρ‚Π° загруТаСтся ΠΏΠΎ частям 3. **Caching**: Hive для ΠΎΡ„Π»Π°ΠΉΠ½-доступа 4. **Indexes**: Firestore индСксы для частых запросов 5. **Batching**: ΠŸΠ°ΠΊΠ΅Ρ‚Π½Π°Ρ запись Π² Firestore ### Firestore Indexes ``` tasks: [projectId, createdAt] [assigneeId, status] [dueDate] events: [startTime, endTime] [attendeeIds] mindmaps: [projectId, level] ``` ## ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ### Π­Ρ‚Π°ΠΏΡ‹ роста **Phase 1: MVP (сСйчас)** - Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ CRUD ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ - ΠŸΡ€ΠΎΡΡ‚Π°Ρ аутСнтификация - Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ кэш **Phase 2: Team Features** - Командная Ρ€Π°Π±ΠΎΡ‚Π° - Π ΠΎΠ»ΠΈ ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ - Real-time collaboration **Phase 3: AI Integration** - Π£ΠΌΠ½ΠΎΠ΅ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ - Авто-приоритизация - ГСнСрация ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ² **Phase 4: Enterprise** - SSO интСграция - Audit logs - Advanced analytics --- **Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ создан для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ NANAXE** πŸš€