# Dane raportowe

# Dane raportowe

Wszystkie dane raportowe są statycznymi plikami JSON w katalogu `public/data/`. Vite serwuje je bezpośrednio — brak backendu, brak API.

---

## Konwencja nazewnictwa plików

```
public/data/T{tableId}/T{tableId}L{listId}{locationId}.json
```

Przykład: `T1L12830.json` → tabela **T1**, lista **L1**, lokalizacja **2830**

---

## Listy (list_id)

| Wyświetlana nazwa | list_id | Przykładowy plik |
|---|---|---|
| Rafał Lubak | L1 | `T1L12830.json` |
| Rafał Wieczorek | L2 | `T1L22830.json` |
| Andrzej Chmielewski | L3 | `T1L32830.json` |

W selektorze UI wyświetlany jest format: `Rafał Lubak (L1)`. Kod mapuje nazwę → `list_id` przy budowaniu ścieżki do pliku.

---

## Sekcje raportu (table_id)

| table_id | Sekcja | Format danych |
|---|---|---|
| **T1** | Informacje o wolumenie miesięcznym | `ReportRow[]` |
| **T2** | Kluczowe wskaźniki miesięczne (KPI) | `KpiRow[]` |
| **T5** | Sprzedaż od początku roku (YTD) | `ReportRow[]` |

Każda sekcja w DOM posiada atrybut `data-table-id="T1"` — przydatne przy automatyzacji lub scrapingu.

---

## Format JSON — T1 i T5 (`ReportRow[]`)

```json
[
  {
    "id": "2026",
    "label": "2026",
    "cells": [
      { "value": "88 045" },
      { "value": "79 546" },
      { "value": "X", "highlight": true },
      { "value": "196 424", "highlightBg": true }
    ]
  }
]
```

### Pola `CellValue`

| Pole | Typ | Opis |
|------|-----|------|
| `value` | `string` | Wyświetlana wartość komórki |
| `highlight` | `boolean?` | Tekst w kolorze amber (`text-amber-500`) |
| `highlightBg` | `boolean?` | Tło amber (`bg-amber-500/15`) + `highlight` |

---

## Format JSON — T2 (`KpiRow[]`)

```json
[
  {
    "id": "avg-sales",
    "label": "Średnia sprzedaż",
    "cells": ["1 234", "1 100", "980", "..."]
  }
]
```

Kolejność komórek odpowiada kolejności kolumn miesięcznych (od najnowszego).

### Wskaźniki T2 (kolejność A–K)

| ID wiersza | Etykieta | Typ wartości |
|---|---|---|
| `avg-sales` | Średnia sprzedaż | zł |
| `customers-count` | Ilość klientów | liczba |
| `other-sales-qty` | Sprzedaż pozostałe | liczba |
| `customers-yoy` | Klienci vs rok poprzedni % | % |
| `sales-pizza-total` | Pizza | zł |
| `pizzas-yoy` | Pizze vs rok poprzedni % | % |
| `drinks-sales` | Napoje | zł |
| `drinks-pct` | Sprzedaż napoje % | % |
| `addons-sales` | Sprzedaż dodatków | zł |
| `starters-sales` | Startery | zł |
| `avg-bill` | Średni rachunek | zł |

Wiersze pieniężne (`zł`) mają automatycznie doklejony sufiks `zł` w UI.

---

## Mapowanie ID komórek — T1

### Wiersze (lata)

| Etykieta w JSON | ID w UI |
|---|---|
| `2026` | `TY` |
| `2025` | `LY` |
| `2024` | `AY` |
| `2026 vs 2025` | `VS1` |
| `2025 vs 2024` | `VS2` |

### Kolumny miesięczne — aliasy specjalne (TY)

| Miesiąc | ID |
|---|---|
| `TY` + `02` (luty) | `TYLM` |
| `TY` + `03` (marzec) | `TYTM` |
| `TY` + `04` (kwiecień) | `TYNM` |

Pozostałe kolumny: `{yearAlias}{monthId}` → np. `LY03`

### Przykładowe ID komórek T1

| Komórka | ID |
|---|---|
| TY, luty | `TYLM` |
| TY, marzec | `TYTM` |
| LY, styczeń | `LY01` |
| VS1, czerwiec | `VS106` |

---

## Mapowanie ID komórek — T2

Kolumny mają techniczne ID miesięczne:

| Miesiąc | ID kolumny |
|---|---|
| Mar 2026 | `TM` (bieżący miesiąc) |
| Lut 2026 | `M1` |
| Sty 2026 | `M2` |
| Gru 2025 | `M3` |
| Lis 2025 | `M4` |
| Paź 2025 | `M5` |
| Wrz 2025 | `M6` |
| Sie 2025 | `M7` |
| Lip 2025 | `M8` |
| Cze 2025 | `M9` |
| Maj 2025 | `M10` |
| Kwi 2025 | `M11` |
| Mar 2025 | `MR` |

Wiersze mają ID literowe Excel: `A`, `B`, ..., `K`.

Format ID komórki T2: `{litera}-{miesiacId}` → np. `A-TM`, `B-M1`, `K-MR`

---

## Dodanie nowych danych

1. Utwórz plik JSON w odpowiednim katalogu (`public/data/T1/`, `T2/`, `T5/`)
2. Nazwij plik zgodnie z konwencją: `T1L{listId}{locationId}.json`
3. Jeśli dodajesz nową listę — zarejestruj ją w selektorze w `src/App.tsx`
4. Zapisz plik — Vite wykryje zmianę i automatycznie przeładuje stronę (bez restartu kontenera)