Διαχείριση Προσωπικού · Φάση 2

Παρακολούθηση μισθών — append-only ιστορικό, geofenced χτύπημα κάρτας, έτοιμα προς εισαγωγή timesheets

Ορίστε ωριαίες αμοιβές ανά μέλος προσωπικού, αφήστε τους να χτυπούν κάρτα από το κινητό με προαιρετική επαλήθευση τοποθεσίας και εξάγετε το timesheet σε CSV ή XLSX με ένα κλικ. Κάθε αλλαγή μισθού είναι versioned; κάθε clock event είναι append-only; κάθε διόρθωση αφήνει audit trail.

Τι είναι η παρακολούθηση μισθών στο Ordering.Tools;

Η παρακολούθηση μισθών μετατρέπει την ενότητα Προσωπικό στην πηγή αλήθειας για το τι κερδίζει κάθε μέλος της ομάδας και τι πραγματικά δούλεψε. Ορίστε ωριαία αμοιβή για κάθε εργαζόμενο; οι νέες αμοιβές αντικαθιστούν τις παλιές με ημερομηνίες effective-from έτσι το ιστορικό παραμένει καθαρό. Το προσωπικό χτυπά κάρτα από το mobile waiter shell — προαιρετικά επαληθευμένο με απόσταση Haversine έναντι των συντεταγμένων GPS του venue. Η συσσώρευση timesheet ενώνει χτυπημένα λεπτά × τη μισθοδοσία σε ισχύ τότε και παράγει CSV ή XLSX που μπορείτε να δώσετε στον λογιστή σας.

Όλος ο pipeline είναι append-only. Οι μισθοί είναι versioned (effectiveFrom / effectiveUntil) — δεν UPDATE-άρετε ποτέ μια γραμμή, την αντικαθιστάτε. Τα clock events είναι αμετάβλητα — διορθώσεις διευθυντή γράφουν νέα MANUAL_ADJUST γραμμή που αναφέρεται στο πρωτότυπο, το πρωτότυπο διατηρείται verbatim. Αυτό κάνει την άμυνα εργατικής διαφοράς τετριμμένη: κάθε αριθμός σε μισθοδοτική κατάσταση μπορεί να αναπαραχθεί από το audit trail μήνες αργότερα.

Γιατί αυτό είναι το επίπεδο μισθών που θα εμπιστευτεί ο λογιστής σας

Ένα νόμισμα ανά venue, χωρίς εκπλήξεις

Κάθε γραμμή μισθού αποθηκεύει cents στο νόμισμα του venue — χωρίς per-row currency στήλη, χωρίς exchange-rate drift, χωρίς σύγχυση όταν το προσωπικό μεταφέρεται μεταξύ venues. Πολυ-venue εργαζόμενος έχει πολλαπλές γραμμές μισθού, μία ανά venue, στο νόμισμα κάθε venue.

Geofenced clock-in (ποτέ μπλοκάρει)

Όταν το venue έχει lat/lng + μη μηδενικό clockInRadiusMeters, το clock event καταγράφει τις συντεταγμένες της συσκευής, υπολογίζει απόσταση Haversine προς το venue και σημαίνει geofenceOk. Δεν αρνούμαστε ποτέ το clock-in λόγω GPS drift — καταγράφουμε την αλήθεια και εμφανίζουμε σημαδεμένα events για έλεγχο διευθυντή.

Αναίρεση 5 λεπτών σε αλλαγές μισθού

Πληκτρολογήσατε 1500 αντί για 15.00; Έχετε 5 λεπτά για αναίρεση — η γραμμή διαγράφεται μόνο αν κανένα ClockEvent δεν έχει χρεωθεί ακόμα. Μετά τα 5 λεπτά ή όταν ένας μισθός αναφέρεται σε payroll run, ο μόνος δρόμος είναι μια διορθωτική αντικατάσταση με σημειώσεις.

Εξαγωγές CSV και XLSX για οποιοδήποτε payroll software

Το timesheet grid εξάγει σε CSV ή XLSX με στήλες userId, username, hourlyRate, hoursWorked, grossPay. Δώστε το στο software του λογιστή σας (Microinvest TRZ, Plus Minus, Ажур L) χωρίς χειροκίνητη επαναπληκτρολόγηση.

Πώς λειτουργεί η παρακολούθηση μισθών

1

Ορίστε ωριαίες αμοιβές ανά προσωπικό

Ανοίξτε Προσωπικό → Μισθοί και κλικ σε ένα κενό κελί Rate για κάθε μέλος ομάδας. Αποθηκεύστε. Η αποθήκευση δημιουργεί νέα γραμμή StaffWage, σημαίνει το effectiveUntil της προηγούμενης ενεργής γραμμής σε τώρα και γράφει StaffAuditLog καταχώρηση. Το νόμισμα ακολουθεί το venue.currency.

2

Το προσωπικό χτυπά κάρτα από το κινητό

Το mobile waiter shell δείχνει κουμπί Clock In/Out στην κορυφή. Ένα tap συλλαμβάνει συντεταγμένες συσκευής (αν χορηγήθηκε), υπολογίζει απόσταση Haversine προς το venue, καταγράφει το event και αυτο-συνδέει με την προγραμματισμένη βάρδια της ημέρας αν το startTime είναι σε 30 λεπτά.

3

Ο διευθυντής διορθώνει events όταν χρειάζεται

Αν ένας σερβιτόρος ξέχασε να χτυπήσει έξω, ανοίξτε Προσωπικό → Audit, βρείτε το event, κλικ Adjust. Το σύστημα δημιουργεί νέα γραμμή MANUAL_ADJUST που αναφέρεται στο πρωτότυπο (που διατηρείται). Reason code απαιτείται έτσι ο επόμενος αναθεωρητής καταλαβαίνει τι συνέβη.

4

Εξάγετε το timesheet

Ανοίξτε Προσωπικό → Timesheets, διαλέξτε εύρος ημερομηνιών (default: τελευταίος μήνας), προεπισκόπηση grid, πατήστε CSV ή XLSX. Το αρχείο κατεβαίνει με την περίοδο στο όνομα και είναι έτοιμο για εισαγωγή στο payroll software.

Παρακολούθηση μισθών — λεπτομέρειες

Append-only StaffWage με effective dates

Κάθε αλλαγή μισθού είναι νέα γραμμή. Η προηγούμενη ενεργή γραμμή λαμβάνει effectiveUntil στην ίδια $transaction. Η ανάγνωση του effective wage σε σημείο χρόνου είναι απλό WHERE effectiveFrom <= at AND (effectiveUntil IS NULL OR effectiveUntil > at).

  • Ποτέ UPDATE — πάντα supersede
  • Παράθυρο αναίρεσης 5 λεπτών για typos (όταν δεν έχει χρεωθεί ClockEvent)
  • Προαιρετικές role-specific αμοιβές (σερβιτόρος vs κουζίνα)
  • Πεδίο σημειώσεων αποτυπώνει γιατί άλλαξε η αμοιβή

Geofenced clock-in μέσω Haversine

Παραμετροποιήσιμο ανά venue: clockInRadiusMeters = 0 απενεργοποιεί τον έλεγχο. Αλλιώς, κάθε clock event συλλαμβάνει συντεταγμένες συσκευής, υπολογίζει great-circle απόσταση προς venue.lat/lng και αποθηκεύει geofenceOk = (distance <= radius). Ο έλεγχος δεν μπλοκάρει — σημαίνει.

  • Παραμετροποιήσιμη ακτίνα ανά venue (default 100 m)
  • Απενεργοποιημένο όταν radius = 0 — χρήσιμο για venues χωρίς ακριβείς συντεταγμένες
  • Αυτο-σύνδεση με σημερινή StaffShiftAssignment αν το startTime είναι σε 30 λεπτά
  • Προειδοποιεί τον διευθυντή με web-push όταν geofenceOk = false (χωρίς αυτο-μπλοκ)

Append-only ClockEvent με manual adjust

Κάθε clock event είναι αμετάβλητο μετά την εγγραφή. Διορθώσεις διευθυντή δημιουργούν νέα MANUAL_ADJUST γραμμή που δείχνει το πρωτότυπο μέσω notes + adjustReason. Το πρωτότυπο διατηρείται verbatim — η άμυνα εργατικής διαφοράς είναι ενσωματωμένη.

  • Είδη: CLOCK_IN, CLOCK_OUT, BREAK_START, BREAK_END
  • Πεδίο source: MOBILE | KIOSK | MANUAL_ADJUST
  • Συλλαμβάνει IP + user-agent + συντεταγμένες συσκευής για forensic έλεγχο
  • Οι διορθώσεις απαιτούν μη κενό reason code

Εξαγωγές timesheet CSV και XLSX

Ο aggregator ενώνει χτυπημένα λεπτά ανά προσωπικό × τον μισθό σε ισχύ στο τέλος περιόδου. Οι εξαγωγές περιλαμβάνουν userId, username, ωριαία αμοιβή, ώρες δουλειάς και ακαθάριστη πληρωμή. CSV είναι παγκόσμιο; XLSX χρησιμοποιεί την ίδια xlsx βιβλιοθήκη.

  • CSV με σωστό escaping για τιμές κόμμα/εισαγωγικά/νέα γραμμή
  • XLSX με native number cells (όχι strings) — οι λογιστές μπορούν να pivot
  • Filename ενσωματώνει την περίοδο (timesheet-YYYY-MM-DD-to-YYYY-MM-DD.ext)
  • Φίλτρο per-user όταν χρειάζεστε sheet ενός μέλους

Όπου η παρακολούθηση μισθών αξίζει τα χρήματά της

Μηνιαίος payroll χωρίς spreadsheet

Τέλος μήνα: ανοίξτε Προσωπικό → Timesheets, επιλέξτε τον προηγούμενο μήνα, πατήστε XLSX, δώστε το αρχείο στον λογιστή. Η προηγούμενη ροή Excel-from-paper-clock έπαιρνε 4 ώρες; αυτή παίρνει 30 δευτερόλεπτα.

Ξεχασμένο clock-out

Η Άννα έφυγε στις 23:00 αλλά ξέχασε να χτυπήσει έξω και το σύστημα αυτο-έκλεισε τη βάρδια στα μεσάνυχτα. Ανοίξτε το audit log, βρείτε το CLOCK_OUT-missing pattern, κλικ Adjust στο τελευταίο event, ορίστε σωστό χρόνο, προσθέστε reason 'ξέχασε να χτυπήσει — επιβεβαιωμένο από κάμερα ασφαλείας'. Νέα MANUAL_ADJUST γραμμή; το πρωτότυπο διατηρείται.

Το προσωπικό μεταφέρεται μεταξύ venues

Ο Πέτρος μεταφέρεται από London Pub στο Camden venue. Παίρνει νέα γραμμή StaffWage στο νόμισμα Camden (GBP και για τα δύο, αλλά το data shape υποστηρίζει cross-currency μετακινήσεις). Το ιστορικό London Pub παραμένει ακέραιο — κάθε υπολογισμός gross-pay έναντι London ωρών χρησιμοποιεί τον London μισθό.

Άμυνα εργατικής διαφοράς

Ένας σερβιτόρος αμφισβητεί μισθοδοτική κατάσταση 6 μηνών πριν. Ανοίξτε Προσωπικό → Audit, φιλτράρετε ανά user + εύρος ημερομηνιών. Κάθε αλλαγή μισθού, κάθε clock event, κάθε διόρθωση διευθυντή είναι εκεί με όνομα actor, timestamp και reason code. Επανυπολογίστε ακαθάριστο από raw events σε 30 δευτερόλεπτα.

Geofence σημαίνει απομακρυσμένο clock-in

Ένα μέλος προσωπικού χτυπά κάρτα από σπίτι 'επειδή περίμενε παράδοση'. Η σήμανση geofenceOk = false εμφανίζεται στο audit log. Ρωτάτε, επιβεβαιώνουν, αποδέχεστε άπαξ και προχωράτε.

Per-role πληρωμή (κουζίνα vs front-of-house)

Μέλος προσωπικού που καλύπτει και server και κουζίνα έχει δύο γραμμές StaffWage (μία με role = SERVER, μία με role = KITCHEN). Ο wage resolver επιλέγει τη σωστή αμοιβή με βάση το role της βάρδιας τη στιγμή που χρεώθηκε το clock event.

Ώρες, μισθοί και clock events που αντέχουν στον έλεγχο

Τα περισσότερα POS συστήματα εστιατορίων παρακολουθούν φιλοδωρήματα και πωλήσεις αλλά αντιμετωπίζουν τους μισθούς ως 'πρόβλημα κάποιου άλλου'. Η ενότητα Προσωπικό του Ordering.Tools κλείνει αυτό το χάσμα end-to-end: ωριαίες αμοιβές με effective dates, geofenced clock-in, append-only event ιστορικό, εξαγωγές CSV/XLSX. Το pipeline σχεδιάστηκε για τη στιγμή που ένας μισθός αμφισβητείται — μήνες αργότερα, με τον αρχικό διευθυντή μη διαθέσιμο — και η απάντηση πρέπει να είναι αναπαραγώγιμη από raw γραμμές.

Γιατί append-only κερδίζει το 'editable'

Ένα μέλος προσωπικού αμφισβητεί μισθοδοτική κατάσταση. Ο διευθυντής που όρισε την αμοιβή του έφυγε από την εταιρεία. Χωρίς append-only ιστορικό, έχετε μια γραμμή που δείχνει την τρέχουσα αμοιβή και κανέναν τρόπο να αποδείξετε ποια ήταν η αμοιβή στην ημέρα της αμφισβητούμενης βάρδιας. Με append-only, έχετε ζευγάρια effectiveFrom / effectiveUntil που αναπαράγουν οποιαδήποτε προηγούμενη ημέρα σε ένα query.

Geofenced clock-in: σήμανση, ποτέ μπλοκάρισμα

Indoor GPS drift μέσα σε κτίρια από μπετόν σημαίνει ότι ένα μέλος προσωπικού μπορεί να στέκεται στο μπαρ και να δείχνει 200 μέτρα μακριά. Το μπλοκάρισμα στο geofence εγγυάται ψευδώς αρνητικά που καταλήγουν στον διευθυντή στη μέση του rush. Σήμανση αντί για μπλοκάρισμα συλλαμβάνει την αλήθεια χωρίς να επιβραδύνει τις λειτουργίες.

Το νόμισμα ακολουθεί το venue, όχι τον εργαζόμενο

Multi-venue αλυσίδα που πληρώνει την ομάδα Λονδίνου σε GBP και την ομάδα Camden σε GBP δεν βλέπει τη διαφορά. Αλυσίδα με venue Σόφιας (BGN) και Λονδίνου (GBP) βλέπει — και το πιο καθαρό μοντέλο είναι μία γραμμή μισθού ανά (προσωπικό, venue) ζευγάρι, στο νόμισμα του venue.

Παρακολούθηση μισθών που θα εμπιστευτεί ο λογιστής σας

Ορίστε αμοιβές, αφήστε το προσωπικό να χτυπά κάρτα, εξάγετε σε CSV ή XLSX. Κάθε γραμμή append-only. Premium feature, περιλαμβάνεται στη Διαχείριση Προσωπικού.