Inżynieria Oprogramowania: Generator Grafików

Oprogramowanie
Priorytet: Normalny Szkic

Zadanie 1: Projekt Systemu Grafikowego

Wstęp

Tworzenie harmonogramów pracy to koszmar każdego managera. Musi on pogodzić potrzeby biznesowe (sklep musi być otwarty), prawne (kodeks pracy) i ludzkie (urlopy, preferencje). Twoim zadaniem jest zaprojektowanie systemu, który zautomatyzuje ten proces.

Cel zadania

Opracowanie analityczne (Baza Danych + Logika) dla systemu generującego grafiki pracy dla sieci sklepów w galeriach handlowych.

Wymagania biznesowe

  1. Struktura pracy: Sklep czynny Pn-Sob 9:00-21:00 (12h), czasem Niedziele.
  2. Zasoby: Pracownicy na różnych etatach (1/1, 1/2).
  3. Ograniczenia prawne: Max 40h/tydzień, max 8h/dzień liczba godzin na dzień definiowana przy każdym pracowniu oddzielnie, 11h odpoczynku między zmianami.
  4. Funkcje: Automatyczna aktualizacja grafiku po zmianie danych (np. chorobowe).
  5. Dostęp: Panel WWW dla managera i pracowników (podgląd online).

Kroki do wykonania

1. Projekt Bazy Danych (Entity Relationship Diagram)

Zaprojektuj strukturę bazy danych (np. SQL). Wypisz tabele i kluczowe pola. Pamiętaj o relacjach wiele-do-wielu (np. Pracownik <-> Sklep).

Sugerowane encje:

  • Users (Pracownicy: imię, etat, max_godzin)
  • Shops (Miejsca pracy: nazwa, godziny_otwarcia)
  • Availability (Dostępność: user_id, data, od, do)
  • Schedule (Wynikowy grafik: user_id, shop_id, data, start, end)
-- Przykład (pseudokod SQL):
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    contract_type DECIMAL(3,2) -- np. 1.0, 0.5
);

-- Dokończ projektując tabelę 'shifts' lub 'schedule'

2. Logika Algorytmu (Pseudokod)

Jak automat ma obsadzić zmiany? To problem optymalizacyjny (Constraint Satisfaction Problem). Zapisz w punktach lub pseudokodzie algorytm przydzielania.

Przykładowe podejście (Greedy / Zachłanne):

  1. Dla każdego dnia w tygodniu:
  2. Podziel dzień na zmiany (np. Ranna 9-15, Popołudniowa 15-21).
  3. Pobierz listę dostępnych pracowników.
  4. Filtruj tych, którzy:
    • Mają "wolne" w tym czasie (Availability).
    • Nie przekroczyli etatu w tym tygodniu.
    • Mieli 11h przerwy od wczorajszej zmiany.
  5. Z dostępnych wybierz tego, któremu brakuje najwięcej do wyrobienia etatu (priorytet dla niedociążonych).
  6. Zapisz w tabeli Schedule.

3. Interfejs Użytkownika (Makieta/Opis)

Opisz widoki aplikacji.

  • Widok Managera: Kalendarz z "dziurami" (nieobsadzone zmiany) na czerwono. Formularz edycji dostępności, edycja pracowników i ich etatów, dostępności, miejsc pracy, edycja miejsc pracy, edycja godzin otwarcia i zamykania.
  • Widok Pracownika: Prosty kalendarz "Moje zmiany" + link do eksportu (np. Google Calendar).
  • Link publiczny: Token w URL (np. twojafirma.pl/grafik/uuid-sklepu), aby nie wymagać logowania do szybkiego podglądu.

Zadanie dla chętnych

Zaimplementuj prototyp algorytmu w dowolnym języku (Python/PHP/JS), który przyjmuje JSON z pracownikami i zwraca JSON z grafikiem na 1 dzień.