Ζητήστε προσφορά

Case study

SMARTSHIFT AI

Αυτόματος προγραμματισμός βαρδιών με σεβασμό στην εργατική νομοθεσία

Πλατφόρμα διαχείρισης προσωπικού που παράγει εβδομαδιαίο πρόγραμμα βαρδιών με solver περιορισμών, τηρώντας 11ωρη ανάπαυση, μέγιστες ώρες και δεξιότητες ανά θέση.

Έτος
2026
Κλάδος
Υπηρεσίες
Τύπος έργου
Web εφαρμογή, Custom software
Στιγμιότυπο της ιστοσελίδας SMARTSHIFT AI

Η ανάγκη και η λύση

Η ανάγκη

Ο υπεύθυνος βάρδιας φτιάχνει το εβδομαδιαίο πρόγραμμα σε Excel και το διορθώνει με τηλεφωνήματα. Κάθε αλλαγή σπάει κάτι άλλο: κάποιος μένει με λιγότερες από έντεκα ώρες ανάπαυσης, κάποιος ξεπερνά τις σαράντα ώρες, μια βάρδια μένει χωρίς άτομο με τη σωστή δεξιότητα. Το πρόβλημα δεν είναι η έλλειψη εργαλείου. Είναι ότι η κατανομή βαρδιών είναι υπολογιστικά δύσκολο πρόβλημα που κανένας άνθρωπος δεν λύνει βέλτιστα με το μάτι.

Η λύση

Μοντελοποιήσαμε την ανάθεση βαρδιών ως πρόβλημα ικανοποίησης περιορισμών και το λύνουμε με τον CP-SAT solver του Google OR-Tools. Οι κανόνες της εργατικής νομοθεσίας μπαίνουν ως αυστηροί περιορισμοί, οπότε παράνομο πρόγραμμα δεν μπορεί καν να παραχθεί. Γύρω από τον solver χτίστηκε πλήρης πλατφόρμα: ανταλλαγές βαρδιών με αυτόματο έλεγχο, βαθμολόγηση αντικαταστατών με αιτιολόγηση, πρόβλεψη ζήτησης, κοστολόγηση μισθοδοσίας και ειδοποιήσεις σε πραγματικό χρόνο.

Λειτουργίες

  • Αυτόματη παραγωγή εβδομαδιαίου προγράμματος για όλο το προσωπικό
  • Αυστηροί περιορισμοί: 11ωρη ανάπαυση, μέγιστες εβδομαδιαίες ώρες, δεξιότητες ανά θέση
  • Χειροκίνητη διόρθωση με μεταφορά εργαζομένου πάνω στο κελί της βάρδιας
  • Κατάσταση προχείρου και δημοσίευση, με μαζική ειδοποίηση στους εμπλεκόμενους
  • Ανταλλαγές βαρδιών μεταξύ εργαζομένων, με αυτόματο έλεγχο πριν φτάσει το αίτημα
  • Βαθμολογημένη λίστα αντικαταστατών με γραπτή αιτιολόγηση ανά υποψήφιο
  • Πρόβλεψη αναγκών σε προσωπικό ανά ώρα, από ιστορικό οκτώ εβδομάδων
  • Κοστολόγηση μισθοδοσίας με προσαυξήσεις Κυριακής, νυχτερινών και υπερωριών
  • Δείκτης ικανοποίησης ανά εργαζόμενο με συγκεκριμένα ευρήματα
  • Αιτήματα αδειών και ρεπό, με ροή έγκρισης και ειδοποιήσεις
  • Ειδοποιήσεις σε πραγματικό χρόνο μέσω WebSocket, με ιστορικό και μέτρηση αδιάβαστων
  • Εξαγωγές: πρόγραμμα σε PDF, δεδομένα σε CSV, εβδομαδιαία ενημέρωση με email
  • Τρεις ρόλοι με διαφορετικό περιβάλλον: διαχειριστής, υπεύθυνος, εργαζόμενος
  • Υποστήριξη πολλών οργανισμών με διαχωρισμό δεδομένων

Τεχνολογίες

Next.js 15 (App Router)React 19TypeScriptTailwind CSSFastAPISQLAlchemy (async)Google OR-Tools (CP-SAT)WebSocketsJWT και bcryptReportLabDocker

Αποτέλεσμα

Τι άλλαξε

  • Πρόγραμμα που παραβιάζει την 11ωρη ανάπαυση ή τις μέγιστες ώρες δεν μπορεί να παραχθεί, γιατί οι κανόνες είναι αυστηροί περιορισμοί του solver.
  • Ο solver δεν επιστρέφει ποτέ «αδύνατο». Όταν δεν φτάνει το προσωπικό, δίνει μερική λύση και δείχνει πού λείπει.
  • Κάθε πρόταση αντικαταστάτη συνοδεύεται από τους λόγους της, οπότε ο υπεύθυνος αποφασίζει με στοιχεία και όχι με εμπιστοσύνη σε έναν αριθμό.
  • Η ανταλλαγή βάρδιας που θα έσπαγε κανόνα απορρίπτεται πριν φτάσει στον συνάδελφο, με γραπτή εξήγηση.

Γιατί το Excel δεν φτάνει

Η κατανομή βαρδιών μοιάζει με δουλειά γραμματείας και είναι υπολογιστικά από τα δυσκολότερα προβλήματα που συναντά μια επιχείρηση.

Δέκα εργαζόμενοι, τρεις βάρδιες, επτά ημέρες. Οι πιθανοί συνδυασμοί είναι αστρονομικοί, και πάνω τους πέφτουν κανόνες που αλληλοσυγκρούονται: ποιος μπορεί, ποιος ξέρει, ποιος δεν ξεπερνά τις ώρες του, ποιος έχει ήδη δουλέψει αργά χθες.

Ο άνθρωπος που το κάνει με το μάτι δεν βρίσκει κακή λύση. Βρίσκει μια λύση, και μετά την μπαλώνει με τηλεφωνήματα κάθε φορά που κάτι αλλάζει.

Πώς λύνεται πραγματικά

Το πρόβλημα μοντελοποιείται ως ικανοποίηση περιορισμών και λύνεται με τον CP-SAT solver του Google OR-Tools.

Για κάθε συνδυασμό εργαζομένου, ημέρας και βάρδιας υπάρχει μία δυαδική μεταβλητή: μπαίνει ή δεν μπαίνει. Πάνω σε αυτές μπαίνουν οι κανόνες:

  • Αν ο εργαζόμενος δήλωσε μη διαθέσιμος, η μεταβλητή μηδενίζεται.
  • Οι απαιτούμενες δεξιότητες της βάρδιας πρέπει να υπάρχουν στον εργαζόμενο.
  • Μία βάρδια ανά άτομο ανά ημέρα.
  • Μέγιστες εβδομαδιαίες ώρες ανά εργαζόμενο.
  • Για κάθε ζεύγος διαδοχικών βαρδιών με απόσταση μικρότερη των έντεκα ωρών, μπορεί να ισχύει το πολύ η μία.

Η νομοθεσία δεν είναι έλεγχος που τρέχει μετά. Είναι περιορισμός που κάνει το παράνομο πρόγραμμα μη παραγώγιμο.

Η απόφαση που κρατά το σύστημα χρήσιμο

Ένα σύστημα περιορισμών έχει έναν κίνδυνο: αν οι κανόνες δεν βγαίνουν, ο solver απαντά «αδύνατο» και ο χρήστης μένει με άδεια οθόνη.

Γι’ αυτό το ελάχιστο πλήθος ατόμων ανά βάρδια δεν είναι αυστηρός περιορισμός. Είναι επιθυμία με κόστος: μια μεταβλητή έλλειψης με βαρύ συντελεστή ποινής. Ο solver θα κάνει τα πάντα για να τη μηδενίσει, αλλά αν δεν φτάνει το προσωπικό θα δώσει το καλύτερο δυνατό πρόγραμμα και θα δείξει πού ακριβώς λείπει κόσμος.

Το μέγιστο πλήθος, αντίθετα, είναι αυστηρό. Δεν έχει νόημα να στριμώξεις περισσότερους από όσους χωράει η βάρδια.

Κάλυψη πρώτα, δικαιοσύνη αμέσως μετά

Η συνάρτηση κόστους ελαχιστοποιεί δύο πράγματα με σαφή προτεραιότητα: το συνολικό έλλειμμα κάλυψης με βαρύ συντελεστή, και τη διαφορά ανάμεσα στον εργαζόμενο με τις περισσότερες και σε αυτόν με τις λιγότερες βάρδιες.

Πρακτικά: πρώτα να καλυφθούν οι βάρδιες, και ανάμεσα σε δύο προγράμματα που καλύπτουν το ίδιο, να επιλεγεί αυτό που μοιράζει πιο ισότιμα.

Ο solver τρέχει με χρονικό όριο, ώστε το σύστημα να απαντά πάντα σε λογικό χρόνο αντί να ψάχνει επ’ άπειρον τη μαθηματικά τέλεια λύση.

Ο αντικαταστάτης που εξηγεί τον εαυτό του

Όταν κάποιος αρρωσταίνει, ο υπεύθυνος βλέπει καταταγμένη λίστα υποψηφίων.

Η βαθμολογία ξεκινά στο εκατό και εφαρμόζονται ποινές και μπόνους: βαριά ποινή αν λείπουν δεξιότητες ή αν ο υποψήφιος είναι μη διαθέσιμος, μικρότερη αν έχει ήδη βάρδια ή αν ξεπερνά ώρες, και μπόνους σε όποιον δεν έχει δουλέψει καθόλου τη συγκεκριμένη εβδομάδα.

Το σημαντικό δεν είναι ο αριθμός. Είναι ότι κάθε υποψήφιος επιστρέφει τους λόγους και τα προβλήματά του σε καθαρό κείμενο. Ο υπεύθυνος δεν καλείται να εμπιστευτεί ένα σκορ, βλέπει γιατί προέκυψε.

Η ίδια λογική με τη μηχανή ταιριάσματος στο CRM ΜΕΣΙΤΙΚΟΥ ΓΡΑΦΕΙΟΥ: όταν το σύστημα εξηγείται, χρησιμοποιείται.

Ανταλλαγές που κόβονται πριν ενοχλήσουν

Ο εργαζόμενος ζητά ανταλλαγή από συνάδελφο. Πριν το αίτημα φτάσει καν στον παραλήπτη, ελέγχεται αν η ανταλλαγή είναι νόμιμη και εφικτή: δεξιότητες, διαθεσιμότητα, υπέρβαση εβδομαδιαίου ορίου.

Αν δεν περνά, το αίτημα γεννιέται ήδη απορριμμένο με γραπτή εξήγηση. Κανείς δεν χάνει χρόνο σε συνεννόηση για κάτι που δεν μπορούσε να γίνει.

Το κόστος με ελληνικούς κανόνες

Η κοστολόγηση δεν είναι ώρες επί ωρομίσθιο. Υπολογίζει τις προσαυξήσεις που ισχύουν πραγματικά: Κυριακή, νυχτερινή απασχόληση, υπερωρίες πάνω από το εβδομαδιαίο όριο.

Παράγει ανάλυση ανά εργαζόμενο και προειδοποιήσεις υπερωριών με κλιμάκωση, ώστε ο υπεύθυνος να δει το πρόβλημα πριν κλείσει η μισθοδοσία και όχι μετά.

Οι λεπτομέρειες που δείχνουν ώριμο σύστημα

Οι ειδοποιήσεις γράφονται ταυτόχρονα στη βάση και προωθούνται μέσω WebSocket, με αυτόματη επανασύνδεση όταν πέσει η γραμμή. Το πρόγραμμα εξάγεται σε PDF με σωστά ελληνικά, και σε CSV που ανοίγει στο Excel χωρίς αλλοιωμένους χαρακτήρες.

Κάθε διαχειριστικό σημείο του API φρουρείται από έλεγχο ρόλου, και όλα τα ερωτήματα φιλτράρονται ανά οργανισμό. Ο εργαζόμενος και ο υπεύθυνος δεν βλέπουν απλώς διαφορετικά κουμπιά. Βλέπουν διαφορετική εφαρμογή.

Έχετε παρόμοια ανάγκη;

Αν αναγνωρίζετε την επιχείρησή σας σε αυτό που διαβάσατε, πείτε μας λίγα λόγια για το project σας.

WhatsApp