Statistics Debug
Master: {masterData?.value}
Detail Sum: {detailData?.reduce((sum, item) => sum + item.value, 0)}
Sync: {masterData?.value === detailSum ? '✅' : '❌'}
Last Update: {new Date().toLocaleTimeString()}
)
}
```
### **АВТОМАТИЧЕСКИЕ ТЕСТЫ СИНХРОНИЗАЦИИ**
```typescript
// Тест для проверки синхронизации статистик
describe('Statistics Synchronization', () => {
it('должен синхронизировать master и detail значения', async () => {
const { masterValue } = await fetchMasterStats()
const detailItems = await fetchDetailItems()
const detailSum = detailItems.reduce((sum, item) => sum + item.value, 0)
expect(masterValue).toBe(detailSum)
})
it('должен обновлять связанные статистики при изменении данных', async () => {
const initialStats = await fetchStats()
await updateInventory({ productId: '1', change: +10 })
// Ждём обновления
await new Promise((resolve) => setTimeout(resolve, 1000))
const updatedStats = await fetchStats()
expect(updatedStats.totalStock).toBe(initialStats.totalStock + 10)
})
})
```
---
## 📊 **ШАБЛОНЫ КОМПОНЕНТОВ**
### **БАЗОВЫЙ СТАТИСТИЧЕСКИЙ КОМПОНЕНТ**
```tsx
interface StatCardProps {
title: string
value: number | string
icon: React.ComponentType
color: 'blue' | 'green' | 'red' | 'yellow' | 'purple' | 'orange'
unit?: string
subtitle?: string
trend?: { value: number; period: string }
format?: 'number' | 'currency' | 'percentage' | 'compact'
loading?: boolean
error?: string
}
export const StatCard: React.FC