Kiedy NIP staje się ceną oferty. Co można znaleźć w danych o zamówieniach publicznych?
Przetwarzanie dużych zbiorów danych ma jedną ciekawą cechę. Prędzej czy później trafia się na liczbę, przy której człowiek zatrzymuje się i myśli: chwila, coś tu się nie zgadza.
Tak było również podczas rozbudowy sekcji zamówień publicznych w Zielopolis. Przy pobieraniu wyników postępowań z lat 2024 i 2025 zaczęły pojawiać się oferty warte kilka, a nawet kilkadziesiąt miliardów złotych.
Można byłoby uznać, że to po prostu bardzo duże zamówienia. Problem w tym, że obok znajdowały się oferty opiewające na kilka czy kilkadziesiąt tysięcy złotych.
A jeszcze ciekawiej robiło się po spojrzeniu na identyfikator wykonawcy.
Oferta za ponad 5 miliardów złotych?
Jeden z takich przypadków znaleźliśmy w postępowaniu z 2025 roku.
W części 3 oficjalnego ogłoszenia widniała tylko jedna oferta. Jej:
najniższa cena: 5 210 527 727 zł,
najwyższa cena: 5 210 527 727 zł,
cena wybranej oferty: 5 210 527 727 zł.
Tymczasem wartość zawartej umowy wyniosła 198 720 zł.
Skąd więc wzięło się 5 210 527 727?
Wystarczy spojrzeć na identyfikator wybranego wykonawcy, DRG MedTek sp. z o.o.:
5210527727
Dokładnie ta sama sekwencja cyfr znalazła się w polach przeznaczonych na ceny ofert.
Nie trzeba zaawansowanej analizy statystycznej, żeby domyślić się, co prawdopodobnie się wydarzyło: podczas wprowadzania danych identyfikator wykonawcy trafił również do pól z kwotami.
Zobacz dane: postępowanie 2025-BZP-00294182-01 w Zielopolis oraz oryginalne ogłoszenie w e-Zamówieniach.
5 272 359 947 zł zamiast kilkudziesięciu tysięcy
Drugi przykład pochodzi z 2024 roku.
Dla jednej z części postępowania otrzymano dwie oferty:
najniższa: 77 256,05 zł,
najwyższa: 91 896,68 zł.
A cena oferty wykonawcy, któremu udzielono zamówienia?
5 272 359 947 zł.
Ponownie wystarczy porównać tę wartość z identyfikatorem zwycięskiego wykonawcy — Bruno Tassi Sp. z o.o.:
5272359947
Zbieżność jest dokładna.
Co więcej, wartość zawartej później umowy wynosi 93 300 zł, więc miliardowa „oferta” zdecydowanie nie pasuje do pozostałych informacji o tej części zamówienia.
Zobacz dane: postępowanie 2024-BZP-00501235-01 w Zielopolis oraz oryginalne ogłoszenie w e-Zamówieniach.
A może 56 miliardów?
Trzeci przypadek jest jeszcze bardziej efektowny.
W części 92 jednego z postępowań z 2025 roku otrzymano dwie oferty:
najniższa: 1080 zł,
najwyższa: 2160 zł.
Cena oferty wybranego wykonawcy została jednak zapisana jako:
56 617 601 243 zł.
Ponad 56 miliardów złotych.
I ponownie zagadka przestaje być zagadką, kiedy porównamy tę liczbę z identyfikatorem wykonawcy TART Medical Michał Lewczuk:
56617601243
Ta sama sekwencja cyfr.
Wartość zawartej później umowy wyniosła natomiast 1080 zł.
Zobacz dane: postępowanie 2025-BZP-00325266-01 w Zielopolis oraz oryginalne ogłoszenie w e-Zamówieniach.
Błąd człowieka, który dla komputera jest prawidłową liczbą
To właśnie jest najciekawsza część całej historii.
Z technicznego punktu widzenia z taką wartością wszystko może wyglądać poprawnie.
Pole przeznaczone na kwotę zawiera liczbę. Liczba może zostać zapisana w bazie. Nie jest pustym ciągiem, tekstem ani wartością w niepoprawnym formacie. Automatyczny import danych nie ma więc powodu zakończyć się błędem.
Dopiero kontekst pokazuje, że coś się nie zgadza.
Jeżeli najniższa oferta wynosi 77 tys. zł, najwyższa 92 tys. zł, wartość umowy 93 tys. zł, a zwycięska oferta nagle przekracza 5 miliardów złotych, warto się jej przyjrzeć.
Jeszcze silniejszym sygnałem jest identyczność tej liczby z identyfikatorem wykonawcy.
To już nie jest tylko statystycznie nietypowa wartość. Mamy bardzo konkretną wskazówkę dotyczącą jej pochodzenia.
Nie każdą anomalię można poprawić automatycznie
Podczas analizy trafiliśmy również na inne podejrzane wartości. Czasami kwota wyglądała tak, jak gdyby została pomnożona przez 100 albo 1000.
Takie przypadki są jednak znacznie trudniejsze.
Można podejrzewać przesunięty przecinek, niewłaściwą jednostkę albo dodatkowe zera. Ale samo podejrzenie to za mało, aby automatycznie zmieniać dane.
Dlatego przyjęliśmy prostą zasadę: nie poprawiamy wartości tylko dlatego, że wyglądają dziwnie.
W przypadku liczby identycznej z NIP-em, REGON-em lub innym identyfikatorem wykonawcy, w zestawieniu z pozostałymi kwotami postępowania, mamy bardzo mocną przesłankę wskazującą źródło błędu. Przy wartości 100 czy 1000 razy większej takiej pewności już nie ma.
Lepiej pozostawić podejrzaną wartość do dalszej weryfikacji niż „naprawić” prawidłową informację na podstawie domysłu.
NIP lub REGON zamiast ceny — czy wyłapaliśmy wszystko?
Trudno powiedzieć.
Dane o zamówieniach publicznych obejmują ogromną liczbę ogłoszeń, części postępowań, ofert i wykonawców. Błędy powstające podczas ręcznego wprowadzania informacji mogą natomiast przyjmować bardzo różne formy.
Stosunkowo łatwo znaleźć przypadek, w którym kwota jest identyczna z numerem NIP, REGON albo innym identyfikatorem wykonawcy. Znacznie trudniej wykryć pomyłkę, która nadal wygląda jak zupełnie prawdopodobna cena.
Paradoksalnie oferta za 5 czy 56 miliardów złotych może być więc łatwiejsza do wykrycia niż zwykła pomyłka o jedno zero.
Nie traktujemy znalezionych przypadków jako kompletnego katalogu błędów występujących w danych BZP. Są raczej przykładem tego, co zaczyna być widoczne podczas automatycznej analizy dużego zbioru danych i zestawiania ze sobą informacji, które normalnie znajdują się w różnych polach formularza.
Po co w ogóle o tym pisać?
Nie po to, żeby wytykać komuś pomyłkę.
Przy tysiącach formularzy i ręcznie wprowadzanych danych takie błędy po prostu się zdarzają. Znacznie ciekawsze jest to, że można je później wykryć dzięki zależnościom istniejącym w samych danych.
Cena może wyglądać absurdalnie. Ale dopiero informacja, że jest ona identyczna z identyfikatorem zwycięskiego wykonawcy, pozwala z dużym prawdopodobieństwem odpowiedzieć na pytanie, skąd właściwie się wzięła.
I właśnie takie drobiazgi wychodzą na jaw przy budowaniu dużej, połączonej bazy zamówień publicznych.
Czasem analiza danych zaczyna się od skomplikowanego zapytania do bazy.
A czasem od prostego:
„Zaraz… skąd tutaj 56 miliardów?”