Każde zdarzenie ma autora. Nawet jeśli to maszyna.
Aplikacja wiązała dokumenty z XL i podpisywała to nazwiskiem osoby, która akurat otworzyła kartę. Naprawa skończyła się kontem numer 0 i jedną zasadą.
Pewnego dnia dowiedziałem się, że ktoś zgłosił się do księgowości z pretensją. W uwagach przy dokumencie stało, że to on powiązał go z fakturą w XL. A on niczego nie wiązał. Otworzył tylko kartę.
Miał rację. Aplikacja do obiegu dokumentów, którą buduję, sama robi kilka rzeczy: wiąże dokumenty z fakturami w Comarch ERP XL, dopisuje atrybuty, synchronizuje dane. Każda taka czynność zostawia wpis w historii karty. Tyle że w pierwszej wersji wpis podpisywał się nazwiskiem tego, kto akurat był przy karcie, gdy system zrobił swoje. Maszyna działała, a odpowiedzialność spadała na człowieka, który przechodził obok.
Poprawka wyglądała na prostą: wpisy robione przez aplikację podpisuję jako „system”. Na części baz zadziałało. Na innych w logach zaczął się powtarzać błąd sterownika SQL, z którego nie bardzo było wiadomo, o co mu chodzi. Okazało się, że tam tabela historii pilnuje, żeby autor wpisu był prawdziwym kontem. „System” takim kontem nie był, więc baza odrzucała wpisy po cichu. Kolejna poprawka nie ruszyła sedna i błąd wracał przy każdym otwarciu karty.
Skończyło się na tym, od czego trzeba było zacząć. System dostał własne konto, z numerem 0. Nie jako obejście, tylko jako przyznanie, że w tej aplikacji działa jeszcze jeden aktor. Skoro robi rzeczy, musi się pod nimi podpisywać sam. Od tej chwili wpisy się zapisują, a w historii od razu widać, co zrobił człowiek, a co maszyna.
Ta sama zasada uderzyła potem z drugiej strony. W pierwszych wersjach obiegiem faktur KSeF dało się sterować z XL: zmiana atrybutu na dokumencie przypisywała go konkretnej osobie z konkretnym statusem. Aplikacja umiała odczytać, kto ma dokument i w jakim statusie, ale nie wiedziała, kto tę zmianę zrobił. Wpisanie w historii, że zrobił to system, byłoby nieprawdą. Wpisanie kogokolwiek innego też. Zostawało zdarzenie bez autora.
Dlatego obiegiem steruje teraz aplikacja. Atrybuty w XL mogą obieg tylko rozpocząć. Gdy dokument jest już w obiegu, zmiana tych atrybutów w XL zostaje cofnięta, a aplikacja zapisuje w historii, że to zrobiła. Zmiany robi się w aplikacji, gdzie zawsze wiadomo, kto je zrobił.
Przy poprzedniej notatce pisałem, że błędu nie wolno ukrywać, tylko poprawiać, podając przyczynę. Tu jest jego bliźniak: zdarzenie bez autora jest błędem, nawet jeśli wszystko inne się zgadza. Myślę o tym coraz częściej, bo do firmowych systemów wchodzą agenci AI. Pytanie, czyim nazwiskiem podpiszą swoje działania, wróci szybciej, niż się wydaje. U mnie odpowiedzią było konto numer 0. I decyzja, że tam, gdzie autora nie da się ustalić, zmiany po prostu nie ma.