Raporty Finansowe i Grupowanie Transakcji (Financial Reports & Transaction Grouping)
1. Instrukcja Użytkownika (User Manual)
Cel i Wartość Biznesowa
Zakładka Finanse (dostępna dla administratorów i pracowników biura) służy do śledzenia przychodów, podsumowań metod płatności oraz rozliczeń w sklepie i na zajęciach.
Wcześniej każda opłacona lekcja lub rezerwacja (np. 4 zajęcia w szkółce) była traktowana i liczona jako osobna transakcja finansowa, co fałszowało rzeczywistą liczbę operacji płatniczych i utrudniało uzgadnianie stanów kasowych. Obecnie system grupuje powiązane płatności w jedną transakcję finansową zgodnie z zasada: Jedna płatność = Jedna transakcja.
Główne Funkcje i Zachowanie
-
Płatności skonsolidowane:
- Jeśli klient płaci za pakiet zajęć (np. cały miesiąc akademii składający się z 4 zajęć) w ramach jednej transakcji online, jednego paragonu kasowego lub jednej faktury, system wyświetli w tabeli jeden wiersz podsumowujący tę płatność.
- W kolumnie opisowej pojawi się skonsolidowany opis (np.
Zajęcia: Szkoła (x4)). - Liczba wierszy i całkowity licznik transakcji odzwierciedlają teraz faktyczną liczbę płatności, a nie pojedynczych lekcji.
-
Podsumowanie Finansowe:
- Karty podsumowań (Łączny przychód, Gotówka, Karta, Online, Portfel) są wyliczane na podstawie pogrupowanych transakcji.
- Kwoty przychodów są sumowane poprawnie, a liczniki transakcji dla poszczególnych metod płatności (Cash, Card, Online, Wallet) pokazują rzeczywistą liczbę wykonanych operacji płatniczych.
-
Płatności Mieszane (Cash + Card):
- W przypadku transakcji oznaczonych jako płatność mieszana (
mixed), kwoty gotówki i karty są poprawnie agregowane. Filtrowanie po "Gotówce" lub "Karcie" uwzględnia odpowiednie proporcje danej płatności mieszanej.
- W przypadku transakcji oznaczonych jako płatność mieszana (
2. Dokumentacja Techniczna (Technical Documentation)
Architektura i Algorytm Grupowania
Dane o płatnościach są pobierane z tabeli payment. W celu unifikacji wierszy w jedną transakcję bez utraty danych pobocznych (np. informacji o zniżkach, portfelu), grupowanie odbywa się w pamięci (in-memory) przy użyciu funkcji pomocniczej groupAndMergePayments w pliku finances.ts.
Klucze Grupowania (Grouping Keys)
Rekordy płatności są przypisywane do grup na podstawie następujących kryteriów (w kolejności priorytetu):
- Online (Session ID): Płatności posiadające ten sam niepusty
session_id. - Kasa fiskalna (Receipt ID): Płatności posiadające ten sam niepusty
receipt_id. - Fakturownia (Invoice ID): Płatności posiadające ten sam niepusty
invoice_id. - Płatności bezpośrednie w klubie: Płatności posiadające ten sam znacznik czasu
paid_at, metodę płatności oraz status (dotyczy np. zbiorczego rozliczenia gotówką/kartą na recepcji). - Pozostałe: Każda inna płatność oczekująca lub niemająca powyższych identyfikatorów jest traktowana jako osobna transakcja.
Agregacja Wierszy (Row Merging)
Gdy kilka płatności zostaje zakwalifikowanych do jednej grupy, ich pola są łączone:
- Kwota (
amount): Suma kwot wszystkich płatności w grupie. - Nazwisko gracza (
playerName): Połączona lista unikalnych graczy (oddzielona przecinkami). - Typ aktywności (
activityType): Połączona lista unikalnych typów aktywności. - Opis (
description): Skrócony opis w formacie[Opis bazowy] (x[liczba płatności])jeśli opisy są identyczne, lub lista opisów połączona przecinkami. - Karty benefitowe (
benefitCardTypes): Zsumowane liczniki i kwoty dla poszczególnych rodzajów kart (Multisport, Medicover itp.). - Płatności Mieszane (
mixedPaymentCashAmount,mixedPaymentCardAmount): Zsumowane części gotówkowe oraz kartowe.
Implementacja API i Akcji Serwerowych
-
getFinancialTransactions:- Pobiera wszystkie płatności pasujące do filtrów (bez limitu bazy danych).
- Grupuje i łączy płatności przy użyciu
groupAndMergePayments. - Pobiera transakcje ze sklepu (
Sale), konwertuje je i dołącza do listy. - Sortuje całą listę transakcji malejąco po dacie.
- Stosuje paginację (in-memory slicing) na podstawie parametrów
limitioffset.
-
getFinancialSummary:- Pobiera pełną listę pogrupowanych transakcji (wywołując
getFinancialTransactionsz dużym limitem). - Iteruje po transakcjach w celu obliczenia statystyk i sumowania przychodów na kartach podsumowań.
- Uwzględnia podział metod płatności, w tym dokładne sumowanie części gotówkowych/kartowych dla transakcji mieszanych.
- Pobiera pełną listę pogrupowanych transakcji (wywołując