# Zarządzanie partiami i datami ważności: dokumentacja

> Instalacja i aktualizacja Moduł instaluje się jak każdy moduł PrestaShop, bez zależności i bez Composera. Otwórz Moduły → Menedżer modułów. Kliknij Wgraj moduł i upuść plik ZIP. Następnie kliknij Konfiguruj.…

- Strona: <https://www.datafirefly.com/pl/documentation/dfdlc/>
- Język: pl
- Zaktualizowano: 2026-10-05
- Inne języki: [fr](https://www.datafirefly.com/documentation/dfdlc/index.md), [en](https://www.datafirefly.com/en/documentation/dfdlc/index.md), [es](https://www.datafirefly.com/es/documentation/dfdlc/index.md), [de](https://www.datafirefly.com/de/documentation/dfdlc/index.md), [it](https://www.datafirefly.com/it/documentation/dfdlc/index.md), [pt](https://www.datafirefly.com/pt/documentation/dfdlc/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfdlc/index.md)
- Indeks: <https://www.datafirefly.com/pl/documentation/llms.txt>

## Instalacja i aktualizacja

Moduł instaluje się jak każdy moduł PrestaShop, bez zależności i bez Composera.

1. Otwórz **Moduły → Menedżer modułów**.
2. Kliknij **Wgraj moduł** i upuść plik ZIP.
3. Następnie kliknij **Konfiguruj**.

Moduł tworzy trzy tabele (partie, ruchy, opakowania dostawcy) i dwie zakładki w menu Katalog: **Partie i daty ważności** oraz **Opakowania dostawcy**.

Przy aktualizacji z wcześniejszej wersji wystarczy wgrać nowy plik ZIP. Partie i ich historia zostają zachowane. Jeśli korzystałeś z pojedynczego rabatu wersji 1.0.0, staje się on pierwszym progiem rabatowym.

Jeśli zakładki nie pojawią się od razu, wyczyść pamięć podręczną w Zaawansowane → Wydajność i zaloguj się ponownie.

## Data przydatności i minimalnej trwałości: co robi moduł

**Data przydatności** (DLC, należy spożyć do) dotyczy żywności łatwo psującej się: po niej produktu nie wolno sprzedawać. **Data minimalnej trwałości** (DLUO / DDM, najlepiej spożyć przed) oznacza utratę jakości: produkt można sprzedawać, jeśli klient jest poinformowany.

- Przeterminowana partia z datą przydatności nigdy nie trafia do zamówienia, nawet jeśli cron jeszcze nie działał tego dnia.
- Automatyczne działania po terminie (zdjęcie ze stanu, wyłączenie produktu) dotyczą tylko daty przydatności.
- Partia po dacie minimalnej trwałości jest tylko dezaktywowana; dopóki jest aktywna, może trafiać do zamówień.

Starannie wybierz rodzaj daty przy tworzeniu partii: to on decyduje o automatycznych działaniach.

## Konfiguracja modułu

Strona konfiguracji pokazuje adres crona, szybki stan partii i cztery bloki ustawień.

### Wyświetlanie na karcie produktu

- **Pokaż datę na karcie produktu**: data najbliższej partii na stanie dla kombinacji wybranej przez klienta.
- **Próg oznaczenia krótkiego terminu**: poniżej tej liczby dni pojawia się oznaczenie „Krótki termin". Domyślnie: 10 dni.

### Automatyczne rabaty na krótki termin

- **Włącz automatyczne rabaty**: wyłączenie usuwa wszystkie rabaty utworzone przez moduł.
- **Progi rabatowe**: do 10 wierszy „gdy do terminu partii pozostało X dni" / „rabat Y %". Zobacz sekcję Progi rabatowe.

### Stan i koszty

- **Gdy partia z datą przydatności traci ważność**: tylko dezaktywuj partię, dezaktywuj ją i odejmij pozostałą ilość ze stanu (zalecane) albo odejmij stan i wyłącz produkt, jeśli nie zostanie żadna ważna partia.
- **Domyślnie dodawaj przyjętą ilość do stanu PrestaShop**: wartość proponowana przy tworzeniu partii. Zostaw Nie, dopóki wprowadzasz partie dla zapasu już policzonego w PrestaShop.
- **Zapisuj koszt partii w każdej pozycji zamówienia**: zobacz Koszt zakupu i marże.
- **Zwracaj sztuki do partii po anulowaniu zamówienia**: zobacz Anulowanie i przywrócenie.
- **Drukuj numery partii na dokumentach dostawy** (domyślnie włączone) i **na fakturach** (domyślnie wyłączone).

### Powiadomienia e-mail

- **Próg ostrzeżenia przed upływem terminu**: okno obserwowane przez zbiorczy e-mail. Domyślnie: 30 dni.
- **E-mail odbiorcy**: pozostaw puste, aby użyć adresu sklepu.

## Opakowania dostawcy

Jeśli kupujesz w kartonach, a sprzedajesz na sztuki, zdefiniuj opakowanie raz w **Katalog → Opakowania dostawcy**:

- produkt i w razie potrzeby kombinacja;
- nazwa (na przykład „Karton 12 szt.");
- indeks dostawcy i EAN kartonu;
- liczba sztuk w kartonie i zwykły koszt kartonu (netto);
- indeks i EAN sprzedawanej sztuki. Puste pola przejmują wartości produktu lub kombinacji.

Wynikowy koszt jednostkowy jest pokazywany na bieżąco. Produkt może mieć kilka opakowań.

## Tworzenie i przyjmowanie partii

W **Katalog → Partie i daty ważności** kliknij **Dodaj partię** lub użyj tego samego przycisku w panelu partii na karcie produktu.

### Przyjęcie w sztukach

1. Wyszukaj produkt (co najmniej 2 znaki) i wybierz kombinację lub pozostaw „Wszystkie kombinacje".
2. Pozostaw **Przyjęto w sztukach**.
3. Podaj numer partii, rodzaj daty, datę ważności, przyjętą ilość i koszt zakupu za sztukę netto.
4. Ustaw **Dodaj tę ilość do stanu PrestaShop**: Tak dla nowej dostawy, Nie dla zapasu już policzonego.

### Przyjęcie w kartonach

1. Po wyborze produktu wybierz **Przyjęto w kartonach dostawcy**.
2. Wybierz opakowanie, podaj **przyjęte kartony** i **koszt kartonu (netto)**, uzupełniony zwykłym kosztem.
3. Ilość i koszt jednostkowy są obliczane i blokowane: 3 kartony po 12 szt. za 30 € dają 36 sztuk po 2,50 €.

Indeks dostawcy partii jest uzupełniany indeksem kartonu. Możesz go zastąpić numerem dokumentu dostawy od dostawcy.

### Edycja, dezaktywacja, usuwanie

- Produktu partii nie można zmienić po jej utworzeniu.
- Zmiana ilości zapisuje ruch korygujący bez zmiany stanu PrestaShop.
- Numer partii może wystąpić tylko raz dla produktu.
- Partii już sprzedanej nie można usunąć: dezaktywuj ją.

## Import partii z CSV

Przycisk **Import partii (CSV)** na liście partii. Na tej stronie można pobrać plik przykładowy.

- Separator średnik, przecinek lub tabulator; pierwszy wiersz = nazwy kolumn; maksymalnie 5000 wierszy i 5 MB.
- Produkt jest wyszukiwany przez `reference`, `ean13` lub `id_product`. Indeks kombinacji również działa w `reference`.
- `combination_reference` lub `combination_ean13` przypisuje partię do kombinacji.
- Wymagane: `lot_number` i `expiry_date` (RRRR-MM-DD lub DD/MM/RRRR).
- `date_type`: dlc lub dluo (domyślnie dlc).
- `quantity` i `unit_cost` dla przyjęcia w sztukach.
- `boxes`, `box_reference` i `box_cost` dla przyjęcia w kartonach: ilość i koszt jednostkowy są liczone na podstawie opakowania.
- `supplier_ref` i `note` są opcjonalne.

```
reference;lot_number;date_type;expiry_date;quantity;unit_cost
CROQ-2KG;L2026-118;dluo;2027-03-31;24;6.40
PATE-12;L2026-204;dlc;15/01/2027;;
```

Numer partii, który już istnieje dla produktu, jest pomijany. Raport wymienia każdy błędny wiersz z przyczyną; pozostałe wiersze są importowane.

## Pulpit i widoki filtrowane

Karty nad listą są klikalne i filtrują listę: przeterminowane partie wciąż aktywne, partie z bliskim terminem, partie z aktywnym rabatem, wartość zakupu zagrożona terminem i wartość zakupu zapasu w partiach. Filtr pozostaje aktywny przy przechodzeniu między stronami; **Pokaż wszystkie partie** go usuwa.

## Wydawanie FEFO

Przy zatwierdzeniu zamówienia, dla każdego produktu:

1. najpierw partie zamówionej kombinacji, potem partie produktu;
2. partie są zużywane od najbliższej do najdalszej daty;
3. przeterminowane partie z datą przydatności są wykluczone.

Zamówienie na 10 sztuk przy partii z 4 i partii z 8 sztukami pobiera pierwsze 4, a potem 6 z kolejnej partii. Każde pobranie jest zapisywane z zamówieniem.

## Koszt zakupu i marże

Przy włączonej opcji **Zapisuj koszt partii w każdej pozycji zamówienia** moduł oblicza średni ważony koszt zużytych partii i zapisuje go jako cenę zakupu pozycji zamówienia. Statystyki marży PrestaShop korzystają wtedy z rzeczywistego kosztu. Partie bez kosztu nie są brane pod uwagę.

## Progi rabatowe

Przykład: 10 % przy 90 dniach, 20 % przy 60 dniach, 30 % przy 30 dniach.

- Stosowany jest najwyższy procent spośród osiągniętych progów: rabat nigdy nie maleje w miarę zbliżania się terminu.
- Dotyczy tylko partii wydawanej jako następna, dla produktu lub kombinacji.
- To standardowa reguła cenowa katalogu PrestaShop, kończąca się w dniu ważności.
- Gdy partia się wyczerpie, rabat przechodzi na kolejną partię lub znika.
- Rabaty są przeliczane przy zapisie ustawień lub partii, a następnie codziennie przez cron.

Te reguły podlegają zwykłym priorytetom PrestaShop. Jeśli stosujesz już szerokie rabaty katalogowe, sprawdź priorytety przed włączeniem progów.

## Kompletacja: zamówienie i dokument dostawy

W zamówieniu w panelu blok **Wysłane partie (FEFO)** pokazuje dla każdego produktu partię, datę, ilość i koszt. Te same partie są drukowane na dokumencie dostawy oraz na fakturze, jeśli opcja jest włączona.

## Anulowanie i przywrócenie

Gdy zamówienie przechodzi w status Anulowane, jego sztuki wracają do pierwotnych partii. Jeśli później wróci do ważnego statusu, sztuki są ponownie pobierane według FEFO. Cykl może się powtarzać bez podwójnego liczenia.

Częściowe zwroty z przywróceniem na stan nie są automatycznie przypisywane do partii. Pojawiają się w Kontroli stanu, gdzie tworzysz odpowiednią partię.

## Kontrola stanu

Przycisk **Kontrola stanu** porównuje sztuki w partiach ze stanem PrestaShop:

- dodatnia różnica oznacza sztuki bez partii: **Utwórz partię dla brakujących sztuk** otwiera uzupełniony formularz;
- ujemna różnica oznacza, że partie zawierają więcej niż stan: popraw partie lub stan.

Produkty z partiami na poziomie produktu są porównywane według całkowitego stanu; produkty, których wszystkie partie są przypisane do kombinacji, kombinacja po kombinacji.

## Panel partii na karcie produktu

Karta produktu w panelu wyświetla partie produktu ze stanem, kosztem i rabatem oraz porównuje sumę ze stanem PrestaShop. Przycisk Dodaj partię wstępnie wybiera produkt. W PrestaShop 8.1 i 9 panel znajduje się w zakładce Moduły karty produktu.

## Zadanie cron

Wydawanie, identyfikowalność i import działają bez crona. Progi rabatowe, przeterminowane partie i powiadomienie e-mail wymagają codziennego wywołania adresu z konfiguracji:

```
https://twoj-sklep.pl/index.php?fc=module&module=dfdlc&controller=cron&token=TWOJ_TOKEN
```

Odpowiedź JSON podaje dezaktywowane partie, zdjęte sztuki, wyłączone produkty, utworzone, zmienione lub usunięte rabaty oraz wysłane powiadomienia.

## Powiadomienia e-mail

Przy każdym uruchomieniu crona zbiorczy e-mail wymienia partie, których data wchodzi w okno ostrzeżenia: numer, produkt, rodzaj, datę i ilość. Każda partia jest zgłaszana tylko raz. Szablony są dostępne w 8 językach w katalogu `mails/`.

## Wyświetlanie na karcie produktu

Przez hook `displayProductAdditionalInfo` karta pokazuje „Należy spożyć do" lub „Najlepiej spożyć przed" z datą najbliższej partii dla wybranej kombinacji. Poniżej progu pojawia się oznaczenie „Krótki termin" z rabatem. Rabat progowy poza tym progiem jest oznaczony jako „oferta z powodu terminu". Szablon `views/templates/hook/product-expiry.tpl` można nadpisać w motywie.

## Identyfikowalność i wycofanie partii

Formularz partii pokazuje jej historię: przyjęcie, zamówienia, anulowania, korekty, zdjęcie po terminie, z linkiem do każdego zamówienia. **Eksport CSV** pobiera historię partii; **Eksportuj ruchy** na liście pobiera pełną historię. Te dane są podstawą procedury wycofania.

## Najczęstsze pytania

### Czy moduł zastępuje stan PrestaShop?

Nie. Stan PrestaShop pozostaje podstawą sprzedaży; moduł dzieli go na datowane partie i zgłasza różnice.

### Co jeśli partie nie pokrywają całego stanu?

Zamówienie przebiega normalnie: moduł pobiera to, co jest dostępne w partiach. Kontrola stanu pokazuje sztuki bez partii.

### Czy moduł obsługuje multisklep?

Tak. Każda partia należy do sklepu, w którym ją utworzono.

### Co się dzieje przy odinstalowaniu?

Trzy tabele są usuwane wraz z zawartością. Zrób kopię bazy, jeśli planujesz ponowną instalację.
