Baza wiedzy Trawers ERP

KSeF FKZ. Obliczenia

1. Opis ogólny 2. Zadania automatu, który oblicza rabat 3. Wykorzystanie obliczeń w fakturze [FKZ] 4. Uwagi, warunki i zastrzeżenia 5. Model danych 6. Rekomendacja wdrożeniowa 7. Tematy powiązane

1. Opis ogólny

Jak połączyć (jeśli można, to zautomatyzować) metody obliczania rabatu z mechanizmem wystawiania faktur korygujących zbiorczych. Można to połączyć, ale najlepiej rozdzielić proces na dwa poziomy: 1. mechanizm naliczenia rabatu okresowego, czyli 'ile rabatu należy się kontrahentowi za półrocze'; 2. mechanizm wystawienia faktury korygującej zbiorczej FKZ, czyli 'jak tę kwotę poprawnie przenieść na dokument korekty'. Z opisu wynika, że w Trawersie faktura korygująca zbiorcza służy właśnie do ujęcia opustu, obniżki lub rabatu za wskazany okres, zawiera okres korekty, listę faktur korygowanych oraz pozycję `[U] Rabat od całej faktury`. Proponowany model automatyzacji Najbezpieczniejszy schemat wygląda tak: ``` Sprzedaż z okresu | v Raport / naliczenie rabatu okresowego | v Propozycja korekty zbiorczej | v Weryfikacja użytkownika | v FKZ w NA > Faktury korygujące | v Pozycja [U] Rabat od całej faktury | v Dekretacja + KSeF ``` Czyli nie zaczynałbym od samego wystawiania faktury korygującej. Najpierw trzeba zbudować 'warstwę naliczeniową', która policzy rabat, a dopiero potem poda wynik do mechanizmu FKZ.

2. Zadania automatu, który oblicza rabat

Dla każdego kontrahenta i okresu, np. półrocza, automat powinien: 1. Wybrać faktury kwalifikowane Na wejściu: * odbiorca, * okres od-do, * waluta, * typy dokumentów, * faktury zatwierdzone, * faktury nieanulowane, * ewentualnie tylko wybrane grupy towarów. W opisie Trawersa jest warunek, że do wystawienia FKZ wszystkie faktury kontrahenta z danego okresu muszą być zatwierdzone [v], a faktury są w PLN . Czyli automat powinien najpierw zrobić kontrolę: ``` Czy wszystkie faktury z okresu są zatwierdzone? Czy są w PLN? Czy dotyczą jednego kontrahenta? Czy nie były już objęte wcześniejszą korektą rabatową? ``` 2. Ustalić podstawę rabatu W zależności od wybranej metody: ``` Podstawa = suma sprzedaży netto/brutto z faktur kwalifikowanych ``` albo: ``` Podstawa = suma sprzedaży tylko z wybranych grup asortymentowych ``` albo: ``` Podstawa = ilość sprzedana wybranych indeksów ``` Tutaj ważna uwaga: w opisie [FKZ] jest zapis, że kwota rabatu w pozycji `[U]` liczona jest od wartości brutto sprzedaży, a program rozbija ją na netto i PTU/VAT . Dlatego automat powinien jasno wiedzieć, czy rabat handlowy jest zdefiniowany od: * netto, * brutto, * ilości, * marży, * wzrostu obrotu, * wybranej grupy towarowej. Potem wynik trzeba przeliczyć do formatu akceptowanego przez FKZ. 3. Obliczyć rabat według tabeli Przykład tabeli: | Kontrahent / grupa | Okres | Od obrotu | Do obrotu | Rabat | | ------------------ | -------- | --------: | --------: | ----: | | HURT | półrocze | 100 000 | 250 000 | 2% | | HURT | półrocze | 250 000 | 500 000 | 4% | | HURT | półrocze | 500 000 | > | 6% | Dla prostego rabatu: ``` Kwota rabatu = obrót kwalifikowany × procent rabatu ``` Dla rabatu marginalnego (schodkowego): ``` Kwota rabatu = część obrotu w progu 1 × % + część obrotu w progu 2 × % + część obrotu w progu 3 × % ``` Dla rabatu od wzrostu: ``` Kwota rabatu = max(sprzedaż bieżąca - sprzedaż bazowa, 0) × % ``` 4. Rozbić rabat według stawek VAT To jest kluczowe dla FKZ. Trawers przy FKZ pokazuje wartości oznaczonych faktur w poszczególnych stawkach PTU/VAT, a przy rejestracji pozycji `[U] Rabat` po wybraniu stawki PTU - podpowiada sumy sprzedaży i podatku . Dlatego automat powinien policzyć rabat osobno dla każdej stawki VAT. Przykład: | Stawka VAT | Sprzedaż netto | VAT | Brutto | Udział brutto | | ---------: | -------------: | -----: | ------: | ------------: | | 23% | 100 000 | 23 000 | 123 000 | 96,85% | | 8% | 3 000 | 240 | 3 240 | 2,55% | | 0% | 750 | 0 | 750 | 0,60% | Jeżeli rabat brutto wynosi 10 000, automat rozdziela: ``` 23%: 10 000 × 96,85% = 9 685 8%: 10 000 × 2,55% = 255 0%: 10 000 × 0,60% = 60 ``` Potem dla każdej stawki wylicza: ``` Netto rabatu = Brutto rabatu / (1 + stawka VAT) VAT rabatu = Brutto rabatu - Netto rabatu ``` Dla 23%: ``` Netto = 9 685 / 1,23 = 7 873,98 VAT = 1 811,02 ``` To pozwala przygotować dane dokładnie pod pozycję `[U]`.

3. Wykorzystanie obliczeń w fakturze korygującej zbiorczej [FKZ]

Wariant 1 - półautomatyczny, najłatwiejszy do wdrożenia Automat robi tylko naliczenie i drukuje/eksportuje 'propozycję FKZ'. Raport zawiera: | Pole | Wartość | | ---------------------- | -------------------- | | Odbiorca | 000001 | | Okres | 2026/01-2026/06 | | Obrót kwalifikowany | 350 000 | | Metoda rabatu | schodkowy all-units | | Rabat | 5% | | Kwota rabatu brutto | 21 525 | | Kwota netto | 17 500 | | VAT | 4 025 | | Faktury do zaznaczenia | lista faktur | | Stawki VAT | rozbicie 23%, 8%, 0% | Operator następnie wchodzi: ``` NA > Sprzedaż > Faktury korygujące ``` wybiera korektę zbiorczą [FKZ], wskazuje okres, oznacza faktury F10, a następnie wpisuje pozycję: ``` [U] Rabat od całej faktury ``` Ten wariant jest bezpieczny, bo nie ingeruje w mechanizm wystawiania FKZ. Automatyzuje obliczenia, ale sam dokument nadal wystawia użytkownik. To jest wariant, który rekomendowałbym jako pierwszy etap. Wariant 2 - automatyczne przygotowanie 'paczek korekt' Tu automat tworzy listę korekt do wystawienia: ``` Kontrahent | Okres | Faktury | Stawki VAT | Kwota rabatu | Metoda ``` Na przykład: | Odbiorca | Okres | Rabat | 23% brutto | 8% brutto | Status | | -------- | --------------- | ----: | ---------: | --------: | ---------- | | 000001 | 2026/01-2026/06 | 5% | 9 685 | 255 | gotowe | | 000018 | 2026/01-2026/06 | 3% | 4 920 | 0 | gotowe | | 000025 | 2026/01-2026/06 | 0% | 0 | 0 | brak progu | Użytkownik wybiera pozycję z listy, a program prowadzi go przez FKZ z gotowymi wartościami. To nadal może wymagać potwierdzenia przez operatora, ale ogranicza ręczne liczenie. Wariant 3 - pełna automatyzacja FKZ Pełna automatyzacja oznaczałaby, że program sam: 1. wybiera kontrahentów, 2. liczy podstawę, 3. wyznacza rabat, 4. znajduje faktury, 5. tworzy FKZ, 6. dodaje pozycję `[U]`, 7. zapisuje dokument, 8. przygotowuje dekretację, 9. przekazuje do KSeF. To jest możliwe koncepcyjnie, ale wymagałoby funkcji programowej/generatora po stronie Trawersa. Z samego opisu wynika, że standardowy proces jest interaktywny: operator wybiera korektę zbiorczą, wskazuje okres, oznacza faktury F10 i po Esc rejestruje pozycję `[U] Rabat`. Czyli pełny automat powinien być traktowany jako rozszerzenie projektowo-programowe, a nie tylko konfiguracja tabeli rabatowej.

4. Uwagi, warunki i zastrzeżenia

Bardzo ważne rozróżnienie: Rabat od całości czy od części asortymentu To decyduje, czy mechanizm FKZ `[U]` wystarczy. Przypadek A - rabat od całej sprzedaży kontrahenta Przykład: > Klient dostaje 5% rabatu od całego obrotu półrocznego. To pasuje idealnie do `[U] Rabat od całej faktury`. Wtedy wystarczy: ``` okres + lista faktur + procent/kwota rabatu ``` Przypadek B - rabat tylko od wybranych grup lub indeksów Przykład: > Klient dostaje 4% rabatu, ale tylko od grupy 'AGD Premium'. Tu trzeba uważać. Jeżeli faktury zawierają jednocześnie towary objęte i nieobjęte rabatem, to pozycja `[U] Rabat od całej faktury` może być zbyt szeroka, bo logicznie dotyczy całej faktury. W opisie jest też zastrzeżenie KSeF: jeżeli zbiorcza faktura korygująca dotyczy tylko części dostaw towarów lub usług dla jednego odbiorcy w okresie, powinna dodatkowo zawierać nazwę/rodzaj towaru lub usługi w polu P_7, a przy korekcie części faktury sekcja <FaWiersz> powinna zawierać nazwę towarów/usług i ilość sprzedaną w P_8B . Dlatego przy rabatach asortymentowych są trzy bezpieczne rozwiązania: 1. ograniczyć FKZ tylko do faktur, które w całości dotyczą rabatowanego asortymentu, 2. wystawiać osobne korekty dla grup asortymentowych, jeżeli program obsługuje wymagane dane w KSeF, 3. pozostać przy rabacie od całej sprzedaży, a warunki asortymentowe traktować tylko jako warunek uzyskania rabatu, nie jako podstawę korekty pozycyjnej. Najprostszy wariant biznesowo: ``` Jeżeli klient kupił minimum 50 000 PLN grupy X, to dostaje 2% rabatu od całego obrotu. ``` Wtedy warunek jest asortymentowy, ale korekta nadal dotyczy całej sprzedaży.

5. Model danych i przykład przebiegu obliczeń

Model danych W praktyce potrzebne byłyby 4 tabele/obszary. 1. Definicja programu rabatowego ``` Program: RABAT_POLROCZE_HURT Okres: półrocze Typ: rabat od obrotu Podstawa: sprzedaż brutto / netto Waluta: PLN Zakres: wszyscy odbiorcy z grupy HURT Sposób liczenia: all-units / marginalny / kwotowy Czy tworzyć FKZ: Tak ``` 2. Progi rabatowe ``` Od obrotu Do obrotu Rabat 100 000 249 999,99 2% 250 000 499 999,99 4% 500 000 bez limitu 6% ``` NOTE: Patrz Obliczenia upustów natychmiastowych - w chwili wystawiania faktur sprzedaży. Tam także tabele upustów + progi rabatowe (upustowe). Obroty podawać dla okresu rabatowego, np. kwartału lub roku. 3. Wyłączenia ``` Nie uwzględniać: - faktur anulowanych, - korekt, - usług transportowych, - indeksów promocyjnych, - sprzedaży z marżą poniżej X, - wybranych grup towarowych. ``` 4. Wyniki naliczenia ``` Odbiorca Okres Lista faktur Obrót netto Obrót brutto Stawki VAT Metoda Procent rabatu Kwota rabatu netto Kwota rabatu VAT Kwota rabatu brutto Status: naliczone / zatwierdzone / FKZ wystawiona Numer FKZ ``` Przykład przebiegu obliczeń Załóżmy: ``` Odbiorca: 000001 Okres: 2026/01-2026/06 Sprzedaż brutto: 430 500 Sprzedaż netto: 350 000 VAT: 80 500 Metoda: rabat od obrotu półrocznego Próg: powyżej 300 000 netto = 5% ``` Jeżeli umowa mówi, że rabat jest liczony od netto: ``` Rabat netto = 350 000 × 5% = 17 500 VAT 23% = 4 025 Rabat brutto = 21 525 ``` Do FKZ trzeba przygotować: ``` Okres: 2026/01 do 2026/06 Faktury: wszystkie zakwalifikowane faktury odbiorcy Pozycja: [U] Rabat od całej faktury Stawka PTU: 23% Rabat: 5% Kwota brutto rabatu: -21 525 Netto-rabat: -17 500 PTU-rabat: -4 025 ``` Dekretacja powinna pójść zgodnie z mechanizmem opisanym w FKZ: ``` Netto-rabat -> Korekta sprzedaży PTU-rabat -> Korekta PTU/VAT ```

6. Rekomendacja wdrożeniowa

Najrozsądniej zrobić to etapami. Etap 1 - raport naliczenia rabatów Na początek automat nie wystawia FKZ. Tylko liczy: ``` kontrahent -> okres -> faktury -> podstawa -> procent -> kwota -> rozbicie VAT ``` Na końcu daje operatorowi gotowe dane do wpisania w FKZ. To zmniejsza ryzyko błędów i pozwala sprawdzić zgodność z księgowością. Etap 2 - propozycje FKZ Program tworzy 'propozycje korekt zbiorczych' z listą faktur i kwotami. Operator tylko zatwierdza. Etap 3 - generator FKZ Dopiero po sprawdzeniu procesu warto automatycznie tworzyć dokument FKZ. Najważniejsza zasada projektowa Mechanizm rabatowy powinien kończyć się wynikiem w takim formacie: ``` Kontrahent Okres od-do Lista faktur korygowanych Stawka VAT Podstawa brutto/netto Procent rabatu albo kwota rabatu Kwota netto rabatu Kwota VAT rabatu Kwota brutto rabatu Opis przyczyny korekty ``` A mechanizm FKZ powinien tylko ten wynik zastosować. Czyli: ``` Tabela rabatowa nie powinna bezpośrednio wystawiać faktury. Tabela rabatowa powinna wygenerować propozycję korekty. Dopiero zatwierdzona propozycja powinna tworzyć FKZ. ``` To daje kontrolę, audytowalność i możliwość wyjaśnienia każdej korekty klientowi oraz księgowości. NOTE: Obliczenia w Trawersie do ew. wykorzystania * Obliczenia upustu bieżącego - przy wystawianiu faktur sprzedaży * Dane roczne. Sumy transakcji * Obliczanie prowizji handlowcom * UStalanie % upustu odbiorcom (wg obrotów) * raporty i analizy sprzedaży ... NOTE: Patrz Obliczenia upustów natychmiastowych - w chwili wystawiania faktur sprzedaży. Tam także tabele upustów + progi rabatowe (upustowe). Tu: Obroty podawać dla okresu rabatowego, np. kwartału lub roku.

7. Tematy powiązane

KSeF FKZ. Faktury koryg zbiorcze KSeF FKZ. Modele rabatowe Kartoteka rozrachunków RefNo Numery referencyjne Dokumenty sprzedaży w NA Upusty od cen sprzedaży i zakupu Słowa kluczowe #Sprzedaż-Dokumenty #PTU/VAT-KSeF