Prawie 3 lata temu zastanawialiśmy się z klientem biuro obsługi podatkowej jak stworzyć system webowy, który pozwalałby klientom oraz pracownikom biura na przekazywanie danych istotnych z punktu widzenie prowadzenia firmy, a jednocześnie na tyle prostych, żeby nie trzeba było przechodzić kursu księgowości, żeby zrozumieć działanie takiego systemu.
Na początku został stworzony prosty rejestr klientów w którym każdy z nich może sobie sprawdzić podstawowe dane księgowe. System na start został wyposażony w możliwość wysyłania powiadomień, w których to zawarte są informacje na temat nadciągających nieuchronnie terminów płatności różnych rabowanych nam przez państwo składek. Sam je płacę, więc wiem, a latami miałem ustawioną przypominajkę z kalendarza google.
Wracając do meritum sprawy. Po kilkunastu miesiącach pracy pojawiła się w systemie, jedna z wielu, mała modyfikacja, polegająca na tym, że do firm typu „spółka” można było dołączyć dane wspólników, które mogli oni sobie sprawdzać samodzielnie.
A potem pojawił się błąd. Klient zgłasza, że nie można wprowadzić numeru NIP wspólnika. Zaczynam sprawdzać, raz, drugim trzeci. W kodzie nie ma NICZEGO co sugerowałoby jakiekolwiek operacje na nipie, a walidacja nigdy klientowi nie była potrzebna, bo i sam nip raczej służy do dodatkowej weryfikacji, a nie do czegoś istotnego. Co grosza, moje testy nie pokazywały występowania błędu!!! Wpisywałem prawdziwe, zmyślone i całkiem złe numery nip i nigdy nie napotkałem na opisywany problem. Najgorszym objawem było to że w NIP pojawiał się, niezależnie od wpisywanego numer: 4294967295. Zupełnie nie zwróciłem na tą liczbę uwagi, a powinienem, bo jest ona rozwiązaniem kłopotu.
Problem polegał na użytym polu w bazie danych MEDIUMINT który jest typem domyślnym w czasie deklaracji w mysql pola typu INT ma, bez znaku, taką właśnie wartość maksymalną.
Co ciekawe, przy konstrukcji bazy kilkanaście miesięcy wcześniej i definicji pola NIP na potrzeby firm, nie popełniłem tego błądu i wszystko działało prawidłowo.