3cbc019268
Фундамент интеграции Carbonio на уровне модели Pharmacy (без обращений к серверу): - Поля Pharmacy: carbonio_email, carbonio_account_id, carbonio_sync_enabled (default False), carbonio_sync_status, carbonio_last_sync, carbonio_sync_error - Генерация адреса <mail_prefix организации><номер>@домен (a1@, t1@, p1@...); префикс из Directory.extra_data['mail_prefix'], домен из ConnectorConfig(carbonio) с дефолтом aks-apteka.com.ua - Ручной override адреса не перетирается автогенерацией - Уникальность carbonio_email: clean() + частичный unique-констрейнт в БД (пустые не конфликтуют); автоген при коллизии оставляет поле пустым - 10 тестов (apps.locations.tests) — у приложения было 0 API-слой (клиент/sync/сигналы/задачи) — следующим шагом. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>