# Co to jest tryb wysyłki (Batch) w Cron?

Wprowadzenie trybu wsadowego jest kluczowe dla firm generujących duży wolumen dokumentów (powyżej 5 000 dziennie). Pozwala on na obejście limitów zapytań interaktywnych narzuconych przez Ministerstwo Finansów poprzez pakowanie wielu faktur w jedną paczkę.

<p class="callout info">Włączenie tego trybu jest możliwe tylko przez serwis Cairo. </p>

### 1. Kluczowe zmiany techniczne

<div _ngcontent-ng-c223669173="" class="container" id="bkmrk-nowa-metoda-wysy%C5%82ki%3A"><div _ngcontent-ng-c4244271959="" aria-busy="false" aria-live="off" class="markdown markdown-main-panel stronger enable-updated-hr-color" dir="ltr" inline-copy-host="">- **Nowa metoda wysyłki:** System wykorzystuje funkcję która przesyła paczki dokumentów w formacie ZIP zakodowanym w Base64.
- **Struktura paczki:** Każdy request zawiera:
    
    
    - Unikalny identyfikator paczki.
    - Liczba dokumentów wewnątrz (domyślnie **50**).
    - Skrót SHA256 do weryfikacji integralności danych.
- **Obsługa mieszana:** Paczka ZIP może zawierać zarówno faktury Offline (XML), jak i oczekujące dokumenty Online (JSON).

</div></div>### 2. Nowe Parametry Konfiguracyjne (Cron)

W sekcji `[KSEF_SAFE_MODE]` lub dedykowanych ustawieniach Cron dodano parametry sterujące nową logiką:

<div _ngcontent-ng-c223669173="" class="container" id="bkmrk-parametr-warto%C5%9B%C4%87-dom"><div _ngcontent-ng-c4244271959="" aria-busy="false" aria-live="off" class="markdown markdown-main-panel stronger enable-updated-hr-color" dir="ltr" inline-copy-host=""><div class="horizontal-scroll-wrapper"><div class="table-block-component"><div _ngcontent-ng-c3708458088="" class="table-block has-export-button new-table-style has-scrollbar"><div _ngcontent-ng-c3708458088="" class="table-content not-end-of-paragraph" data-hveid="0" data-ved="0CAAQ3ecQahgKEwiYhufJzYuSAxUAAAAAHQAAAAAQ4wE" decode-data-ved="1" jslog="275421;track:impression,attention" not-end-of-paragraph=""><table data-path-to-node="8" style="width: 99.998117%;"><thead><tr><td style="width: 21.111717%;"><span data-path-to-node="8,0,0,0">Parametr</span></td><td style="width: 20.502045%;"><span data-path-to-node="8,0,1,0">Wartość domyślna</span></td><td style="width: 58.538163%;"><span data-path-to-node="8,0,2,0">Opis</span></td></tr></thead><tbody><tr><td style="width: 21.111717%;"><span data-path-to-node="8,2,0,0">**`time`** </span></td><td style="width: 20.502045%;"><span data-path-to-node="8,2,1,0">1234567:\*1</span></td><td style="width: 58.538163%;"><span data-path-to-node="8,2,2,0">Ustawienie jak często cron ma się wykonać i przesyłać paczki</span></td></tr><tr><td style="width: 21.111717%;"><span data-path-to-node="8,2,0,0">**`<strong>delayed_sending:</strong>`** </span></td><td style="width: 20.502045%;"><span data-path-to-node="8,2,1,0">`0`  
</span></td><td style="width: 58.538163%;"><span data-path-to-node="8,2,2,0">`<liczba minut>` (domyślnie: `0` - wysyłka natychmiastowa; `> 0` - wysyłka z opóźnieniem). Opóźnienie daje czas na uzupełnienie błędnych danych lub diagnozę problemu. Zatwierdzony dokument zostanie wysłany przez crona po zadeklarowanym czasie. Wstępna walidacja jest szczelna, ale w przypadku braku połączenia system będzie ponawiał próbę po zadeklarowanym czasie (np. 5-10 minut).</span></td></tr><tr><td style="width: 21.111717%;"><span data-path-to-node="8,2,0,0">****`email`**** </span></td><td style="width: 20.502045%;"><span data-path-to-node="8,2,1,0"><span data-path-to-node="8,2,0,0">****`pusty`****</span></span></td><td style="width: 58.538163%;"><span data-path-to-node="8,2,2,0">Adres, na który będą wysyłane raporty o niewysłanych dokumentach.</span></td></tr><tr><td style="width: 21.111717%;"><span data-path-to-node="8,2,0,0">**`max_package`**</span></td><td style="width: 20.502045%;"><span data-path-to-node="8,2,1,0">`50`</span></td><td style="width: 58.538163%;"><span data-path-to-node="8,2,2,0">Maksymalna liczba faktur w jednej paczce ZIP.</span></td></tr><tr><td style="width: 21.111717%;"><span data-path-to-node="8,4,0,0">**`try_count`**</span></td><td style="width: 20.502045%;"><span data-path-to-node="8,4,1,0">`2`</span></td><td style="width: 58.538163%;"><span data-path-to-node="8,4,2,0">Liczba prób wysyłki dla dokumentów z błędami merytorycznymi.</span></td></tr></tbody></table>

</div></div></div></div></div></div>### 3. Logika działania Crona

<div _ngcontent-ng-c223669173="" class="container" id="bkmrk-grupowanie%3A-cron-zbi"><div _ngcontent-ng-c4244271959="" aria-busy="false" aria-live="off" class="markdown markdown-main-panel stronger enable-updated-hr-color" dir="ltr" inline-copy-host="">1. **Grupowanie:** Cron zbiera dokumenty oczekujące na wysyłkę.
2. **Paczkowanie:** Jeśli liczba dokumentów przekracza `max_package`, są one dzielone na kilka paczek ZIP.
3. **Weryfikacja:** Po wysłaniu ZIPa, system zamyka sesję i czeka do 30 sekund na przydzielenie numerów KSeF ID.
4. **Błędy:** Dokumenty z błędami merytorycznymi są blokowane po przekroczeniu `try_count`, aby nie wstrzymywać kolejnych paczek. Błędy komunikacyjne (brak internetu) nie zwiększają licznika prób.

---

</div></div>### Scenariusz Przykładowy

<div _ngcontent-ng-c223669173="" class="container" id="bkmrk-stan%3A-oczekuje-230-f"><div _ngcontent-ng-c4244271959="" aria-busy="false" aria-live="off" class="markdown markdown-main-panel stronger enable-updated-hr-color" dir="ltr" inline-copy-host="">- **Stan:** Oczekuje 230 faktur.
- **Działanie:** \* System generuje **4 paczki po 50 faktur** oraz **1 paczkę po 30 faktur**.
    
    
    - Wszystkie paczki są wysyłane w jednej sesji Crona, co zużywa tylko kilka requestów do API zamiast 230.

</div></div>