Aplikacja do zamknięć kasy: codzienne raporty, które sygnalizują luki
Zbuduj aplikację do zamknięć kasy, która śledzi sprzedaż, zwroty i liczenia gotówki, a następnie generuje codzienny raport z jasnymi oznaczeniami rozbieżności.

Problem, który rozwiązuje aplikacja do zamknięć
Zamknięcie to rutyna końca dnia: przekształcenie zmiany w czysty zapis — co sprzedano, co zwrócono, ile powinno być w kasie i ile rzeczywiście jest w szufladzie. W małym sklepie często robi się to na papierze, w arkuszu kalkulacyjnym lub „w głowie”. To działa, dopóki nie nastąpi intensywny dzień, zmiana osób lub pojawi się nowy kasjer.
Niezgodności zdarzają się nawet przy uczciwym personelu, bo handel detaliczny bywa chaotyczny. Klient prosi o zwrot, ale pierwotna płatność była inną metodą. Rabat wpisano jako ręczną zmianę ceny. Ktoś zapomni zanotować wypłatę (np. zakup mleka do kawiarni) lub miesza prywatną drobną gotówkę z kasą. Czasem to po prostu szybkie liczenie, gdy ciągle stoi kolejka.
Aplikacja do zamknięć kasy rozwiązuje to przez uchwycenie tych samych faktów codziennie, w tej samej kolejności — matematyka staje się automatyczna, a wyjątki widoczne. Przynajmniej powinna rejestrować sumy sprzedaży według typu płatności, zwroty i anulowania (wraz z informacją, jak zostały zwrócone), początkową i końcową liczbę gotówki, przepływy gotówki typu wpłaty i wypłaty oraz kto zamknął kasę i kiedy.
Dobry raport dzienny to nie ściana liczb. To krótkie podsumowanie z jasnymi sumami i jedną linią odpowiadającą na pytanie: „Oczekiwana gotówka vs policzona gotówka.” Jeśli jest luka, powinna być widoczna i zawierać wystarczająco szczegółów do szybkiego sprawdzenia.
Kluczowe liczby, które trzeba śledzić
Aplikacja do zamknięć kasy działa tylko wtedy, gdy wszyscy zgadzają się co do kilku „źródeł prawdy”. Utrzymaj zbiór mały, ale każdy element czytelny i trudny do pomylenia.
Zacznij od sum sprzedaży, podzielonych według typu płatności. Chcesz przynajmniej gotówkę i kartę, plus „inne” dla kart podarunkowych, kredytu sklepowego czy portfeli mobilnych, jeśli traktujesz je osobno. Chodzi o to, aby raport POS i suma w zamknięciu zgadzały się bez interpretacji.
Następnie śledź korekty, które zmieniają to, co zmiana powinna wygenerować. Zwroty i anulowania to różne rzeczy (void usuwa sprzedaż; refund cofa ją po fakcie) i oba mogą ukrywać błędy, jeśli są łączone. Rabaty też mają znaczenie, bo zmniejszają wartość sprzedaży bez zmiany liczby transakcji, co może mylić przeglądających.
Po stronie gotówki potrzebujesz prostej historii przepływów: początkowa gotówka (float), wpłaty do sejfu (drops), i wypłaty (payouts). Bez tego kasa może wyglądać na krótką, mimo że wszystko się zgadza.
Najmniejszy zestaw umożliwiający pogodzenie danych:
- Sprzedaż według typu płatności (gotówka, karta, inne)
- Zwroty, anulowania i rabaty (trzymane osobno)
- Początkowa gotówka, wpłaty do sejfu i wypłaty
- Oczekiwana gotówka, policzona gotówka i wariancja
Oczekiwana gotówka to wartość wyliczona:
początkowa gotówka + sprzedaż gotówkowa - zwroty gotówkowe - wypłaty - wpłaty do sejfu
Policzona gotówka to to, co fizycznie znajduje się w szufladzie przy zamknięciu.
Przykład: jeśli oczekiwana gotówka to $412.00, a policzona gotówka to $397.00, wariancja wynosi -$15.00. Dobra aplikacja zapisuje tę różnicę i przechowuje wejściowe dane, żeby menedżer mógł przejrzeć, co się zmieniło, a nie tylko zobaczyć czerwone zero.
Prosty model danych dla sprzedaży, zwrotów i liczeń gotówki
Dobra aplikacja do zamknięć kasy nie potrzebuje skomplikowanej bazy. Potrzebuje kilku jasnych rekordów odpowiadających na jedno pytanie: co powinno być w szufladzie, co jest naprawdę, i kto był odpowiedzialny za zmianę.
Oddziel „gdzie” i „kiedy” od „pieniędzy”. Lokalizacja sklepu może mieć wiele kas. Kasa może mieć wiele zmian. Zmiana jest powiązana z jednym kasjerem (oraz menedżerem, który ją przegląda).
Minimalne tabele
Pierwsza wersja powinna być szczupła. Te rekordy pokrywają większość zamknięć w małych sklepach:
- StoreLocation i Register (nazwa, kod)
- Cashier i Manager (imię, rola)
- Shift (kasa, kasjer, opened_at, closed_at)
- SaleSummary (zmiana, sumy według typu płatności, opcjonalny ref. POS)
- Refund (zmiana, kwota, powód, zatwierdził, notatka zatwierdzenia)
Masz dwie opcje dla danych sprzedaży. Jeśli Twój POS potrafi eksportować sumy, zapisz jeden SaleSummary na zmianę (sprzedaż gotówkowa, kartowa, podatek, rabaty). Jeśli nie, daj ekran do ręcznego wpisania sum z raportu „Z”. W żadnym wypadku nie zaczynaj od poziomu pojedynczych pozycji, chyba że naprawdę tego potrzebujesz.
Dla liczeń gotówki zapisuj wpisy po nominałach, by móc audytować błędy. CashCountEntry może zawierać nominał, ilość i kto liczył. Na przykład „$20 x 12” oraz „$1 x 37”.
Na koniec stwórz rekord Closeout powiązany ze zmianą. Nadaj mu status taki jak Draft (liczenie w toku), Submitted (kasjer zakończył) i Reviewed (menedżer zatwierdził).
Przepływ zamknięcia od końca zmiany do przeglądu menedżera
Zamknięcie działa tylko wtedy, gdy każdy podąża tą samą ścieżką każdego dnia. Cel jest prosty: uchwycić sumy, policzyć gotówkę, pozwolić systemowi zrobić matematykę, a potem przekazać do przeglądu bez ostatnich poprawek.
Praktyczny przepływ dla większości małych sklepów:
- Kasjer wpisuje sumy (lub importuje je) za zmianę: sprzedaż, zwroty, wypłaty, napiwki i inne płatności.
- Kasjer liczy szufladę i zapisuje nominały (albo tylko końcowy wynik dla szybszej wersji).
- Kasjer dodaje notatki do nietypowych sytuacji — spór z klientem, anulowana sprzedaż lub zwrot w gotówce.
- System oblicza oczekiwaną gotówkę i od razu pokazuje wariancję (nadwyżka/niedobór).
- Kasjer wysyła zamknięcie, które blokuje rekord, by nie dało się go cicho zmienić później.
Blokowanie ma znaczenie. Jeśli ktoś może edytować liczby po zmianie, tracisz ślad audytu, a menedżer nie ma nic konkretnego do sprawdzenia. Jeśli potrzeba korekty, traktuj to jako działanie menedżera (z komentarzem), a nie ukrytą edycję.
Po stronie menedżera ekran przeglądu powinien być skupiony: podsumowanie, wariancja i flagi wymagające uwagi. Dobry wzorzec to „przejrzyj, skomentuj, rozwiąż”. Na przykład menedżer widzi, że kasa jest krótsza o $12, czyta notatkę kasjera („dwa zwroty gotówkowe, jeden paragon zaginiony”), a następnie albo oznacza sprawę jako rozwiązana (z powodem), albo żąda dalszych wyjaśnień.
Ekrany do uwzględnienia (trzymaj minimalizm)
Narzędzie do zamknięć zawodzi, gdy próbuje robić wszystko. W małym sklepie potrzebujesz kilku ekranów, które da się szybko wypełnić, nawet gdy jesteś zmęczony po zmianie. Cel: uchwycić fakty, potem jasno pokazać różnicę.
Minimalny zestaw, który pokrywa większość sklepów:
- Podsumowanie zmiany: potwierdź sprzedaże i wpisz podział płatności (gotówka, karta, inne).
- Liczenie gotówki: prowadzone liczenie po nominałach z automatycznym sumowaniem podczas wpisywania, z widokiem oczekiwana vs policzona obok siebie.
- Zwroty i przepływy gotówkowe: szybkie formularze dla zwrotów, wypłat i wpłat, z kodami powodów i opcjonalnymi notatkami.
- Raport dzienny: czysty widok podsumowania zmiany, w tym sumy, wariancję i ewentualne flagi.
- Przegląd menedżera: zatwierdź lub odrzuć, dodaj komentarz i ustaw status „Wymaga dalszych działań”.
Kilka zasad UI, które zapobiegają błędom:
- Domyślnie ustaw datę na dziś i obecną kasę
- Używaj dużych pól na liczby i jasnych etykiet (bez skrótów)
- Pokaż sumy na bieżąco po każdym wpisie
- Wymagaj powodu dla każdej ujemnej lub ręcznej korekty
- Potwierdź przed ostatecznym zamknięciem (ostatni krok przeglądu)
Reguły rozbieżności i automatyczne flagi
Zamknięcie jest użyteczne tylko wtedy, gdy mówi, co wymaga uwagi. Zacznij od jednej formuły oczekiwanej gotówki i spraw, by każda flaga była wytłumaczalna.
Oczekiwana gotówka zwykle wygląda tak:
oczekiwana gotówka = początkowa gotówka + sprzedaż gotówkowa - zwroty gotówkowe - wypłaty - wpłaty do sejfu
Używaj tej samej formuły wszędzie: na ekranie zamknięcia, w raporcie dziennym i w eksportach. Jeśli różne ekrany liczą inaczej, menedżerowie przestają ufać raportowi.
Ustal proste reguły tolerancji, by drobne odchylenia nie generowały zbędnej pracy. Na przykład pozwól na tolerancję zaokrągleń $0.50 lub pozwól menedżerowi ustawić ją per sklep. Wszystko poza tolerancją staje się flagą „short” lub „over” z pokazaniem dokładnej różnicy.
Spraw, by flagi były specyficzne. Typowe flagi:
- Niedobór lub nadwyżka gotówki (poza tolerancją)
- Brakujące dane (brak początkowej gotówki, brak liczenia, brak podziału płatności)
- Nietypowe zwroty (łączna kwota zwrotów powyżej progu lub zbyt dużo zwrotów)
- Wypłaty/wpłaty bez notatki
- Edycje po przesłaniu (zamknięcie ponownie otwarte)
Niektóre problemy powinny blokować wysłanie, a nie tylko ostrzegać. Wymagaj daty zmiany, kasjera, kasy, początkowej gotówki, liczenia gotówki i przynajmniej jednej sumy sprzedaży (nawet 0). Jeśli istnieją zwroty, wypłaty lub wpłaty, wymagaj powodu i czasem zatwierdzenia.
Prowadź ślad audytu. Każda zmiana powinna zapisywać, kto ją wykonał, kiedy i co zmieniono (stara wartość, nowa wartość). Jeśli kwota zwrotu zostanie zaktualizowana po zamknięciu, raport powinien pokazać tę edycję, by menedżer mógł ją szybko przejrzeć.
Krok po kroku: zbuduj pierwszą działającą wersję
Zacznij od małego zakresu. Wybierz jeden sklep i jedną kasę (jedną szufladę) i buduj tylko pod ten setup. Nauczysz się szybciej, a pierwsze testy będą odpowiadać rzeczywistości.
1) Ustaw dostęp prostym sposobem
Stwórz trzy role i utrzymaj uprawnienia ograniczone. Kasjerzy powinni mieć dostęp tylko do swoich zamknięć, menedżerowie mogą przeglądać i zatwierdzać, a administratorzy konfigurować ustawienia.
2) Najpierw tabele i ekrany do wpisu danych
Zanim dodasz logikę, upewnij się, że możesz wprowadzać i oglądać czyste dane. Stwórz tabele dla zmian, sum sprzedaży, zwrotów i liczeń gotówki. Potem zbuduj minimalne ekrany do tworzenia zmiany, wpisania sum i zapisania liczenia.
Solidny pierwszy przebieg:
- Utwórz Shift (data, kasjer, kasa)
- Wprowadź sumy (sprzedaż, zwroty, podział płatności)
- Liczenie gotówki (nominały, suma policzona)
- Wyślij zamknięcie
- Przegląd menedżera
3) Dodaj obliczenia i walidacje
Następnie dodaj formuły i proste reguły. Waliduj wymagane pola i blokuj wartości ujemne tam, gdzie nie mają sensu.
Przykład: jeśli kasjer wpisze $120 zwrotów, ale brak liczenia zwrotów, pokaż błąd i wymagaj notatki.
4) Na końcu zbuduj widok raportu i testuj na realnych liczbach
Stwórz stronę raportu dziennego, która pobiera jedną zmianę i pokazuje oczekiwaną gotówkę, policzoną gotówkę i różnicę. Testuj na rzeczywistych paragonach przez kilka dni, w tym sytuacjach ze zwrotem i drobnym błędem. Dopiero gdy to będzie stabilne, dodawaj dodatkowe funkcje jak wiele kas czy zamknięcia częściowe.
Typowe błędy powodujące złe zamknięcia
Większość problemów z zamknięciami to nie problem matematyczny. To brak fragmentów historii lub sumy pomieszane na wczesnym etapie dnia. Aplikacja powinna utrudniać wpisywanie niejasnych liczb i ułatwiać wyjaśnianie, co się wydarzyło.
Jedna pułapka to łączenie typów płatności w jednej sumie sprzedaży. Jeśli kasjer wpisze jedną „sumę sprzedaży” obejmującą gotówkę i kartę, nie da się później pojedynkować szuflady. Sprzedaż kartowa powinna zgadzać się z raportem procesora płatności, a sprzedaż gotówkowa z zawartością szuflady. Trzymaj je oddzielnie od pierwszego ekranu, którego dotyka kasjer.
Inny problem to edycje po przesłaniu. Jeśli zamknięcie można zmienić bez jasnego zapisu, kto i dlaczego to zrobił, menedżerowie przestają ufać raportowi. Nawet uczciwe poprawki (np. korekta zwrotu) wyglądają podejrzanie bez śladu audytu.
Przepływy gotówki są też łatwe do zapomnienia. Sklepy często robią wpłaty do sejfu w trakcie zmiany, wypłacają drobne wydatki lub korzystają z kasy na drobne koszty. Jeśli te zdarzenia nie są rejestrowane, szuflada będzie wyglądać na krótką mimo prawidłowych operacji. To samo dotyczy początkowej gotówki (float). Jeśli nie zarejestrujesz stanu otwarcia, możesz być „poza” cały dzień i nigdy nie wiedzieć dlaczego.
Zespół potrzebuje też miejsca na wyjaśnienie wariancji. Bez notatek (a czasem zdjęcia paragonu) rozbieżność staje się zgadywanką podczas przeglądu menedżera.
Jak to wygląda w praktyce
Kasjer zaczyna z $150 float, robi $40 wypłaty na materiały, wpłaca $300 do sejfu i wystawia $25 zwrotu gotówkowego. Jeśli aplikacja rejestruje tylko sprzedaż gotówkową i końcowe liczenie, kasa się nie zbilansuje i kasjer nie będzie w stanie pokazać dlaczego.
Zabezpieczenia zapobiegające złym zamknięciom
- Oddzielne pola dla sprzedaży gotówkowej, kartowej i innych
- „Lock close” po przesłaniu, a korekty jako zapisane dostosowania
- Szybkie akcje dla wpłat do sejfu, wypłat i zdarzeń z kasy
- Wymagany float otwarcia przed pierwszą sprzedażą
- Notatki przy każdej wariancji, z opcjonalnymi załącznikami dowodów
Szybka lista kontrolna przed zamknięciem
Użyj tej listy przy kasie przed podpisaniem. Utrzymuje spójność zamknięć przy nowych pracownikach, w napiętych dniach i przy wielu zmianach.
Przed liczeniem upewnij się, że początkowa gotówka jest już zapisana dla tej zmiany. Jeśli została wpisana późno, oczekiwana gotówka będzie błędna niezależnie od tego, jak starannie liczysz.
Następnie przejdź przez pięć punktów kontrolnych:
- Początkowa gotówka jest zapisana i zablokowana przed liczeniem.
- Wpłaty do sejfu i wypłaty odpowiadają rachunkom lub notatkom.
- Zwroty zawsze mają powód i wymagają zatwierdzenia, jeśli przekraczają ustalony próg.
- Oczekiwana gotówka używa jednej uzgodnionej formuły i nie zmienia się w trakcie tygodnia.
- Każda wariancja jest oznaczona, wyjaśniona i przeglądnięta przed końcem dnia.
Jeśli liczba wydaje się nieprawidłowa, zrób szybkie ponowne sprawdzenie przed szukaniem przyczyny. Krótkie ponowne przeliczenie banknotów i monet oraz drugi rzut oka na sumy kopert wpłat łapie większość błędów.
Przykład: jeśli oczekiwana gotówka to $812, a liczenie pokazuje $792, wariancja $20 może być wynikiem zapomnianej wypłaty, podwójnie zalogowanej wpłaty lub zwrotu wypłaconego z szuflady, ale zaksięgowanego jako karta.
Przykład realistycznego zamknięcia z rozbieżnością
Mały sklep ma jedną kasę na zmianę. Na otwarciu kasjer potwierdza, że w szufladzie jest $200 i naciska „Start shift”. Od tego momentu aplikacja traktuje tę kwotę jako punkt wyjścia.
Na koniec dnia sumy z POS i kluczowe zdarzenia gotówkowe wyglądają tak:
- Sprzedaż gotówkowa: $1,150
- Sprzedaż kartowa: $2,400
- Zwrot gotówkowy: $35
- Wpłata do sejfu: $500
Oczekiwana gotówka liczy się jako:
$200 + $1,150 - $35 - $500 = $815
Kasjer liczy szufladę i wpisuje $815. Aplikacja pokazuje wariancję $0, oznacza dzień jako zbilansowany i generuje czysty raport dzienny.
Następnego dnia pojawia się luka. Sklep znów zaczyna z $200. Sprzedaż gotówkowa to $980, jeden zwrot $20 i wpłata do sejfu $300.
Oczekiwana gotówka:
$200 + $980 - $20 - $300 = $860
Kasjer liczy $848. Aplikacja flaguje niedobór $12. Prosty przepływ przeglądu pomaga menedżerowi to wyjaśnić:
- Sprawdź zwroty: czy $20 nie zostało wprowadzone dwa razy lub zrobione na kartę?
- Sprawdź wpłaty: czy nie było drugiej wpłaty niezarejestrowanej?
- Sprawdź wypłaty: czy ktoś nie użył gotówki na zakupy i zapomniał zalogować?
- Ponowne liczenie: poproś drugą osobę o policzenie szuflady.
W tym przypadku menedżer znajduje ręczną notatkę o $12 na materiały. Rejestruje to jako wypłatę, oczekiwana gotówka aktualizuje się do $848 i rozbieżność znika.
Następne kroki: pilotaż, ulepszenia, potem produkcja
Zanim zbudujesz coś większego, zdecyduj, jak liczby będą wchodzić do systemu. Dla wielu małych sklepów ręczne wpisy wystarczają na początek, bo odsłaniają braki w procesie (niezarejestrowane zwroty, niejasne wpłaty, „ktoś wziął monety na resztę”). Jeśli POS potrafi eksportować sumy, import zmniejsza błędy przy wprowadzaniu, ale może też ukryć problemy, jeśli personel przestanie sprawdzać, co faktycznie wydarzyło się w szufladzie.
Przeprowadź krótki pilotaż i traktuj go jako test procesu, nie tylko aplikacji. Tydzień zwykle wykryje większość realnych przypadków brzegowych.
Prosty plan pilotażowy na 1 tydzień
Wybierz jedną kasę i jednego lub dwóch zaufanych zamykających. Trzymaj zakres wąski i zapisuj każdą dziwną sytuację.
- Dzień 1–2: śledź sprzedaż, zwroty i liczenia gotówki.
- Dzień 3–4: dodaj wypłaty, wpłaty do sejfu i napiwki, jeśli ich używasz.
- Dzień 5–7: codziennie przeglądaj rozbieżności i etykietuj każdą (błąd liczenia, brak zwrotu, timing POS itp.).
Między dniami pilotażu wprowadź jedną politykę, która uczyni aplikację użyteczną: kto zatwierdza raport dzienny i kiedy. Przykład: zamykający wysyła do 21:15, menedżer przegląda do 10:00 następnego dnia, a wszystko powyżej $10 wymaga notatki.
Gdy pilotaż przestanie przynosić niespodzianki, zbuduj aplikację do zamknięć na poważnie. Jeśli chcesz iść szybko bez wiązania się z kruchą pierwszą wersją, AppMaster (appmaster.io) jest jedną z opcji: to platforma no-code, która generuje prawdziwy kod źródłowy backendu, web i aplikacji natywnych, dzięki czemu możesz dostosowywać przepływ i model danych w miarę nauki.
Wdrożenie i opcje kontroli
Zacznij mało, potem wybierz sposób działania na dłużej.
Wdróż do chmury zarządzanej, jeśli chcesz najszybszego uruchomienia. Wdróż na własnym AWS/Azure/Google Cloud, jeśli masz już infrastrukturę IT. Albo wyeksportuj kod źródłowy, jeśli potrzebujesz większej kontroli lub rygorystyczniejszych zasad wewnętrznych.
Ulepszaj stopniowo — po jednej zmianie na raz. Cel to nie idealne liczby, a powtarzalne zamknięcie, które wcześnie wychwytuje luki i ułatwia dalsze działania.
FAQ
Aplikacja do zamknięć zmiany przekształca końcowozmianowe podsumowania w spójny zapis i automatycznie oblicza oczekiwaną gotówkę. Pomaga szybko wykryć problemy, pokazując różnicę między tym, co powinno być w kasie, a tym, co rzeczywiście policzono.
Śledź sumy sprzedaży według typu płatności, zwroty i anulowania (oddzielnie), rabaty, gotówkę początkową, wpłaty do sejfu oraz wypłaty. Te dane wystarczą do wyliczenia oczekiwanej gotówki, porównania jej z liczoną kwotą i wyjaśnienia większości sytuacji z nadwyżką lub niedoborem bez przeszukiwania stosu paragonów.
Anulowania (voids) usuwają sprzedaż przed jej finalizacją, a zwroty cofają już zrealizowaną transakcję. Trzymanie ich osobno ułatwia wykrycie problemów z procedurami, szkoleniami lub błędami takim jak zwrot na niewłaściwy typ płatności.
Użyj jednej formuły wszędzie: początkowa gotówka + sprzedaż gotówkowa - zwroty gotówkowe - wypłaty - wpłaty do sejfu. Jeśli formuła różni się między ekranami lub raportami, ludzie przestają ufać liczbom, a zamknięcie staje się przedmiotem sporu, a nie narzędziem.
Wprowadzanie nominałów zmniejsza błędy w liczeniu i ułatwia późniejszy audyt. Jeśli zespół potrzebuje szybkości, można zacząć od jednego pola „liczona gotówka”, ale wpisy na poziomie nominałów zwykle zwracają się od razu po pierwszym powtarzającym się rozbieżności.
Blokada uniemożliwia ciche edycje, które niszczą ścieżkę audytu. Jeśli konieczna jest korekta, powinna być wykonana przez menedżera z adnotacją, aby widzieć, co i dlaczego zostało zmienione, zamiast zgadywać.
Użyj kilku jasnych, wytłumaczalnych reguł: wariancja poza tolerancją, brak wymaganych pól (np. początkowa gotówka lub rozliczenie gotówki), zwroty powyżej progu oraz przepływy gotówkowe bez notatki. Najlepsze flagi wskazują konkretny następny krok, a nie tylko „coś jest nie tak”.
Zacznij od Store/Location, Register, Shift, Cashier i rekordu Closeout ze statusami Draft, Submitted i Reviewed. Dodaj SaleSummary na zmianę (sumy według typów płatności) oraz proste rekordy dla zwrotów i przepływów gotówkowych, żeby pogodzić dane bez komplikowania się szczegółami pozycji.
Mieszanie typów płatności w jednym polu sumy sprzedaży, zapominanie o rejestrowaniu wypłat lub wpłat do sejfu, pomijanie początkowej gotówki oraz pozwalanie na edycje po zatwierdzeniu. Brak notatek do wyjątków również powoduje, że przegląd menedżera staje się zgadywanką.
Jeśli chcesz szybko iterować, platforma no-code taka jak AppMaster może pomóc zbudować bazę danych, ekrany, przepływ i obliczenia bez zaczynania od zera. Generuje też prawdziwy kod źródłowy, co jest przydatne gdy proces się zmienia i trzeba dostosować aplikację bez narastającego bałaganu technicznego.


