Lokalna aplikacja w Pythonie, która pomaga znaleźć najtańszą kombinację pojedynczych badań i pakietów dostępnych w sklepie DIAG.pl.
Projekt pobiera aktualny katalog i ceny dla wybranego punktu pobrań, zapisuje je lokalnie w SQLite, a następnie rozwiązuje problem doboru najtańszego zestawu. Udostępnia prosty interfejs WWW oraz polski interfejs wiersza poleceń.
Important
To nieoficjalny projekt, niezwiązany z Diagnostyką S.A. Wyniki mają charakter informacyjny. Przed zakupem sprawdź aktualną cenę, dostępność, zakres pakietu i warunki badania bezpośrednio w serwisie DIAG.pl.
- wybór punktu pobrań po nazwie, mieście lub adresie,
- pobieranie aktualnych produktów, pakietów i cen z publicznego API DIAG.pl,
- wyszukiwanie badań w lokalnym katalogu,
- porównywanie zakupu badań osobno z dostępnymi pakietami,
- dokładna optymalizacja mniejszych list metodą programowania dynamicznego,
- opcjonalna optymalizacja ILP dla większych list,
- szybki tryb przybliżony, gdy dokładny solver nie jest dostępny,
- lokalna baza SQLite i brak obowiązkowych zależności zewnętrznych,
- polski interfejs WWW i CLI.
- Python 3.10 lub nowszy,
- połączenie z internetem podczas inicjalizacji i odświeżania danych,
- nowoczesna przeglądarka dla interfejsu webowego.
Podstawowa aplikacja korzysta wyłącznie z biblioteki standardowej Pythona. Pakiety numpy i scipy są opcjonalne — umożliwiają dokładną optymalizację ILP dla list przekraczających domyślny limit 20 badań.
git clone https://github.com/xraysight/diagpl-optimize.git
cd diagpl-optimize
python3 diagpl-optimize-gui.pyPrzy pierwszym uruchomieniu aplikacja pobierze listę punktów pobrań i otworzy stronę:
http://127.0.0.1:8765
Następnie:
- wyszukaj i wybierz punkt pobrań,
- poczekaj na pobranie katalogu i cen,
- dodaj badania do listy,
- wybierz „Oblicz najlepszy zestaw”.
Przydatne opcje:
python3 diagpl-optimize-gui.py --pomoc
python3 diagpl-optimize-gui.py --bez-przegladarki
python3 diagpl-optimize-gui.py --port 9000
python3 diagpl-optimize-gui.py --baza /ścieżka/do/bazy.sqliteSerwer domyślnie nasłuchuje wyłącznie na 127.0.0.1. Nie wystawiaj go publicznie - aplikacja nie ma uwierzytelniania i jest przeznaczona do użytku lokalnego.
python3 diagpl-optimize-cli.py inicjalizujpython3 diagpl-optimize-cli.py lista-punktow --szukaj "Gdańsk"Pierwsza kolumna wyniku zawiera identyfikator punktu potrzebny w następnym kroku.
python3 diagpl-optimize-cli.py pobierz --punkt 889python3 diagpl-optimize-cli.py optymalizuj \
"Hemoglobina glikowana (HbA1c)" \
"Wskaźnik insulinooporności HOMA-IR"Pozostałe komendy:
python3 diagpl-optimize-cli.py lista-badan
python3 diagpl-optimize-cli.py lista-pakietow
python3 diagpl-optimize-cli.py pakiet "Badania na nerki"
python3 diagpl-optimize-cli.py --pomocTryb automatyczny wybiera metodę zależnie od rozmiaru wejścia:
- do 20 badań - dokładne programowanie dynamiczne po maskach bitowych,
- powyżej 20 badań - dokładny solver ILP, jeśli dostępne są
numpyiscipy, - bez zależności ILP - szybki algorytm zachłanny z wyraźnym oznaczeniem, że wynik jest przybliżony.
Metodę można wskazać jawnie:
python3 diagpl-optimize-cli.py optymalizuj --algorytm dokladny "OB" "CRP, ilościowo"
python3 diagpl-optimize-cli.py optymalizuj --algorytm ilp "OB" "CRP, ilościowo"
python3 diagpl-optimize-cli.py optymalizuj --algorytm zachlanny "OB" "CRP, ilościowo"Instalacja opcjonalnych zależności w środowisku wirtualnym:
python3 -m venv .venv
. .venv/bin/activate
python3 -m pip install numpy scipyAplikacja tworzy obok skryptów plik diagpl-products.sqlite. Może również generować snapshoty diagpl-products-*.json. Pliki te są ignorowane przez Git, ponieważ zawierają dane pobrane w konkretnym momencie i można je odtworzyć z poziomu aplikacji.
Aby użyć innej lokalizacji bazy, podaj --baza PLIK.
Projekt używa modułu unittest z biblioteki standardowej:
python3 -m unittest discover -s tests -vSprawdzenie składni wszystkich modułów:
python3 -m py_compile \
diagpl_optimize_core.py \
diagpl-optimize-cli.py \
diagpl-optimize-gui.py \
tests/*.pyTe same testy są uruchamiane automatycznie przez GitHub Actions dla wspieranych wersji Pythona.
diagpl-optimize-cli.py cienki punkt wejścia CLI
diagpl-optimize-gui.py lokalny serwer WWW i interfejs użytkownika
diagpl_optimize_core.py API, SQLite i algorytmy optymalizacji
tests/ testy automatyczne
diagpl-optimize-PRD.md szczegółowe wymagania produktu
- ceny i dostępność zależą od punktu pobrań oraz chwili pobrania danych,
- dopasowanie badań opiera się na nazwie, skrócie adresu produktu i kodzie eLab,
- tryb zachłanny nie gwarantuje globalnie najtańszego wyniku,
- aplikacja nie uwzględnia indywidualnych kodów rabatowych ani wszystkich warunków handlowych,
- działanie zależy od niegwarantowanego, publicznego API używanego przez sklep DIAG.pl.
Projekt powstał w dużej mierze jako vibe coding. Zgłoszenia błędów i propozycje zmian są mile widziane. Przed wysłaniem pull requesta przeczytaj CONTRIBUTING.md i uruchom pełny zestaw testów.
Kod projektu jest udostępniany na warunkach licencji MIT.
