Propozycja B z trzech . 19.08.2026 . dla Franka

Klient jest wejściem do swoich obiektów

Ekran Klienci przestaje być rejestrem do odłożenia i staje się miejscem, od którego zaczynasz dzień. Wchodzisz w Benefit System i masz pod nim wszystkie jego siłownie, ludzi i otwarte zlecenia. Zakładka Obiekty zostaje jako widok "wszystko".

Werdykt: to jest dosłownie ten obraz, o który poprosiłeś 17.08 o 22:35, czyli Benefit System, a pod nim Fabryka Formy Malta, Arena, Grunwaldzka. Różnica jest jedna: budujemy go na rejestrze klientów, który już istnieje w aplikacji, a nie na drzewie obiektów. Cena tej propozycji: skoro Klienci staje się ekranem pierwszej potrzeby, licznik obiektów musi być wiarygodny, a dziś nie jest.

Dla kogo

Dla firmy usługowej, która pracuje klientami: 2FSG, gdzie Benefit System, Lidl i Kaufland to trzy osobne światy z osobnymi ludźmi i osobnymi rozliczeniami. Im więcej klientów, tym mocniej ta propozycja działa.

Co się zmienia

Karta klienta zamienia się z formularza w miejsce pracy: liczniki, lista obiektów, przycisk Dodaj obiekt, przedstawiciele. Lista klientów pokazuje pod każdym klientem pierwsze trzy obiekty. Zakładka Obiekty zostaje bez zmian w roli, ale z nazwą klienta na karcie.

Ile kosztuje

Więcej niż propozycja A i mniej niż C. Trzy warstwy: sam widok (tani, bo listy i karty już są), licznik obiektów liczony na serwerze (nowa funkcja w bazie, konieczna), oraz osobna fala na przepięcie obiektów spod korzeni-kategorii. Szczegóły w sekcji Co to kosztuje.

Bez owijania: jedna pozycja kosztowa, której nie da się pominąć

Defekt Licznik obiektów klienta liczy się dziś w przeglądarce, z zakresu zalogowanego człowieka. Funkcja getEndClientObjectClosure (lib/utils.ts:258-279) chodzi po liście, którą pobrał useMyObjects dla tej jednej osoby, a wołana jest w components/endclients/EndClientListScreen.tsx:75. Nie istnieje żadna funkcja SQL ani RPC, która liczyłaby to na serwerze: get_end_client_object_closure to zero trafień w całym repozytorium (audyt sekcja 9.3 i sekcja 11).

Skutek praktyczny: Ty i Twój menedżer możecie tego samego dnia otworzyć Benefit System i zobaczyć dwie różne liczby obiektów. Nikt nie kłamie, po prostu każdy widzi swój zakres.

Dopóki Klienci jest rejestrem, do którego zaglądasz raz w miesiącu, to drobiazg. W tej propozycji Klienci jest ekranem pierwszej potrzeby, więc to przestaje być drobiazg i staje się pozycją w wycenie. Propozycja B bez wiarygodnego licznika jest propozycją B z zepsutym pierwszym ekranem. Nie da się tego pominąć i nie da się tego zrobić za darmo.

Różnica, od której wszystko zależy: rodzic w drzewie kontra wpis w rejestrze

To jedno rozróżnienie tłumaczy, dlaczego Twój pomysł z 22:35 jest dobry, a mimo to nie robimy go przez drzewo.

Klient jako rodzic w drzewie

Drzewo mówi o tym, co gdzie fizycznie stoi. Budynek zawiera piętro, piętro zawiera strefę cardio. Jeśli wpiszesz "Benefit System" jako obiekt nadrzędny, aplikacja rozumie to dosłownie: powstaje miejsce o nazwie Benefit System, do którego można wysłać pracownika, powiesić w nim punkt NFC, wystawić na nie zlecenie i policzyć na nim godziny.

Benefit System nie jest miejscem. Nikt tam nie przyjdzie posprzątać. Dostajesz więc puste piętro w środku każdego raportu i każdej listy, a jak zmienisz umowę, musisz przeprowadzać budynki między piętrami. Aplikacja tego dziś nie umie, o czym niżej.

Klient jako wpis w rejestrze

Rejestr to lista firm, dla których pracujesz. Obiekt dostaje naklejkę z nazwą klienta. Naklejka nie tworzy miejsca, nie ma adresu do posprzątania i nie wchodzi do drzewa. Naklejkę można zdjąć i przykleić inną w pięć sekund, bez ruszania czegokolwiek w strukturze.

Naklejka zjeżdża sama w dół gałęzi: jak oznaczysz Fabrykę Formy Malta, to strefa cardio i szatnie należą do Benefit System bez dotykania ich z osobna. Robi to funkcja object_effective_end_client_id (migracja 20260807210000).

To Twoja własna decyzja z 06.08: "Klient to nie jest obiekt. Klient to jest dla mnie numerek."

Innymi słowy: propozycja B daje Ci obraz z 22:35 co do joty, tylko klient jest naklejką, a nie piętrem. Na ekranie wygląda to identycznie. W danych to dwa różne światy, a tylko jeden z nich da się dziś bezpiecznie zmieniać.


01Co powiedziałeś

Sześć zdań z nagrań. Każde z datą, godziną i jednym zdaniem o tym, co z niego wynika dla tej propozycji.

17.08, 22:32 . d17_v223213

"Zastanawiam sie, czy to ja zle mysle, czy zle ulozylem drzewko. Wchodze dodaj obiekt, dodam obiekt, i ten obiekt mi wchodzi w to drzewko, ktorego nie chcialem. Wchodzi mi to w glowny, a chcialem to przypisac do terenow zewnetrznych."

Wynika z tego defekt D3: nowy obiekt ląduje na liście głównej, a interfejs nigdzie tego nie mówi przed zapisem. To nie jest Twój błąd, to brak jednego zdania na ekranie.
17.08, 22:33 . d17_v223336

"Pod obiektami powinno byc napisane nazwa obiektu, adres, miasto, i ta lista bylaby taka mega dluga i nie byloby zadnego drzewka."

To już jest w aplikacji: karta obiektu pokazuje nazwę, adres i miasto (objects.tsx:102-106). Brakuje tylko nazwy klienta, bo dziś w tym miejscu wyświetla się nazwa Twojej własnej firmy.
17.08, 22:35 . d17_p223547 . pozycja kluczowa

"Chyba ze mozna to zrobic w ten sposob, ze jako obiekt nadrzedny wpisywac klienta. Mamy klienta utworzonego, Benefit System albo Lidl, i wtedy robic nie tak jak ja zrobilem, ze utrzymanie terenow zewnetrznych, tylko jako obiekt nadrzedny robimy Lidl."

Ta propozycja daje dokładnie ten obraz. Jedyna zmiana wobec Twoich słów: Benefit System nie jest obiektem nadrzędnym, tylko wpisem w rejestrze klientów, który już istnieje od 06.08.
17.08, 22:48 . d17_p224842 . sam nazywasz przyczynę

"Patrze sobie od dwoch stron. Czy to wezmie zarzadca, czy wezmie ta firma uslugowa. I to jest najwiekszy blad w tej sytuacji."

Dlatego w tej propozycji ekran sam wybiera stronę: jeśli rejestr klientów jest pusty, sekcje i kafelek Klienci znikają, a zostaje zwykła płaska lista obiektów. Nie musisz nic przełączać.
17.08, 22:50 . d17_p225036 . Twój własny wniosek

"Mysle, ze ja to zagmatwalem, bo lepiej jest to zrobic jako kazdy obiekt po prostu. Czyli wpisujesz obiekty i pozniej mozesz je sobie filtrowac. Filip moze miec piecset za chwile."

Zgadza się i to zostaje: obiekty są płaskie, a klient jest cechą do filtrowania. Propozycja B dokłada do tego drugie wejście, od strony klienta, dla tych dni, kiedy szukasz nie obiektu, tylko firmy.
19.08, 14:24 . d19_p142424 . pytanie, które zostaje

"Te obiekty trzeba podzielic. Szukam latwego sposobu, czy do kazdego obiektu trzeba wpisywac klienta czy co?"

Pełna odpowiedź jest w sekcji Odpowiedź na pytanie z 19.08. Skrót: u zarządcy nie, u firmy usługowej raz przy tworzeniu, a dla obiektów, które już masz, jest masowy picker na karcie klienta i on już działa.
06.08 . migracja 20260806090000, linie 4-8 . decyzja już podjęta

"Klient to nie jest obiekt. Klient to jest dla mnie numerek."

Ta jedna decyzja jest fundamentem propozycji B. Nie odwracamy jej po cichu, tylko dosłownie na niej budujemy.

02Sześć znaczeń słowa "klient"

To jest powód, dla którego się pogubiłeś, i nie ma w tym Twojej winy. Słowo "klient" oznacza w Proofixie sześć różnych rzeczy naraz, a napis "Klienci" na pasku nawigacji znaczy co innego zależnie od tego, kto jest zalogowany. Tabela pochodzi z audytu, sekcja 2.

#Nazwa w interfejsieCzym jest naprawdęGdzie to widać
1 Klienci Proofix, Nowy klient Proofix Firma, która kupiła Proofixa (najemca). Ma limity liczby szefów, obiektów i głębokości drzewa. W kodzie: clients z wypełnionym admin_user_id. Panel roli owner, ekran clients/tenant-new.tsx
2 Klienci w Zespole u ownera, Dane firmy-klienta w kreatorze Stary klient zewnętrzny sprzed przejścia na wielofirmowość (21.04.2026). Model przestarzały, ale wciąż w bazie. W kodzie: clients z pustym admin_user_id. management.tsx, kreator clients/onboard.tsx
3 Klienci, Karta klienta, Klient (kontrahent) To jest ten właściwy. Firma, dla której pracujesz: Benefit System, Lidl, Kaufland. Twój "numerek". W kodzie: rejestr end_clients od 06.08.2026. Panel szefa i menedżera: /(auth)/klienci
4 Przedstawiciel klienta w kreatorze, Klient na plakietce i w profilu Człowiek po stronie Benefit Systemu: dyrektor, kierownik siłowni, recepcja. W kodzie: konto z rolą client plus wiersz client_users. Kreator użytkownika, plakietka roli, stopka menu
5 Klient * oraz Klient (opcjonalnie) na jednym ekranie Dwa różne pola obiektu pod tym samym słowem. Pierwsze to Twoja firma i granica bezpieczeństwa, drugie to klient jako naklejka. W kodzie: objects.client_id i objects.end_client_id. app/(auth)/objects/new.tsx:507 oraz :554
6 Szef Klienta na plakietce, Szef firmy na liście Zespół Administrator firmy najemcy. To w ogóle nie jest klient w żadnym z powyższych znaczeń. W kodzie: rola klient_admin. components/ui/UserRoleBadge.tsx:29, szefowie.tsx:36

Siódme, ukryte znaczenie: "Brak klienta"

Defekt Pole "Twoja firma" na obiekcie nie może być puste, więc kiedy tworzysz obiekt bez firmy, aplikacja zakłada w tabeli firm sztuczny wiersz o nazwie sklejonej z nazwy obiektu:

name: "Brak klienta - Galeria Robakowo", is_internal: true (app/(auth)/objects/new.tsx:219-224, oryginał ma w tym miejscu długą kreskę)

Karta obiektu jest mądra i pokazuje po prostu Brak klienta (objects.tsx:99). Nagłówek sekcji tej reguły nie stosuje i bierze surową nazwę (objects.tsx:60), więc na Twojej liście stoi sekcja o nazwie Brak klienta - Galeria Robakowo (1). Zobaczysz ją na pierwszej makiecie niżej.

Umowa nazewnicza w tym dokumencie: "Twoja firma" to 2FSG, "Klient" to Benefit System albo Lidl, "Przedstawiciel klienta" to człowiek po ich stronie, "Obiekt" i "pod-obiekt" to miejsca. Nigdzie nie używam słowa "klient" w dwóch znaczeniach naraz.


03Dlaczego to drzewo wyszło dziwnie

Nie zbudowałeś złego drzewa. Próbowałeś zbudować jakiekolwiek, bo aplikacja nie pokazywała Ci żadnego.

To nie jest zgrabne zdanie na pocieszenie, tylko wniosek z trzech faktów z audytu.

FaktDowód
1 Sekcje na liście obiektów grupują po Twojej firmie, nie po kliencie. Masz jednego najemcę, więc powstaje jedna sekcja o nazwie 2FSG Sp. z o.o., pod którą leży wszystko. Ta sekcja nie niesie żadnej informacji. Dlatego próbowałeś zrobić sobie kategorie ręcznie, jako korzenie drzewa. app/(auth)/(tabs)/objects.tsx:60 bierze clients.name; hooks/useObjects.ts:31 w ogóle nie pobiera end_client_id
2 Nazwa klienta nie pojawia się nigdzie poza rejestrem Klienci. Ani na liście obiektów, ani na karcie zlecenia, ani w obecności, ani w raportach. Pełne przeszukanie end_client po app/ i components/ daje 12 plików i żaden z nich to nie lista obiektów, zleceń, obecności ani raportów (audyt 9.2)
3 Zero filtrowania po kliencie w całej aplikacji. Filtr zleceń ma dokładnie trzy pola: status, priorytet, obiekt. components/ui/FilterBar.tsx:11-27

Reguła, która porządkuje resztę

Obiekt nadrzędny znaczy jedno: obiekt fizycznie zawiera się w innym obiekcie. Budynek zawiera piętro. Hala zawiera strefę.

Test: "czy mogę tam wejść i odbić się telefonem o punkt NFC?" Jeśli tak, to obiekt. Jeśli nie, to cecha obiektu.

  • "Utrzymanie terenów zewnętrznych": nie przechodzi testu. Nikt się nie odbija o kategorię usługi.
  • "Benefit System": nie przechodzi testu. To firma, nie miejsce.
  • "Fabryka Formy Malta": przechodzi. Adres, drzwi, punkt NFC, ludzie.

Pomysł "klient jako obiekt nadrzędny" był już raz rozpatrzony i odrzucony. Przez Ciebie.

06.08.2026 model "klient równa się obiekt główny" został odrzucony, a tryb ?jako=klient usunięty z formularza obiektu (app/(auth)/objects/new.tsx:99). W jego miejsce powstał rejestr end_clients razem ze zdaniem o numerku. Dlatego propozycja B nie wraca do drzewa, tylko daje Ci ten sam obraz zbudowany na rejestrze, który od dwóch tygodni czeka nieużywany.

Jest jeszcze twardszy powód. Przeniesienia obiektu w drzewie dziś nie ma: brak kontrolki w aplikacji, brak funkcji w bazie, brak ochrony przed pętlą, a wszystkie zabezpieczenia głębokości i dziedziczenia firmy działają wyłącznie przy zakładaniu obiektu, nie przy przenoszeniu (audyt 8.2, punkty 6 do 8). Gdyby klient był rodzicem, to każda zmiana umowy oznaczałaby przenoszenie budynków w drzewie, czyli dokładnie tę jedną operację, której aplikacja nie umie zrobić bezpiecznie.


04Pięć rzeczy, które naprawiamy zawsze

Te pięć defektów naprawia każda z trzech propozycji. Są wspólną bazą, więc porównując A, B i C porównujesz to, co je różni, a nie to, co i tak trzeba zrobić.

NrDefektDowód
D1 Defekt Sekcje listy grupują po Twojej firmie, nie po Kliencie, a pole klienta nie jest nawet pobierane do tego widoku. Szef jednego najemcy widzi jedną sekcję z nazwą własnej firmy. objects.tsx:60, hooks/useObjects.ts:31
D2 Defekt Nagłówek sekcji dla obiektu bez klienta brzmi "Brak klienta - Galeria Robakowo (1)", bo nagłówek bierze surową nazwę sztucznego wiersza, a karta pod nim stosuje regułę i pisze poprawnie "Brak klienta". objects.tsx:60 kontra :99; migracja 20260412000004_internal_client.sql
D3 Defekt Nowy obiekt ląduje na liście głównej i interfejs tego nie mówi. Komunikat to tylko "Obiekt utworzony!", a rozwijane pole obiektu nadrzędnego jest zwinięte i nie pokazuje wartości domyślnej. To dosłownie to, co zaskoczyło Cię o 22:32. CHECKLISTA_PRZEKLIKANIE_2026-08-19.md:521-530, pozycja S2-012, status FAIL
D4 Defekt Szukanie gubi hierarchię. Znaleziony pod-obiekt renderuje się jako korzeń, bo drzewo budowane jest z już przefiltrowanej listy. Przy 500 obiektach wynik nie mówi, gdzie ta rzecz jest. CHECKLISTA_PRZEKLIKANIE_2026-08-19.md:543-551, pozycja S2-014, status FAIL, zrzut przeklik_S2-014.png
D5 Defekt Na karcie klienta nie ma przycisku "Dodaj obiekt", mimo że oba formularze obiektu obsługują parametr z klientem i robią podstawienie. Jedyny przycisk to "Dodaj przedstawiciela". Instalacja jest położona, brakuje kontaktu. audyt 5.1; EndClientDetailScreen.tsx:365-380; objects/new.tsx:123

Najważniejszy obrazek: dziś obok tego samego po zmianie

Po lewej Twoja dzisiejsza lista obiektów. Po prawej to, czym staje się wejście w propozycji B. Te same dane, ta sama firma, ten sam dzień.

Obiekty, tak jest dziś Web 1440px Defekt
Obiekty
Brak klienta - Galeria Robakowo (1)
Galeria Robakowo
Brak klienta
ul. Poznańska 12, Robakowo
2 pracowników
2FSG Sp. z o.o. (14)
Fabryka Formy Malta
2FSG Sp. z o.o.
ul. Baraniaka 88, Poznań
4 pracowników
Strefa cardio
ul. Baraniaka 88, Poznań
2 pracowników
Szatnie i natryski
ul. Baraniaka 88, Poznań
3 pracowników
Fabryka Formy Arena
2FSG Sp. z o.o.
ul. Wyspiańskiego 33, Poznań
3 pracowników
Basen i strefa mokra
ul. Wyspiańskiego 33, Poznań
2 pracowników
Fabryka Formy Grunwaldzka
2FSG Sp. z o.o.
ul. Grunwaldzka 104, Poznań
2 pracowników
Lidl Poznań Dębiec
2FSG Sp. z o.o.
ul. 28 Czerwca 1956 r. 223, Poznań
2 pracowników
Lidl Swarzędz
2FSG Sp. z o.o.
ul. Poznańska 14, Swarzędz
2 pracowników
Kaufland Poznań Górczyn
2FSG Sp. z o.o.
ul. Górecka 30, Poznań
3 pracowników
1
Jedna sekcja na całą firmę: 2FSG Sp. z o.o. (14). Nic o niej nie mówi, gdzie co jest, bo wszystkie Twoje obiekty mają tę samą firmę.
2
Nagłówek Brak klienta - Galeria Robakowo (1) to nie literówka, tylko sklejka nazwy sztucznego wiersza w tabeli firm. Karta pod nim pisze już poprawnie "Brak klienta".
3
Pod każdą nazwą obiektu widnieje 2FSG Sp. z o.o., czyli Twoja własna firma. Miejsce na nazwę klienta już jest, tylko wypełnione złą wartością (objects.tsx:97-101).
Klienci jako wejście, po zmianie Web 1440px Propozycja
Klienci
Benefit System
12 obiektów|9 pracowników|3 otwarte zlecenia
Plac Europejski 2, Warszawa
Fabryka Formy Maltaul. Baraniaka 88, Poznań
Fabryka Formy Arenaul. Wyspiańskiego 33, Poznań
Fabryka Formy Grunwaldzkaul. Grunwaldzka 104, Poznań
i 9 więcej
Lidl Polska
3 obiekty|5 pracowników|1 otwarte zlecenie
ul. Poznańska 48, Jankowice
Lidl Poznań Dębiecul. 28 Czerwca 1956 r. 223
Lidl Swarzędzul. Poznańska 14, Swarzędz
Lidl Robakowoul. Gnieźnieńska 3, Robakowo
Kaufland Polska
4 obiekty|6 pracowników|brak otwartych zleceń
al. Krakowska 291, Warszawa
Kaufland Poznań Górczynul. Górecka 30, Poznań
Kaufland Lubońul. Żabikowska 66, Luboń
i 2 więcej
Student Depot Polonez
2 obiekty|4 pracowników|2 otwarte zlecenia
ul. Obornicka 127, Poznań
Akademik Polonezul. Obornicka 127, Poznań
Parking i tereny zewnętrzneul. Obornicka 127
Termy Maltańskie
1 obiekt|3 pracowników|brak otwartych zleceń
ul. Termalna 1, Poznań
1
To jest obraz z 22:35: Benefit System, a pod nim siłownie. Zbudowany na rejestrze klientów, bez jednego nowego obiektu i bez ruszania drzewa.
2
Trzy liczniki przy każdym kliencie: obiekty, pracownicy, otwarte zlecenia. Licznik obiektów musi być liczony na serwerze, inaczej Ty i menedżer zobaczycie tu różne liczby (lib/utils.ts:258-279). To pozycja kosztowa, nie ozdobnik.
3
Podgląd pierwszych trzech obiektów i "i 9 więcej", żeby jednym rzutem oka było widać, co gdzie jest, bez wchodzenia w kartę. Pasek szukania na tym ekranie też jest nowy: dziś lista klientów nie ma żadnego (EndClientListScreen.tsx).

Uwaga o cytatach z interfejsu: teksty z aplikacji przepisuję dosłownie, z jednym wyjątkiem. Kod używa w kilku miejscach długiej kreski, a w tym dokumencie obowiązuje zakaz tego znaku, więc w każdym takim miejscu stoi zwykły myślnik z odstępami. Nic poza tym nie jest zmienione.

To samo na telefonie: przed i po

Obiekty, dziś Mobile 390px Defekt
9:41 . . . .|||100%
Obiekty
Brak klienta - Galeria Robakowo (1)
Galeria Robakowo
Brak klienta
ul. Poznańska 12, Robakowo
2 pracowników
2FSG Sp. z o.o. (14)
Fabryka Formy Malta
2FSG Sp. z o.o.
ul. Baraniaka 88, Poznań
4 pracowników
Strefa cardio
ul. Baraniaka 88, Poznań
2 pracowników
Szatnie i natryski
ul. Baraniaka 88, Poznań
3 pracowników
Fabryka Formy Arena
2FSG Sp. z o.o.
ul. Wyspiańskiego 33, Poznań
3 pracowników
Fabryka Formy Grunwaldzka
2FSG Sp. z o.o.
ul. Grunwaldzka 104, Poznań
2 pracowników
Klienci jako wejście Mobile 390px Propozycja
9:41 . . . .|||100%
Klienci
Benefit System
12 obiektów|9 prac.|3 zlecenia
Fabryka Formy Malta
Fabryka Formy Arena
Fabryka Formy Grunwaldzka
i 9 więcej
Lidl Polska
3 obiekty|5 prac.|1 zlecenie
Lidl Poznań Dębiec
Lidl Swarzędz
Lidl Robakowo
Kaufland Polska
4 obiekty|6 prac.|0 zleceń
Kaufland Poznań Górczyn
Kaufland Luboń
i 2 więcej
Student Depot Polonez
2 obiekty|4 prac.|2 zlecenia
Akademik Polonez
Parking i tereny zewnętrzne
1
Ten sam obraz mieści się na telefonie, bo karta klienta jest wąska: nazwa, trzy liczby, trzy obiekty.
2
Ekran po prawej ma strzałkę powrotu, a nie zakładkę na dolnym pasku, i to jest zgodne z dzisiejszym stanem: w panelu szefa zakładki Klienci na dolnym pasku nie ma w ogóle, wejście prowadzi przez kafelek na pulpicie i przez menu na webie (audyt, sekcja 11).
3
Jeśli Klienci ma być ekranem pierwszej potrzeby także na telefonie, trzeba zdecydować, która z sześciu dzisiejszych zakładek ustępuje miejsca. Ta propozycja tego nie doprasza po cichu, tylko wpisuje jako osobną decyzję i pozycję kosztową.

D3: formularz mówi wprost, gdzie obiekt wyląduje

To jest naprawa tego, co zaskoczyło Cię o 22:32. Formularz nie zmienia zachowania aplikacji, tylko przestaje je ukrywać.

Nowy obiekt, z jawnym miejscem docelowym Web 1440px Propozycja
Nowy obiekt
Nazwa obiektu * Galeria Robakowo, parking
Obiekt nadrzędny Brak, obiekt główny
Wybierz obiekt, w którym ten nowy fizycznie się znajduje. Zostaw puste, jeśli to osobne miejsce.
Klient Bez klienta
Ostatnio używany: Benefit System
Adres ul. Poznańska 12
Miasto Robakowo
Utwórz obiekt
1
Baner mówi wprost, gdzie obiekt wyląduje, zanim klikniesz Utwórz. Dziś tej informacji nie ma nigdzie, a pole obiektu nadrzędnego jest zwinięte i nie pokazuje wartości domyślnej (S2-012, status FAIL).
2
Pole klienta jest tu opcjonalne i wypełnia się jednym kliknięciem. Wskazówka "Ostatnio używany" to propozycja, nie stan dzisiejszy.
3
Pole "Klient" pokazuje się tylko przy obiekcie głównym, bo z interfejsu klienta ustawia się wyłącznie na korzeniu (new.tsx:283). Pod-obiekt dziedziczy klienta z gałęzi i nie ma czego wybierać.
Nowy obiekt, dziś Mobile 390px Defekt
9:41 . . . .|||100%
Nowy obiekt
Nazwa obiektu * Galeria Robakowo, parking
Obiekt nadrzędny
Adres ul. Poznańska 12
Miasto Robakowo
Zakres usług Opisz zakres prac
Utwórz obiekt

Zwinięta sekcja obiektu nadrzędnego nie pokazuje wartości domyślnej. Nic na tym ekranie nie mówi, gdzie obiekt wyląduje.

Nowy obiekt, po zmianie Mobile 390px Propozycja
9:41 . . . .|||100%
Nowy obiekt
Nazwa obiektu * Galeria Robakowo, parking
Obiekt nadrzędny Brak, obiekt główny
Klient Bez klienta
Ostatnio używany: Benefit System
Adres ul. Poznańska 12
Utwórz obiekt
Obiekt utworzony na liście głównej. Zmień
1
Po lewej stan dzisiejszy: zwinięta sekcja "Obiekt nadrzędny" bez wartości domyślnej. Po prawej to samo z jednym zdaniem na górze i z komunikatem po zapisie, który mówi, co się właśnie stało.
2
Napis "Zmień" w komunikacie to skrót do karty nowego obiektu. Nie jest to przeniesienie w drzewie, bo tego aplikacja nie umie (audyt 8.2 punkt 6). To zwykłe wejście na kartę.

05Jak to wygląda

Sześć ekranów, każdy na webie i na telefonie. Ramki są przycięte na dole tak samo jak prawdziwy ekran: lista leci dalej, tylko jej nie widać.

Ekran 1: lista klientów z podglądem obiektów

Pełną listę widziałeś już w zestawieniu wyżej. Tu jest ta sama lista przewinięta niżej, do miejsca, w którym kończą się klienci i zaczyna to, co dziś robi największy bałagan.

Klienci, koniec listy Web 1440px Propozycja
Klienci
Business Garden Poznań
3 obiekty|4 pracowników|1 otwarte zlecenie
ul. Kolorowa 8, Poznań
Budynek A, recepcja i holul. Kolorowa 8, Poznań
Budynek B, biuraul. Kolorowa 8, Poznań
Parking podziemnyul. Kolorowa 8, Poznań
Nickel Technology Park
2 obiekty|3 pracowników|brak otwartych zleceń
ul. Krzemowa 1, Złotniki
Hala produkcyjnaul. Krzemowa 1, Złotniki
Tereny zewnętrzneul. Krzemowa 1, Złotniki
Wspólnota Mieszkaniowa Kwiatowa 12
1 obiekt|2 pracowników|2 otwarte zlecenia
ul. Kwiatowa 12, Poznań
Kwiatowa 12, klatki i terenul. Kwiatowa 12, Poznań
Bez klienta
1 obiekt|2 pracowników|brak otwartych zleceń
Obiekty, którym nie przypisano jeszcze klienta
Galeria Robakowoul. Poznańska 12, Robakowo

8 klientów, 29 obiektów

1
Na końcu listy stoi jedna szara pozycja Bez klienta. To jest miejsce, w którym dziś powstaje nagłówek "Brak klienta - Galeria Robakowo (1)". Zamiast sklejki z nazwy sztucznego wiersza jest jedna, stała pozycja z licznikiem.
2
Pozycja "Bez klienta" nie jest nowym bytem w bazie. To zbiór obiektów, które nie mają naklejki, czyli to samo, co dziś jest w danych. Sztuczny wiersz w tabeli firm zostaje tam, gdzie był, tylko przestaje być widoczny jako nazwa sekcji.
3
Klikanie w tę pozycję prowadzi na listę obiektów zawężoną do "Bez klienta", więc masz gotową listę rzeczy do uporządkowania w jednym miejscu.
Klienci, dziś Mobile 390px Jest dziś
9:41 . . . .|||100%
Klienci
Benefit System
Plac Europejski 2, Warszawa
12 obiektów
Lidl Polska
ul. Poznańska 48, Jankowice
3 obiekty
Kaufland Polska
al. Krakowska 291, Warszawa
4 obiekty
Student Depot Polonez
ul. Obornicka 127, Poznań
2 obiekty
Termy Maltańskie
ul. Termalna 1, Poznań
1 obiekt
Business Garden Poznań
ul. Kolorowa 8, Poznań
3 obiekty
Klienci, po zmianie Mobile 390px Propozycja
9:41 . . . .|||100%
Klienci
Kaufland Polska
4 obiekty|6 prac.|0 zleceń
Kaufland Poznań Górczyn
Kaufland Luboń
i 2 więcej
Termy Maltańskie
1 obiekt|3 prac.|0 zleceń
Termy Maltańskie, strefa saun
Business Garden Poznań
3 obiekty|4 prac.|1 zlecenie
Budynek A, recepcja i hol
Budynek B, biura
Parking podziemny
Bez klienta
1 obiekt|2 prac.
Galeria Robakowo
1
Po lewej dzisiejsza lista klientów: nazwa, adres i jeden znacznik z liczbą obiektów (EndClientListScreen.tsx:75-95). Nie widać z niej, co to za obiekty ani czy ktoś tam dziś pracuje.
2
Po prawej ta sama lista z podglądem i licznikami. To jedyna różnica, ale to ona zamienia rejestr w ekran, na który się wchodzi.

Ekran 2: karta klienta jako miejsce pracy

To jest serce propozycji B. Najpierw stan dzisiejszy, żeby było widać, ile z tego już jest zbudowane.

Karta klienta, tak jest dziś Web 1440px Jest dziś Defekt
Benefit System
Dane klienta
Nazwa klienta * Benefit System
Adres Plac Europejski 2
Miasto Warszawa
Notatki wewnętrzne Faktura zbiorcza do 10 dnia miesiąca
Obiekty klienta

Zaznacz istniejące obiekty, które należą do tego klienta. Pod-obiekty zaznaczonego obiektu dziedziczą klienta automatycznie - wystarczy zaznaczyć korzeń gałęzi (np. „Lidl sklepy - sprzątanie zewnętrzne"). Nowy obiekt możesz też przypisać do klienta bezpośrednio przy jego tworzeniu.

Uwaga: lista pokazuje wyłącznie obiekty z Twojego zakresu. Klient może mieć dodatkowo obiekty przypisane przez administratora firmy - te widzi i edytuje admin.

Fabryka Formy Malta
Strefa cardio
Szatnie i natryski
Fabryka Formy Arena
Basen i strefa mokra
Galeria Robakowo
Kaufland Poznań Górczyn (inny klient)
1
Trzy sekcje już są: Dane klienta, Obiekty klienta, Przedstawiciele klienta (EndClientDetailScreen.tsx:234, :277, :321). Propozycja B nie buduje nowego ekranu, tylko dokłada do istniejącego.
2
Sekcja Obiekty klienta to zaznaczarka, nie lista. Nie ma adresów, nie ma ludzi, nie ma przycisku "Dodaj obiekt" (defekt D5). Jedyny przycisk na tym ekranie to "Dodaj przedstawiciela", niżej poza kadrem.
3
Podpowiedź mówi o dziedziczeniu przez korzeń gałęzi, ale kliknięcie przełącza dokładnie jeden wiersz, bo dziedziczenie w tej zaznaczarce jest wyłączone (audyt 9.8). Etykieta "(inny klient)" pojawia się tylko przy obiektach z własną naklejką, nie przy dziedziczących (audyt 7, pozycja 12).
Karta klienta jako miejsce pracy Web 1440px Propozycja
Benefit System
12
obiektów
9
pracowników
3
otwarte zlecenia
Obiekty klienta Dodaj obiekt
Fabryka Formy Malta
ul. Baraniaka 88, Poznań . 4 pracowników
Strefa cardio
2 pracowników
Szatnie i natryski
3 pracowników
Fabryka Formy Arena
ul. Wyspiańskiego 33, Poznań . 3 pracowników
Basen i strefa mokra
2 pracowników
Fabryka Formy Grunwaldzka
ul. Grunwaldzka 104, Poznań . 2 pracowników
Pokaż wszystkie 12
Zarządzaj przypisaniem
Przedstawiciele klienta Dodaj przedstawiciela
Marta Kowalczyk
Dyrektor / Właściciel . +48 601 200 145
Paweł Nowak
Kierownik sklepu . Fabryka Formy Malta
Dane klienta
Nazwa klienta * Benefit System
Adres Plac Europejski 2
Miasto Warszawa
1
Trzy liczniki na górze: obiekty, pracownicy, otwarte zlecenia. Żaden z nich nie jest dziś liczony na serwerze. Obiekty liczy przeglądarka z zakresu zalogowanego, a zlecenie w ogóle nie ma kolumny klienta i trzeba je liczyć przez obiekt (audyt 8.3 punkt 13). To najdroższa część tej propozycji i najbardziej konieczna.
2
Sekcja Obiekty klienta staje się listą z adresami i ludźmi, z wcięciem pod-obiektów, a zaznaczarka chowa się pod "Zarządzaj przypisaniem". Zaznaczarka zostaje bez zmian, bo to jedyna droga, która pozwala otagować pod-obiekt (audyt sekcja 5, ścieżka 3).
3
Przycisk Dodaj obiekt to naprawa D5. Nie wymaga nowego formularza: oba formularze obiektu już przyjmują klienta w adresie i robią podstawienie (objects/new.tsx:123), tylko nic tam dziś nie prowadzi.
Karta klienta, dziś Mobile 390px Jest dziś
9:41 . . . .|||100%
Benefit System
Dane klienta
Nazwa klienta * Benefit System
Adres Plac Europejski 2
Miasto Warszawa
Obiekty klienta

Zaznacz istniejące obiekty, które należą do tego klienta. Pod-obiekty zaznaczonego obiektu dziedziczą klienta automatycznie - wystarczy zaznaczyć korzeń gałęzi.

Uwaga: lista pokazuje wyłącznie obiekty z Twojego zakresu. Klient może mieć dodatkowo obiekty przypisane przez administratora firmy - te widzi i edytuje admin.

Fabryka Formy Malta
Strefa cardio
Szatnie i natryski
Fabryka Formy Arena
Karta klienta, po zmianie Mobile 390px Propozycja
9:41 . . . .|||100%
Benefit System
12
obiektów
9
prac.
3
zleceń
Obiekty klienta Dodaj
Fabryka Formy Malta
ul. Baraniaka 88 . 4 prac.
Strefa cardio
2 prac.
Szatnie i natryski
3 prac.
Fabryka Formy Arena
ul. Wyspiańskiego 33 . 3 prac.
Pokaż wszystkie 12
Przedstawiciele klienta Dodaj
Marta Kowalczyk
Dyrektor / Właściciel
1
Po lewej dzisiejsza karta: dwie długie podpowiedzi i zaznaczarka zajmują cały pierwszy ekran telefonu. Po prawej pierwszy ekran zajmują liczby i obiekty, a podpowiedzi przenoszą się pod "Zarządzaj przypisaniem".
2
Nazwy sekcji zostają dosłownie takie, jakie są w kodzie dziś: Dane klienta, Obiekty klienta, Przedstawiciele klienta. Zmienia się kolejność i zawartość, nie słownictwo.

Ekran 3: z karty klienta prosto do nowego obiektu

Naprawa D5 w działaniu. Klikasz "Dodaj obiekt" na karcie Benefit System i formularz otwiera się z już wybranym klientem.

Nowy obiekt z wypełnionym klientem Web 1440px Propozycja
Nowy obiekt
Nazwa obiektu * Fabryka Formy Grunwaldzka
Klient Benefit System
Obiekt nadrzędny Brak, obiekt główny
Adres ul. Grunwaldzka 104
Miasto Poznań
Utwórz obiekt
1
To nie jest nowy formularz. To ten sam ekran co zawsze, otwarty z parametrem klienta, który oba formularze obiektu już obsługują (objects/new.tsx:123, (klient-admin)/obiekty/nowy.tsx:42). Brakuje wyłącznie przycisku, który tam prowadzi.
2
Klienta da się z interfejsu ustawić tylko na obiekcie głównym (new.tsx:283). Dlatego pole klienta znika, gdy wybierzesz obiekt nadrzędny: pod-obiekt dziedziczy klienta z gałęzi i nie ma tam nic do wybierania.
Karta klienta, klikam Dodaj obiekt Mobile 390px Propozycja
9:41 . . . .|||100%
Benefit System
11
obiektów
9
prac.
3
zleceń
Obiekty klienta Dodaj
Fabryka Formy Malta
ul. Baraniaka 88 . 4 prac.
Fabryka Formy Arena
ul. Wyspiańskiego 33 . 3 prac.
Pokaż wszystkie 11
Formularz otwarty z klientem Mobile 390px Propozycja
9:41 . . . .|||100%
Nowy obiekt
Nazwa obiektu * Fabryka Formy Grunwaldzka
Klient Benefit System
Obiekt nadrzędny Brak, obiekt główny
Adres ul. Grunwaldzka 104
Miasto Poznań
Utwórz obiekt
"Fabryka Formy Grunwaldzka" został dodany i przypisany klientowi Benefit System.
1
Licznik na karcie klienta idzie z 11 na 12 od razu po powrocie. To jest ta pętla, której dziś nie ma: dodajesz obiekt u klienta, a nie gdzieś obok.
2
Komunikat na dole to zdanie, które już istnieje w aplikacji, tylko w drugim panelu: "{nazwa}" został dodany i przypisany klientowi {nazwa klienta}. (app/(klient-admin)/obiekty/nowy.tsx:61-79). Panel szefa nie mówi dziś o kliencie nic (audyt 9.11).

Ekran 4: zakładka Obiekty zostaje jako widok "wszystko"

Klienci to jedno wejście, nie jedyne. Pracownik i menedżer częściej szukają obiektu niż firmy, więc lista obiektów zostaje, tylko wreszcie z treścią.

Obiekty, wszystkie, pogrupowane klientem Web 1440px Propozycja
Obiekty
Wszyscy klienci
Benefit System 12
Lidl Polska 3
Kaufland Polska 4
Bez klienta 1
Benefit System (3 obiekty główne, 12 razem)
Fabryka Formy Malta
Benefit System
ul. Baraniaka 88, Poznań
4 pracowników
Strefa cardio
ul. Baraniaka 88, Poznań
2 pracowników
Szatnie i natryski
ul. Baraniaka 88, Poznań
3 pracowników
Fabryka Formy Arena
Benefit System
ul. Wyspiańskiego 33, Poznań
3 pracowników
Lidl Polska (3 obiekty główne, 3 razem)
Lidl Poznań Dębiec
Lidl Polska
ul. 28 Czerwca 1956 r. 223, Poznań
2 pracowników
Lidl Swarzędz
Lidl Polska
ul. Poznańska 14, Swarzędz
2 pracowników
Bez klienta (1)
Galeria Robakowo
Bez klienta
ul. Poznańska 12, Robakowo
2 pracowników
1
Sekcje grupują klientem, a nie Twoją firmą (naprawa D1). Sekcja "Bez klienta" na końcu zamiast nagłówka "Brak klienta - Galeria Robakowo (1)" (naprawa D2).
2
Linia pod nazwą obiektu pokazuje nazwę klienta, a nie 2FSG Sp. z o.o. To jedna zmiana w objects.tsx:97-101 plus dociągnięcie pola klienta w hooks/useObjects.ts:31.
3
Pod-obiekty nadal wcinają się pod rodzicem, bo to jest fizyczne zawieranie i nikt tego nie rusza. Rząd znaczników nad listą zawęża widok jednym kliknięciem.
Obiekty, dziś, obiekt bez klienta Mobile 390px Defekt
9:41 . . . .|||100%
Obiekty
Brak klienta - Galeria Robakowo (1)
Galeria Robakowo
Brak klienta
ul. Poznańska 12, Robakowo
2 pracowników
2FSG Sp. z o.o. (14)
Kaufland Poznań Górczyn
2FSG Sp. z o.o.
ul. Górecka 30, Poznań
3 pracowników
Kaufland Luboń
2FSG Sp. z o.o.
ul. Żabikowska 66, Luboń
3 pracowników
Akademik Polonez
2FSG Sp. z o.o.
ul. Obornicka 127, Poznań
4 pracowników
Termy Maltańskie, strefa saun
2FSG Sp. z o.o.
ul. Termalna 1, Poznań
3 pracowników
Obiekty, po zmianie Mobile 390px Propozycja
9:41 . . . .|||100%
Obiekty
Wszyscy
Benefit System 12
Lidl Polska 3
Kaufland 4
Bez klienta 1
Kaufland Polska (2 główne, 4 razem)
Kaufland Poznań Górczyn
Kaufland Polska
ul. Górecka 30, Poznań
3 pracowników
Kaufland Luboń
Kaufland Polska
ul. Żabikowska 66, Luboń
3 pracowników
Student Depot Polonez (1 główny, 2 razem)
Akademik Polonez
Student Depot Polonez
ul. Obornicka 127, Poznań
4 pracowników
Bez klienta (1)
Galeria Robakowo
Bez klienta
ul. Poznańska 12, Robakowo
2 pracowników
1
Po lewej to samo, co widzisz dziś w telefonie: jedna sekcja 2FSG i przy każdym obiekcie nazwa własnej firmy. Po prawej sekcje mówią, czyj to obiekt.
2
Nagłówek "Brak klienta - Galeria Robakowo (1)" zamienia się w zwykłą sekcję Bez klienta (1). Sztuczny wiersz w tabeli firm zostaje w bazie nietknięty, przestaje tylko wychodzić na wierzch.

Ekran 5: zarządca, czyli rejestr klientów pusty

To odpowiedź na Twoje zdanie z 22:48 o patrzeniu z dwóch stron. Ekran nie pyta, kim jesteś. Sprawdza, czy masz klientów w rejestrze, i sam się dostosowuje.

Anfil, 312 siłowni, zero klientów w rejestrze Web 1440px Propozycja
Obiekty

312 obiektów

Anfil Poznań Rataje
ul. Piaśnicka 6, Poznań
2 pracowników
Anfil Poznań Winogrady
ul. Serbska 7, Poznań
2 pracowników
Anfil Poznań Grunwald
ul. Bukowska 156, Poznań
1 pracowników
Anfil Gniezno
ul. Sobieskiego 20, Gniezno
1 pracowników
Anfil Konin
ul. Dworcowa 4, Konin
1 pracowników
Anfil Leszno
ul. Narutowicza 74, Leszno
2 pracowników
1
Rejestr klientów pusty, więc nagłówki sekcji znikają same i zostaje płaska lista, dokładnie tak, jak powiedziałeś o 22:50. Dziś ten sam ekran pokazywałby jedną sekcję "Anfil Sp. z o.o. (312)", która nic nie wnosi.
2
Znika też rząd znaczników klientów i kafelek Klienci na pulpicie. Nikt nic nie przełącza, aplikacja czyta stan rejestru.
3
Przy 312 obiektach pracuje się szukaniem i filtrami, nie przewijaniem. Dlatego naprawa D4, czyli ścieżka w wyniku szukania, jest tu ważniejsza niż grupowanie.
Klienci u zarządcy, stan dzisiejszy Mobile 390px Jest dziś
9:41 . . . .|||100%
Klienci
Brak klientów
Klient (kontrahent, np. Lidl sp. z o.o.) to wpis w rejestrze Twojej firmy - sam w sobie nie jest obiektem. Po dodaniu klienta przypiszesz mu istniejące obiekty, a przedstawiciela klienta dodasz w Zespół.
Obiekty u zarządcy, po zmianie Mobile 390px Propozycja
9:41 . . . .|||100%
Obiekty

Fikolki, 3 obiekty

Fikolki Poznań
ul. Głogowska 265, Poznań
2 pracowników
Fikolki Stary Browar
ul. Półwiejska 42, Poznań
2 pracowników
Fikolki Wrocław
ul. Krzywoustego 126, Wrocław
1 pracowników
1
Po lewej dzisiejszy pusty rejestr z dosłownym tekstem z aplikacji (EndClientListScreen.tsx:57-64). Ten tekst mówi dokładnie to samo, co ten dokument: klient to wpis, nie obiekt.
2
Po prawej Fikolki: trzy sale, zero klientów, zero nagłówków, zero znaczników. Ta sama aplikacja, ta sama wersja, inny stan rejestru.

Ekran 6: szukanie mówi, gdzie ta rzecz jest

Naprawa D4. Przy 12 obiektach to wygoda. Przy 312 to jedyny sposób pracy.

Wynik szukania ze ścieżką Web 1440px Propozycja
Obiekty
Znaleziono 4 obiekty
Benefit System Fabryka Formy Malta Strefa cardio
Strefa cardio
2 pracowników
Benefit System Fabryka Formy Grunwaldzka Strefa cardio
Strefa cardio
1 pracowników
Benefit System Fabryka Formy Arena Strefa cardio i wolne ciężary
Strefa cardio i wolne ciężary
2 pracowników
Student Depot Polonez Akademik Polonez Siłownia i cardio
Siłownia i cardio
1 pracowników
1
Ścieżka zaczyna się od klienta, potem obiekt główny, potem znaleziona rzecz. Trzy takie same nazwy "Strefa cardio" przestają być zagadką.
2
Dziś znaleziony pod-obiekt renderuje się jako korzeń, bez żadnej informacji o tym, gdzie leży (S2-014, status FAIL, zrzut przeklik_S2-014.png).
Szukanie, dziś Mobile 390px Defekt
9:41 . . . .|||100%
Obiekty
2FSG Sp. z o.o. (4)
Strefa cardio
2FSG Sp. z o.o.
ul. Baraniaka 88, Poznań
2 pracowników
Strefa cardio
2FSG Sp. z o.o.
ul. Grunwaldzka 104, Poznań
1 pracowników
Strefa cardio i wolne ciężary
2FSG Sp. z o.o.
ul. Wyspiańskiego 33, Poznań
2 pracowników
Siłownia i cardio
2FSG Sp. z o.o.
ul. Obornicka 127, Poznań
1 pracowników
Szukanie, po zmianie Mobile 390px Propozycja
9:41 . . . .|||100%
Obiekty
Znaleziono 4 obiekty
Benefit System Fabryka Formy Malta
Strefa cardio
2 pracowników
Benefit System Fabryka Formy Grunwaldzka
Strefa cardio
1 pracowników
Benefit System Fabryka Formy Arena
Strefa cardio i wolne ciężary
2 pracowników
Student Depot Polonez Akademik Polonez
Siłownia i cardio
1 pracowników
1
Po lewej cztery wyniki nie do odróżnienia: trzy razy "Strefa cardio" i przy każdym ta sama nazwa Twojej firmy. Po prawej każdy wynik mówi, u kogo i w czym siedzi.
2
Adres w wyniku ustępuje miejsca ścieżce, bo pod-obiekt ma zwykle ten sam adres co rodzic i nie rozstrzyga niczego.

06Dwie persony obok siebie

To jest sprawdzian z Twojego zdania z 22:48. Ta sama aplikacja, ta sama wersja, dwa różne rodzaje firmy.

ElementZarządca: Fikolki, AnfilFirma usługowa: 2FSG
Rejestr Klienci Pusty. Ekran pokazuje dosłowny tekst z aplikacji o tym, czym jest klient, i przycisk dodania. 8 klientów. Główne wejście do pracy.
Kafelek Klienci na pulpicie Nie renderuje się, bo rejestr pusty. Pierwszy kafelek, z liczbą klientów.
Lista obiektów Płaska, bez nagłówków sekcji i bez znaczników. 3 obiekty u Fikolek, 312 u Anfila. Sekcje po kliencie plus sekcja "Bez klienta" na końcu.
Pole klienta w formularzu obiektu Ukryte, bo nie ma z czego wybierać. Widoczne przy obiekcie głównym, opcjonalne, z podpowiedzią ostatnio używanego.
Przedstawiciel klienta Nie występuje. Zarządca ma pracowników i szefów, nie ma drugiej strony umowy. Marta z Benefit Systemu widzi tylko obiekty Benefit Systemu, zgłasza i potwierdza zlecenia.
Co Franek musi ustawić Nic. Ekran sam się dostosowuje do pustego rejestru. Raz: dodać klientów i przypisać obiekty masowo na karcie klienta.

Sedno: nikt nie wybiera trybu. Aplikacja czyta liczbę wpisów w rejestrze. Zero nowych przełączników, zero ustawień, których trzeba pilnować.


07Odpowiedź na pytanie z 19.08

"Szukam latwego sposobu, czy do kazdego obiektu trzeba wpisywac klienta czy co?"

1. U zarządcy: nie

Rejestr pusty, więc pola klienta w ogóle nie widać. Fikolki i Anfil nigdy nie zobaczą tego pytania.

2. U firmy usługowej: raz, przy tworzeniu

Jedno pole na formularzu obiektu głównego, opcjonalne, z podpowiedzią ostatnio używanego klienta. Nie musisz go wypełniać, ale wtedy obiekt trafia do sekcji "Bez klienta".

3. Dla obiektów, które już masz: hurtem

Na karcie klienta jest zaznaczarka, która pozwala przypisać wiele obiektów naraz. Ona już działa (EndClientDetailScreen.tsx:311) i jest jedyną drogą, która pozwala otagować także pod-obiekt.

Do tego najważniejsze: klient zjeżdża w dół gałęzi sam

Nie wpisujesz klienta pod-obiektom. Oznaczasz budynek, a piętra, strefy i szatnie dziedziczą to same, bo aplikacja wylicza klienta idąc w górę drzewa do najbliższego oznaczonego przodka (object_effective_end_client_id, migracja 20260807210000). Fabryka Formy Malta ma dziewięć pod-obiektów i klienta wpisujesz raz, nie dziesięć razy.

Przy 312 siłowniach Filipa: gdyby wszystkie należały do jednego klienta, to jedno zaznaczenie na karcie klienta. Gdyby do trzech różnych, to trzy przejścia po tej samej zaznaczarce. Nie ma scenariusza, w którym wpisujesz klienta 312 razy.


08Co to kosztuje

Trzy warstwy. Pierwsza jest tania, bo listy, karty i drzewo już są. Druga to jedyne miejsce, gdzie ta propozycja naprawdę kosztuje. Trzecia jest osobna i nie musi się dziać teraz.

Warstwa 1: sam widok

PozycjaRozmiarNa czym stoi
Dociągnięcie pola klienta do listy obiektów i zmiana klucza grupowania (D1)Małahooks/useObjects.ts:31, objects.tsx:53-69. Lista sekcjonowana już jest.
Nazwa klienta zamiast nazwy własnej firmy na karcie obiektuMałaobjects.tsx:97-101, jedno wyrażenie
Sekcja "Bez klienta" zamiast surowej nazwy sztucznego wiersza (D2)Małata sama reguła is_internal, którą karta już stosuje
Lista klientów: podgląd trzech obiektów, liczniki, pasek szukaniaŚredniaEndClientListScreen.tsx, nowy blok w karcie
Karta klienta jako miejsce pracy: liczniki, lista obiektów, kolejność sekcjiŚredniaEndClientDetailScreen.tsx, trzy sekcje już istnieją
Przycisk "Dodaj obiekt" na karcie klienta (D5)Małaparametr klienta jest już obsługiwany przez oba formularze
Baner i komunikat "gdzie to wyląduje" w formularzu (D3)Małatekst plus jeden komunikat, zero zmian w danych
Ścieżka do korzenia w wynikach szukania (D4)Średniatrzeba przestać filtrować przed budową drzewa, a nie po

Warstwa 2: dane i serwer

PozycjaRozmiarDlaczego
Licznik obiektów klienta liczony na serwerze Duża Konieczna Dziś liczy przeglądarka z zakresu zalogowanego (lib/utils.ts:258-279). Funkcja SQL nie istnieje, trzeba ją napisać, przetestować i przepiąć oba ekrany. Bez tego pierwszy ekran propozycji B pokazuje różne liczby różnym ludziom.
Liczniki pracowników i otwartych zleceń przy kliencie Średnia Zlecenie nie ma kolumny klienta (audyt 8.3 punkt 13), więc liczenie idzie przez obiekt. Przypisania też trzeba policzyć po całej gałęzi, a nie po dosłownych wierszach: 11 z 63 par człowiek-obiekt istnieje wyłącznie przez dziedziczenie.
Zakładka Klienci na dolnym pasku w panelu szefa Średnia Decyzja Dziś tej zakładki w tym panelu nie ma w ogóle (audyt sekcja 11). Trzeba zdecydować, która z sześciu obecnych ustępuje miejsca. Do czasu decyzji wejście zostaje przez kafelek na pulpicie i menu na webie.

Warstwa 3: osobna fala

PozycjaRozmiarWarunek
Przepięcie istniejących obiektów spod korzeni-kategorii typu "Utrzymanie terenów zewnętrznych" Duża Zawsze osobno, z testem przed i po. Przeniesienia w drzewie nie ma w aplikacji, nie ma ochrony przed pętlą, a zabezpieczenia głębokości, limitu obiektów i dziedziczenia firmy działają wyłącznie przy zakładaniu obiektu (audyt 8.2 punkty 6 do 8). To nigdy nie jest "jedna linijka".
Opcja dodatkowa: grupowanie po rodzaju usługi Osobna wycena Dzisiejsze pole zakresu usług to wolny tekst: bez słownika, bez indeksu i bez ani jednego miejsca w kodzie, które po nim filtruje, grupuje albo sortuje (audyt 9.4). Żeby po tym grupować, trzeba nowego pola słownikowego, migracji danych, pola w formularzu i filtru. Propozycja B tego nie zawiera i nie opiera na tym nawigacji.

09Czego to NIE robi

Uczciwe granice. Każda z nich jest ograniczeniem dzisiejszej aplikacji, nie wyborem stylu.

  1. Nie robi z klienta obiektu. Benefit System nadal nie ma adresu, punktu NFC, zlecenia ani godzin. Nie da się do niego wysłać pracownika. Decyzja z 06.08 stoi.
  2. Nie pozwala przenosić obiektów w drzewie. Jeśli masz dziś obiekty pod korzeniem "Utrzymanie terenów zewnętrznych", propozycja B ich nie przestawi. To osobna fala z osobnym testem (audyt 8.2).
  3. Nie zmienia tego, że klienta ustawia się tylko na obiekcie głównym. Pod-obiekt dziedziczy klienta z gałęzi i nie da się mu z formularza dać innego. Jedyny wyjątek to zaznaczarka na karcie klienta.
  4. Nie łączy dwóch torów liczenia dostępu. Twoi ludzie widzą obiekty po drzewie, przedstawiciel klienta po naklejce klienta. To dwie różne matematyki i migracja z 07.08 wprost zabrania ich mieszania.
  5. Nie naprawia tego, że kasowanie klienta odpina obiekty. Usunięcie klienta z rejestru zdejmuje naklejkę ze wszystkich jego obiektów. Same obiekty zostają, ale wpadają do "Bez klienta".
  6. Nie daje filtru klienta w zleceniach, obecności i raportach. Zlecenie nie ma kolumny klienta. Dołożenie tam filtru to osobna pozycja, nieujęta w tej wycenie.
  7. Nie opiera niczego na rodzaju usługi. To wolny tekst bez słownika. Jeśli go chcesz jako oś, to osobna wycena.
  8. Nie naprawia zaznaczarki na karcie klienta. Ona nadal przełącza jeden wiersz naraz, mimo że podpowiedź obok mówi o dziedziczeniu przez korzeń gałęzi (audyt 9.8). Można to włączyć, bo komponent to potrafi, ale to osobna pozycja.
  9. Nie zmienia tego, że menedżer widzi mniej niż Ty. Notka o zakresie zostaje. Po dołożeniu licznika serwerowego liczba obiektów będzie wspólna, ale sama lista nadal pokazuje to, do czego dana osoba ma dostęp.

10Co to odblokowuje

Jeden join, którym dociągamy nazwę klienta do listy obiektów, jest tym samym joinem, którego brakuje w kilku innych miejscach. Najciekawsze jest to: przedstawiciel klienta nie widzi dziś nigdzie nazwy klienta, którego reprezentuje. Marta z Benefit Systemu loguje się i widzi obiekty, ale nigdzie nie ma napisu "Benefit System". Dane fizycznie przychodzą do aplikacji (useMyClientUser pobiera cały wiersz), tylko nie są zadeklarowane w typie i nikt ich nie wyświetla (audyt 6.2). Ta propozycja domyka to przy okazji, bo raz zrobiona ścieżka "obiekt zna swojego klienta" działa we wszystkich panelach.

Dalej z tego samego wynika: filtr klienta w zleceniach, kafelek statystyk per klient na pulpicie, raport godzin per klient i zestawienie do faktury. Żadna z tych rzeczy nie jest w tej wycenie, ale każda z nich staje się po tej zmianie zwykłą robotą, a nie przebudową.

Osobno, jednym zdaniem: wątek z 19.08 o 15:17, że klient mógłby kiedyś kupić aplikację na swoje pozostałe obiekty, jest decyzją handlową do podjęcia później. Ta propozycja jej nie przesądza i niczego pod nią nie zamyka, bo klient jako wpis w rejestrze da się w przyszłości powiązać z osobnym najemcą, a klient jako korzeń drzewa już nie.