39 lines
2.0 KiB
Markdown
39 lines
2.0 KiB
Markdown
# BMC Hub v2.2.2 - Sync Safety Release
|
|
|
|
**Release Date:** 22. februar 2026
|
|
|
|
## 🛡️ Critical Fixes
|
|
|
|
### e-conomic Customer Sync Mapping
|
|
- **Fixed ambiguous matching**: e-conomic sync now matches customers only by `economic_customer_number`
|
|
- **Removed unsafe fallback in this flow**: CVR/name fallback is no longer used in `/api/v1/system/sync/economic`
|
|
- **Added conflict-safe behavior**: if multiple local rows share the same `economic_customer_number`, the record is skipped and logged as conflict (no overwrite)
|
|
- **Improved traceability**: sync logs now include the actual local customer id that was updated/created
|
|
|
|
### Settings Sync UX
|
|
- **Aligned frontend with backend response fields** for vTiger/e-conomic sync summaries
|
|
- **Improved 2FA error feedback** in Settings sync UI when API returns `403: 2FA required`
|
|
- **Fixed sync stats request limit** to avoid API validation issues
|
|
- **Temporarily disabled CVR→e-conomic action** in Settings UI to prevent misleading behavior
|
|
- **Clarified runtime config source**: sync uses environment variables (`.env`) at runtime
|
|
|
|
## 🗄️ Database Safety
|
|
|
|
### New Migration
|
|
- Added migration: `migrations/138_customers_economic_unique_constraint.sql`
|
|
- Normalizes empty/whitespace `economic_customer_number` values
|
|
- Adds a partial unique index on non-null `economic_customer_number`
|
|
- Migration aborts with clear error if duplicates already exist (manual dedupe required before rerun)
|
|
|
|
## ⚠️ Deployment Notes
|
|
|
|
- Run migration `138_customers_economic_unique_constraint.sql` before enabling broad sync operations in production
|
|
- If migration fails due to duplicates, deduplicate `customers.economic_customer_number` first, then rerun migration
|
|
- Existing 2FA API protection remains enabled
|
|
|
|
## ✅ Expected Outcome
|
|
|
|
- Sync payload and DB target row are now consistent in the e-conomic flow
|
|
- Incorrect overwrites caused by weak matching strategy are prevented
|
|
- Future duplicate `economic_customer_number` values are blocked at database level
|