
DAGMA
Inteligentny system układania harmonogramów pracy — lokalnie, bez serwera i bez chmury.
- PROJECT
- CODE-038
- STOS
- PYTHON · PYINSTALLER
- BAZA
- SQLITE (LOKALNIE)
- DYSTRYBUCJA
- JEDEN PLIK EXE
- DOKUMENTACJA
- README 34 kB
- STATUS
- UKOŃCZONY
- DATA
- 25 sierpnia 2026
Aplikacja desktopowa dla Windows, która automatycznie tworzy optymalne grafiki pracy z jednoczesnym uwzględnieniem prawa pracy, wymaganej obsady, dostępności pracowników, nieobecności, kompetencji, życzeń, sprawiedliwości obciążenia i decyzji operatora. Wszystkie dane zostają w pliku SQLite obok programu.
Komórki zapalają się w kolejności, w jakiej solver je przydziela — to nie jest ozdoba, tylko obraz przeszukiwania przestrzeni rozwiązań. Najpierw wchodzą przydziały wymuszone (jedyna osoba z uprawnieniami, zgłoszony urlop), potem reszta obsady, a na końcu wyrównanie obciążenia. Litery: R ranna, P popołudniowa, N nocna, U urlop.
PROBLEM
Układanie grafiku w arkuszu kalkulacyjnym kończy się zawsze tak samo: obsada się zgadza, ale ktoś ma jedenaście godzin przerwy zamiast jedenastu i pół, ktoś inny trzeci weekend z rzędu, a osoba z jedynymi uprawnieniami do konkretnego stanowiska akurat ma urlop.
Te warunki są ze sobą sprzeczne i nie da się ich sprawdzić wzrokiem. Człowiek układający grafik ręcznie nie łamie prawa pracy ze złej woli — łamie je, bo przy dwudziestu osobach i trzydziestu dniach liczba kombinacji przekracza możliwości sprawdzenia.
POMYSŁ
Solver, który traktuje przepisy jako twarde ograniczenia, a nie podpowiedzi. Grafik niezgodny z prawem pracy nie jest gorszym rozwiązaniem — jest rozwiązaniem odrzuconym.
Reszta warunków (życzenia, sprawiedliwość obciążenia, ciągłość między miesiącami) to funkcja celu: system szuka najlepszego układu w przestrzeni rozwiązań już dopuszczalnych.
PROJEKT
Fundamentem jest rozdzielenie trzech niezależnych warstw danych, które nigdy się nie nadpisują — dzięki temu zmiana obsady nie kasuje zgłoszonych nieobecności, a import nowego miesiąca nie niszczy historii.
Moduł prawa pracy obsługuje odpoczynki dobowe i tygodniowe, limity godzin, zmiany nachodzące na siebie oraz ciągłość na przełomie miesięcy — ostatnia zmiana grudnia wpływa na pierwszą zmianę stycznia i system musi o tym wiedzieć.
Osobno liczone są nadgodziny, osobno uprawnienia dostępu do danych osobowych. Kopie zapasowe robią się automatycznie przy zamknięciu programu — w katalogu backups leżą migawki opisane godziną i powodem.
Interfejs pokazuje nie tylko wynik, ale i powód: przy każdej zmianie widać, które ograniczenie ją wymusiło. To ta informacja zamienia narzędzie z czarnej skrzynki w argument w rozmowie — „nie mogę cię wpisać na tę zmianę, bo miałbyś dziewięć godzin odpoczynku” jest sprawdzalne, a „system tak ułożył” nie.
REALIZACJA
Aplikacja jest w pełni lokalna: nie wymaga internetu ani serwera, buduje się do jednego pliku EXE. Interfejs prowadzi operatora przez kolejne kroki, ale zostawia mu ostatnie słowo — solver proponuje, człowiek zatwierdza albo poprawia ręcznie, a system pilnuje, żeby ręczna poprawka nie złamała ograniczenia.
Dokumentacja liczy 34 kB i opisuje osiemnaście zagadnień, od struktury bazy po skróty klawiszowe. To nie jest przypadek: program, który układa grafik dla zespołu, musi dać się przekazać innej osobie bez rozmowy z autorem.
Osobnym zagadnieniem są zmiany nachodzące na siebie — nocka kończąca się o szóstej rano należy częściowo do dwóch dób i musi być rozliczona w obu. To jeden z tych fragmentów, w których naiwna implementacja działa przez jedenaście miesięcy w roku i wykłada się na przełomie roku kalendarzowego.
EFEKT
Grafik na miesiąc powstaje w kilka minut zamiast w kilka godzin, a co ważniejsze — jest sprawdzalny. Każde ograniczenie da się pokazać jako spełnione lub naruszone, więc dyskusja z pracownikiem przestaje być sporem o pamięć.
WNIOSKI
Najtrudniejsza nie była optymalizacja, tylko modelowanie przepisów. Zdanie z kodeksu pracy zamienia się w kilka warunków brzegowych, a te warunki bywają ze sobą sprzeczne w sytuacjach, o których przepis milczy. Tam, gdzie interpretacja jest niejednoznaczna, system pyta operatora zamiast decydować sam.


