Zgłoszenia pracowników

OficjalnyDarmowyNowy

Przycisk „!” w widokach Orbito do zgłaszania błędów, pomysłów i uwag przez pracowników — z nagraniem głosowym, zrzutem ekranu i panelem.

@core·Wiktor KoźmińskiBrak recenzji2 firmy z instalacjąAktualizacja 12 października 2026
Zainstaluj w Orbito Otwiera panel Orbito na karcie modułu
Licencja
Bezpłatny
Wersja
1.0.10
Kategoria
Komunikacja

Zgłoszenia pracowników — core/feedback 1.0.10

Moduł przyjmuje błędy, pomysły i uwagi. Przycisk ! pojawia się w lewym dolnym rogu widoków modułów emitujących hook views.modulePage. Nie wymaga zmian w głównym frontendzie Orbito.

Instalacja

  1. Zainstaluj paczkę core-feedback-1.0.10.zip jako pojedynczą instancję w firmie. Wymagane Node 22+ i SDK @orbito/api-lib 4.x (w tym History.list, Files, binarne body Core.fetch).
  2. Wdróż zmiany punktów rozszerzeń w modułach gospodarzy. W tym workspace są dodane do 15 widoków siedmiu modułów: orders, packing, products, shipping, invoicing, wfirma i consolidated. Same źródła i paczka nowego modułu nie aktualizują aktywnych instancji.
  3. W konfiguracji modułu ustaw sekret ai.apiKey oraz model transkrypcji: gpt-4o-mini-transcribe, gpt-4o-transcribe lub whisper-1. Domena api.openai.com musi być dozwolona przez platformę.
  4. Opcjonalnie włącz ai.analysisEnabled i wpisz ID modelu tekstowego dostępnego na Twoim koncie w Responses API. Analiza bez tych ustawień zwraca czytelny komunikat.
  5. Administratorzy z * lub użytkownicy z reports.manage mają dostęp do Ustawienia → Zgłoszenia pracowników. Każda metoda administracyjna niezależnie kontroluje uprawnienia. Dostęp do samej strony można dodatkowo ograniczyć w platformie. Każdy aktywny, zalogowany pracownik firmy może zgłaszać.

Strona /report zapewnia dodatkowe wejście do formularza przez nawigację modułu. W razie użycia tego wejścia zgłoszona strona to strona formularza. Kontekst pierwotnego problemu jest zachowany, gdy modal otwarto przez ! w widoku gospodarza.

Załączniki w panelu administratora 1.0.10

Naprawiono brak wyświetlania załączników zapisanych w zgłoszeniach.

Sekcja „Załączniki” pokazuje nazwy zapisanych plików, podglądy PNG/JPEG/WebP i przycisk „Pobierz” dla każdego pliku, także we wcześniejszych zgłoszeniach. PDF i TXT pobieramy po kliknięciu. Pobranie wymaga uprawnienia reports.manage i potwierdzonego powiązania pliku ze zgłoszeniem. Błąd pobrania pozostaje widoczny przy danym pliku; nie blokuje logów ani analizy. Brak plików pokazujemy jako „Brak załączników”. Zamknięcie panelu, zmiana zgłoszenia lub sesji zwalnia podglądy i blokuje spóźnione odpowiedzi.

Diagnostyka problemów systemowych 1.0.8

„Logi” i „Analiza AI” odświeżają także rejestr Ustawienia → Problemy. Przeglądarka odczytuje natywne API platformy w sesji i firmie administratora, z jego uprawnieniami. Powiązanie zamówienia pochodzi z hooka orders.references, kierowanego do zapisanej instancji. Porównujemy moduł, dokładną ścieżkę i ID instancji celu; nie rozpoznajemy dostawcy faktur po nazwie. Brak relacji lub dostępnego dostawcy referencji jest jawny.

Problemy tego zamówienia są uwzględniane także sprzed zakresu ±15 minut: wcześniejszy błąd integracji może wyjaśniać późniejszy błąd HTTP. Limit odczytu to 2000 wpisów rejestru i 50 dopasowanych problemów; osiągnięcie limitu oznaczamy jako niepełne dane. Starszy wpis bez instancji docelowej ma jawne niepotwierdzone dopasowanie, także w materiale dla AI. Nie przypisujemy mu zgadywanej instancji. Błąd dostępu do rejestru nie jest pokazywany jako brak problemów.

Serwer ponownie weryfikuje referencję i waliduje ograniczony zestaw pól. Snapshot pochodzi z klienta administratora, nie stanowi niezależnego poświadczenia serwera platformy. Jest niezaufanym materiałem dowodowym, tak jak opis i błędy przeglądarki. Rejestr zawiera bieżące wpisy, a nie pełną historię: usuniętych problemów nie odtworzymy. Powiązane problemy i błędy przeglądarki mają pierwszeństwo w limicie 300 wpisów analizy. Samo odczytanie problemu nie dowodzi, że jest przyczyną bieżącego błędu; zachowujemy czas, źródło i status.

Formularz zawiera trzy krótkie wskazówki: odtworzyć błąd przed zgłoszeniem, nie odświeżać przeglądarki i dołączyć przydatny zrzut ekranu.

Formularz zgłoszenia 1.0.4

Formularz pokazuje krótki wstęp bez adresu strony. Kontekst strony nadal jest zapisywany ze zgłoszeniem. Dolny pasek zawiera dodanie załącznika, mikrofon, zrzut ekranu z ikoną i wysyłkę. Załączniki oraz błędy nagrywania pozostają widoczne w formularzu. Przyciski używają wzorca Orbito z zaokrąglonym obrysem i gradientem akcji głównej; CSS jest lokalny i ograniczony do modułu zgłoszeń. Zmniejszono odstęp nad wstępem oraz wewnątrz pola opisu.

Panel administratora 1.0.7

Tabela pokazuje rodzaj, autora z datą, status i jeden przycisk „Otwórz”. Panel pokazuje autora, datę, opis, stronę zgłoszenia, ID firmy, powiązany ID zamówienia/obiektu, moduł i instancję. ID firmy pochodzi z uwierzytelnionej instancji serwera; SDK nie dostarcza nazwy firmy. Dane widoku i relację otrzymujemy z hooka, bez rozpoznawania modułów po stałych nazwach lub trasach. Starsze zgłoszenia pokazują już zapisany kontekst; brakującego powiązania nie zgadujemy. Dolne przyciski „Logi” i „Analiza AI” pokazują wyniki po kliknięciu, bez zakładek i dodatkowych formularzy.

Od 1.0.7 bufor błędów przeglądarki działa od załadowania hooka bieżącego widoku, przed otwarciem formularza. Zgłoszenie dołącza do 30 wpisów z ostatnich 15 minut tego widoku, po 1000 znaków. Zmiana strony lub sesji czyści bufor. Oprócz error, unhandledrejection i tekstowych argumentów console.error przechwytujemy nieudane wywołania własnego API platformy przez fetch/XHR: status HTTP oraz rozpoznany kod i komunikat błędu, także w odpowiedzi HTTP 200 z polem error. Zachowujemy oryginalną odpowiedź i przebieg operacji; niczego nie ponawiamy.

Nie zapisujemy treści żądań, nagłówków, dowolnych obiektów konsoli ani pełnych odpowiedzi API. Inspekcja JSON jest ograniczona do 8 KB; z większego błędu HTTP pozostaje status. Dane są maskowane w przeglądarce i ponownie na serwerze, a zapis odbywa się do zgłoszenia uwierzytelnionego autora. Błędy klienta mają pierwszeństwo w ograniczonej do 300 wpisów analizie AI. Starszych błędów konsoli, których poprzednia wersja nie przechwyciła, nie można odtworzyć. Brak przechwyconego błędu nie dowodzi poprawnego działania operacji. Logi serwera nadal wymagają dostawcy kontraktu diagnostics.logs.search.

Powiadomienia administratora 1.0.6

Hook views.modulePage uruchamia jeden nasłuch na kartę, niezależny od kontenera formularza. Nasłuch pozostaje aktywny przy nawigacji SPA także do ustawień lub innych stron. Zatrzymuje się po wylogowaniu, zmianie firmy/sesji, zamknięciu karty lub utracie uprawnienia reports.manage. Pracownicy bez tego uprawnienia nie pobierają licznika.

Co 15 sekund (oraz po powrocie do karty) pobieramy liczbę zgłoszeń ze statusem „Nowe”. Tytuł karty miga co sekundę: nazwa bieżącej strony naprzemiennie z licznikiem, np. (1) Nowe zgłoszenie — Produkty. Nowe zgłoszenie wyświetla powiadomienie i wyraźny dwutonowy sygnał (0,6 sekundy) generowany lokalnie, bez zależności od modułu pakowania. Dźwięk wymaga wcześniejszej interakcji z kartą; przy blokadzie autoplay nadal działa tytuł i komunikat. Web Locks i pamięć przeglądarki ograniczają wielokrotne dźwięki dla tego samego zgłoszenia w kilku kartach. Początkowa lista istniejących zgłoszeń nie odtwarza sygnału. Zmiana statusu zmniejsza licznik; samo otwarcie panelu go nie zeruje.

Ograniczenie platformy: po pełnym odświeżeniu strony, która nie emituje hooka, nasłuch nie wystartuje do czasu wejścia na stronę z hookiem albo własny widok feedback. Pełne uruchamianie na każdej stronie wymaga globalnego punktu rozszerzeń po stronie aplikacji. Ten moduł nie zmienia chronionego frontendu i nie wskazuje na sztywno innych modułów.

Poprawki 1.0.2

Modal i panel administratora dziedziczą style Orbito (Tabler), w tym motyw ciemny. Nie używają Shadow DOM ani własnej palety kolorów.

HTTP 429 jest rozróżniany według kodu odpowiedzi OpenAI: brak kwoty/salda lub limit wydatków wymaga działania administratora w koncie API; chwilowy limit żądań respektuje Retry-After. Nie ma automatycznych ponowień. Po błędzie nagranie pozostaje wyłącznie w pamięci formularza do pobrania lub ręcznej transkrypcji. Opuszczenie strony usuwa nagranie. Nieznany kod 429 nie jest przedstawiany jako potwierdzony brak środków.

Wersje gospodarzy z hookiem: Orders 2.18.13, Packing 1.2.0, Products 1.2.1, Shipping 2.14.1, Invoicing 0.15.6, wFirma 1.15.5, Consolidated 1.1.1. Sam push do Git nie aktualizuje widoków zainstalowanych instancji.

Pracownik

  • Wybór: błąd, pomysł, uwaga; opis do 10 000 znaków.
  • Mikrofon w dolnym pasku: do 2 minut/8 MB, start/stop, transkrypcja po stronie serwera, tekst do sprawdzenia i edycji. Nagranie nie jest przechowywane w module. Klucz API nie trafia do przeglądarki.
  • Zrzut ekranu przez getDisplayMedia: pracownik wybiera kartę/ekran w oknie przeglądarki, po czym obraz automatycznie trafia do załączników. Modal i przycisk są ukrywane na czas przechwycenia. Przeglądarka wymaga świadomego wyboru źródła; brak zgody nie blokuje formularza.
  • Do 5 plików PNG/JPEG/WebP/PDF/TXT, do 5 MB każdy, 15 MB łącznie. Podgląd obrazów i usuwanie przed wysłaniem. Na urządzeniach bez przechwytywania ekranu można wgrać plik.
  • Autor pochodzi z sesji i Core.getUser; czas dodania z zegara serwera. Czas wystąpienia problemu można wskazać osobno.
  • Zapisywana jest ścieżka strony bez query, fragmentu i poświadczeń. Moduł i ID jego instancji pochodzą z kontekstu hooka. Karty zamówienia/produktu przekazują także relację do własnego obiektu. Pakowanie przekazuje kosz lub sesję zbierania; nie zgaduje instancji właściciela zamówienia.
  • Po niepewnej odpowiedzi formularz zachowuje treść, blokuje ponowny zapis i pokazuje „Sprawdź zapis”. Idempotencję zapewnia unikalny indeks użytkownik + identyfikator żądania. Żadna niepewna operacja AI ani zapis nie jest automatycznie ponawiana.
  • Przycisk znika po odmontowaniu widoku gospodarza; zmiana firmy/sesji blokuje stare żądania i usuwa formularz.

Administrator i diagnostyka

Lista ma filtry i paginację po 25 zgłoszeń. Daty zapisujemy w UTC i wyświetlamy w Europe/Warsaw. Status zmienia się w wierszu listy.

Przycisk „Logi” pobiera historię z zakresu ±15 minut od problemu oraz zapisane błędy przeglądarki z bieżącego widoku (osobny zakres). History.list korzysta ze znanej relacji module/object/id/instanceId, a bez niej z modułu strony. Limit wynosi 1000 wpisów. Przycisk „Analiza AI” każdorazowo odświeża diagnostykę, w tym powiązane problemy systemowe, i analizuje ją dopiero na wyraźne kliknięcie.

Logi techniczne pochodzą z kontraktu diagnostics.logs.search. Zachowujemy wcześniej wskazaną instancję; przy jej braku wybieramy dostawcę tylko wtedy, gdy .providers zwróci dokładnie jedną instancję. Brak dostawcy, wiele kont lub błąd odkrywania są jawnie raportowane. Nigdy nie wybieramy pierwszego spośród kilku dostawców ani nie stosujemy zastępczego RPC.

AI dostaje ograniczoną projekcję opisu, dostępności źródeł i do 300 zdarzeń. Załączniki, imiona autorów i dowolne metadane nie są przekazywane. Rozpoznawalne sekrety, e-maile i numery są maskowane; to nie jest gwarancja pełnej anonimizacji tekstu. Responses używa store: false. Analiza rozdziela fakty, hipotezy, braki i dalsze kroki oraz wskazuje identyfikatory dowodów. Nie zmienia zamówień ani automatyzacji. Brak wpisu nie dowodzi niewykonania operacji; userId nie dowodzi czynności ręcznej. Odświeżenie diagnostyki unieważnia poprzednią analizę.

Kontrakty i niezależność

views.modulePage jest hookiem zbierającym wkłady widokowe. Gospodarz zna wyłącznie kontrakt i własną metodę viewExtensions. Nie zna kodu modułu zgłoszeń. Każda paczka gospodarza ma lokalny src/page-extensions.js. Zgłoszenia nie importują gospodarzy, nie czytają ich modeli i nie deklarują dependsOn. Własne żądania formularza trafiają do własnego, singletonowego modułu core/feedback; nie są komunikacją między modułami.

Pełna specyfikacja hooków: docs/contracts.md. Rejestr punktów osadzenia: docs/page-extension-consumers.json. W pełnym workspace wzorce i testy integracyjne są dodatkowo w katalogu module-contracts.

Weryfikacja i budowanie

npm ci
npm run build
npm test
npm run check
npm run pack:module

W workspace dodatkowo:

node --test --test-concurrency=1 --test-force-exit module-contracts/*.test.js

test/preview.cjs przyjmuje ORBITO_PREVIEW_THEME (lokalny arkusz CSS Orbito/Tabler) oraz opcjonalnie ORBITO_PREVIEW_FONTS (katalog fontów ikon) i uruchamia lokalny podgląd na 127.0.0.1:4199 z syntetycznymi danymi. Nie łączy się z Orbito ani OpenAI. Testy automatyczne korzystają z atrap infrastruktury, DOM i transportu hooków; nie potwierdzają wdrożenia ani działania prawdziwego klucza API. Wymagany odbiór na środowisku Orbito obejmuje instalację, formularz konfiguracji sekretu, nagranie i przechwycenie ekranu z rzeczywistymi uprawnieniami przeglądarki oraz historię konkretnego zamówienia.

Pliki i raporty nie mają automatycznej retencji. Przerwanie formularza po zapisie załącznika może pozostawić niepowiązany plik w prywatnym buckecie; nie kasujemy go po niepewnej odpowiedzi bazy, aby nie usunąć pliku użytego przez zapisane zgłoszenie.

Źródła API: transkrypcja OpenAI, Responses i generowanie tekstu.