Wystawianie Faktur i Paragony
Przewodnik wyjaśniający, jak system zarządza preferencjami klientów dotyczącymi fakturowania oraz jak pomaga pracownikom na recepcji podczas rozliczania opłat za zajęcia.
👤 Instrukcja dla pracownika (Recepcja / Administracja)
System AcePark automatyzuje zarządzanie preferencjami klientów w zakresie dokumentów sprzedażowych (faktury VAT, faktury imienne, paragony fiskalne), ułatwiając i standaryzując proces rozliczania opłat na recepcji.
1. Deklaracja preferencji fakturowania przez klienta
Każdy klient podczas logowania do panelu (lub w procesie rejestracji) ma możliwość trwałego zdefiniowania preferowanego dokumentu księgowego.
Ścieżka dla klienta: Portal Klienta ➔ Profil ➔ Dane do faktury
- Faktura VAT (B2B): Użytkownik wprowadza NIP oraz nazwę przedsiębiorstwa.
- Faktura Imienna (B2C): Użytkownik wprowadza dane osoby fizycznej.
- Zastosuj dla wszystkich uczestników: Opcja ta jest wykorzystywana w przypadku kont rodzinnych. Pozwala na automatyczne powielenie danych fakturowych (np. jednego NIP-u) na wszystkie konta podopiecznych (dzieci). Należy pamiętać, że administrator z poziomu panelu pracowniczego również posiada uprawnienia do globalnego ujednolicenia tych danych.
2. Rozliczanie klienta i obsługa paragonów
Podczas przyjmowania płatności stacjonarnej, uruchomienie formularza "Rozliczenie rezerwacji" wyzwala zautomatyzowane procedury weryfikacyjne:
Ścieżka dla pracownika: Dashboard ➔ Kalendarz (lub Uczestnicy) ➔ Rozliczenie rezerwacji ➔ Odznacz/zaznacz "Drukuj paragon"
- Weryfikacja preferencji: Interfejs wyświetla wyraźny, kolorowy komunikat ostrzegawczy (np. "Uwaga, klient wymaga faktury na firmę: ABC Sp. z o.o., NIP 123..."), jeśli profil klienta posiada aktywne dane fakturowe.
- Zabezpieczenie przed błędem fiskalnym: Jeżeli klient zadeklarował chęć otrzymania faktury VAT na firmę, system automatycznie odznacza opcję wydruku paragonu na zintegrowanej kasie fiskalnej. Blokada ta zabezpiecza przed nieintencjonalnym zarejestrowaniem sprzedaży detalicznej (bez wpisanego NIP-u nabywcy) dla transakcji typu B2B.
- Funkcjonalność ta eliminuje konieczność manualnej weryfikacji profilu każdego klienta przed dokonaniem transakcji stacjonarnej.
3. Faktury za półkolonie
Rejestracja na turnusy (np. półkolonie) jest w pełni zautomatyzowana pod kątem księgowym. Jeżeli klient w przeszłości zdefiniował profil fakturowy, podczas kolejnych zapisów system domyślnie użyje zachowanych danych przedsiębiorstwa.
Wycofanie preferencji fakturowych
W przypadku rezygnacji klienta z otrzymywania faktur B2B, modyfikacja wymaga edycji jego profilu. Należy usunąć zaznaczenie z opcji faktur, upewnić się, że funkcja "Zastosuj dla wszystkich uczestników" jest aktywna, a następnie zapisać zmiany. Od tego momentu system zaprzestanie wymuszania faktur dla danego konta rodzinnego.
🛠️ Dokumentacja techniczna
Sekcja opisująca relacyjne aspekty oraz Server Actions w procesie Fakturowania.
Architektura danych bazy
Dane fakturowe są zapisywane w dedykowanej tabeli invoice. Relacja zachodzi z tabelą player (player_id jest kluczem obcym). Dzięki polu owner_email system jest w stanie grupować "podopiecznych" (np. kilkoro dzieci jednego użytkownika Auth0).
Model invoice przechowuje flagi:
classic_invoice(BOOLEAN) – Czy wystawiana jest pełna faktura VAT na firmę (wymaga NIP i company name).nominal_invoice(BOOLEAN) – Czy wystawiana jest faktura imienna.
Kluczowe Funkcje w API
Znajdują się głównie w Server Actions:
fetchUserInvoiceData: Ciągnie dane logiki i sprawdza, czy wszyscy uczestnicy podpięci pod ten sam e-mail mają dokładnie ten sam stan rekordu invoice (wylicza z tego dynamicznie flagęisAppliedToAllna potrzeby UI).fetchPlayerInvoiceDataInternal: Podstawowa funkcja odczytująca dane invoice używana przez obsługę bez weryfikacji JWT tokenu sesji właściciela (odczyt na uprawnieniach STAFF).upsertInvoicesForUserClient: Zbiorcza operacja dla klienta modyfikująca ustawienia invoice dla wieluplayer_idw jednej transakcji bazy danych.applyInvoiceDataToAllPlayersByPlayerId: Odpowiednik dla Managera, umożliwiający wzięcieplayer_iddziecka #1 i nadpisanie jego firmowego NIPu na profil dziecka #2 tego samego opiekuna.
Logika synchronizacji interfejsu (Dialogi płatności)
Gdy pracownik otwiera okienko ReservationSettleDialog (lub zmiania cel w selekcie activePlayerId), w tle uruchamiana jest operacja pobrania danych profilu fakturowego:
- Component dispatchuje
fetchPlayerInvoiceDataInternal. - Jeżeli API zwróci, że
classic_invoice === true(oraz nominal_invoice jest false, co wskazuje stricte B2B), stan systemowy zmienia domyślną konfigurację: mutacja wymusza ustawienie checkboxaprintReceiptnafalse. - To zapobiega nieintencjonalnemu wywołaniu żądania do zintegrowanego systemu kasy fiskalnej, chroniąc obiekt przed potrzebą pisania fizycznych zwrotów do raportu dobowego kasy.