מה המערכת עושה

בעסק קטן, מסעדה או חנות או מספרה, עוקבים אחרי שעות העובדים בדף נייר או בקבוצת וואטסאפ. בסוף החודש מישהו מנסה לשחזר מי עבד מתי. שעון נוכחות ייעודי עולה אלפי שקלים, ואפליקציה ייעודית דורשת שכל עובד יתקין אותה, ייצור חשבון ויזכור סיסמה.

כאן צריך שני דברים בלבד: מדבקת NFC בעלות של שקלים בודדים, והדפדפן שכבר נמצא בטלפון של העובד. העובד נוגע במדבקה ורואה מסך אחד, כפתור אחד וטיימר רץ. נגיעה שנייה בסוף המשמרת סוגרת אותה. זה כל מה שהוא צריך ללמוד.

מסך העובד בנייד: רקע ירוק מלא, טיימר גדול שמראה שלוש שעות עבודה, שעת הכניסה מתחתיו וכפתור סיום עבודה
המסך היחיד שהעובד רואה. בלי התחברות, בלי תפריטים

למי זה מתאים

  • עסקים שעובדים במשמרות. מסעדות, בתי קפה, חנויות, מספרות ומכוני טיפוח. אנשים נכנסים ויוצאים כל היום, ואף אחד לא רושם.
  • עסקים שמעסיקים נוער או עובדים מתחלפים. כשמחזור העובדים גבוה, כל דקה של הדרכה על "איך מדווחים" היא דקה מבוזבזת.
  • עסקים עם יותר מעמדה אחת. מדבקה בכל נקודה, דוח אחד מרוכז.
  • עסקים שרוצים לסגור את הוויכוח על השעות. כשצריך שגם המנהל וגם העובד יראו את אותו מספר, ושיהיה ברור מי שינה מה ומתי.

מה מייחד אותה

העובד לא צריך לעשות כלום

הזהות שלו נקבעת פעם אחת: המנהל שולח קישור אישי בוואטסאפ, העובד פותח אותו מהטלפון ולוחץ פעם אחת. מאותו רגע הטלפון שלו מזוהה, והוא לעולם לא מקליד סיסמה. אין אפליקציה להתקין ואין חנות אפליקציות לעבור דרכה.

מסך ההצטרפות בנייד: שם העובד, שם העסק וכפתור אחד שכתוב עליו חבר את הטלפון הזה
ההצטרפות כולה: לחיצה אחת, פעם אחת בחיים

שקיפות במקום ויכוח

שום דבר במערכת לא נמחק. עובד שמסיים מושבת, מדבקה שאבדה מנוטרלת, רשומה שגויה מבוטלת. כולם שינויי סטטוס, והנתונים ההיסטוריים נשארים. כל תיקון שעות כותב שורת ביקורת עם הערך הקודם, הסיבה לתיקון (שדה חובה) ומי ביצע אותו. והעובד רואה בעצמו שהרשומה שלו תוקנה. זה לא תוצר לוואי של המבנה. זו הנקודה.

מסך השעות של העובד בנייד: סך השעות החודשי למעלה, ומתחתיו רשימת המשמרות לפי תאריך עם שעת התחלה, שעת סיום ומשך
העובד רואה את אותן שעות שהמנהל רואה, בלי לבקש

הזמן נמדד רק בשרת

השעון של הטלפון לא נכנס למשוואה, כך ששינוי השעה במכשיר לא משנה דבר. הטיימר הרץ מחושב מחדש בכל טיק מתוך הפרש מול שעון השרת ולא מקודם במונה, כדי שלשונית שהייתה ברקע חצי שעה לא תציג שעה שגויה כשחוזרים אליה. גם אזורי הזמן מתפרשים במסד: המנהל מקליד 08:00, והמסד מפרש את זה לפי אזור הזמן של העסק ולא לפי אזור הזמן של הדפדפן שממנו הוקלד.

מסך המנהל בנייד: מי נוכח עכשיו, שם העובדת עם זמן המשמרת הרץ, ומתחתיו מי שכבר סיים היום
מה שהמנהל רואה כשהוא פותח את הטלפון

מה כלול

  • הקמת העסק במערכת וחשבון מנהל על שמכם
  • הזנת העובדים, ושליחת קישור חיבור אישי לכל אחד בוואטסאפ
  • הגדרת המדבקות, כמה שתרצו, לכל עמדה או סניף
  • מסך "מי נוכח עכשיו" עם משמרות רצות בזמן אמת
  • דוח חודשי לפי עובד, עם ייצוא לאקסל
  • תיקון רשומות עם יומן ביקורת מלא
  • סגירה אוטומטית של משמרת שנשכחה פתוחה, מסומנת לבירור
  • העלאה לאוויר, והדרכה קצרה למנהל בלבד, כי לעובדים אין מה להדריך
דוח שעות חודשי בנייד: טבלה עם שם כל עובד, סך השעות שלו, מספר ימי העבודה, שורת סך הכל וכפתור ייצוא לאקסל
סוף החודש, בלי לשחזר כלום

איך זה עובד

  1. אתם מדביקים מדבקת NFC ליד הכניסה, וכותבים עליה את כתובת העמדה מתוך המערכת.
  2. אתם מזינים את העובדים ושולחים לכל אחד קישור חיבור בוואטסאפ.
  3. העובד פותח את הקישור פעם אחת מהטלפון שלו ולוחץ "חבר את הטלפון הזה".
  4. מכאן והלאה, נגיעה במדבקה פותחת משמרת ונגיעה נוספת סוגרת אותה.
  5. אתם רואים בכל רגע מי נוכח, ובסוף החודש מייצאים דוח מוכן.
מסך ניהול המדבקות: מדבקה פעילה בשם דלפק כניסה, הכתובת שנכתבת עליה, ומדריך קצר לכתיבת מדבקה חדשה
מסך המדבקות, כולל ההוראות לכתיבה על מדבקה חדשה

הטכנולוגיה שמאחוריה

המערכת נבנתה כאפליקציית ווב מלאה, לא כאוטומציה מודבקת:

בהיקף: 9 טבלאות, 36 פונקציות מסד, 8 מדיניות RLS, 14 מסכים, 20 נתיבי API, 19 מיגרציות, וכ-5,150 שורות TypeScript לצד כ-2,470 שורות SQL. אין עלות תשתית חוזרת מעבר לאירוח.

שלוש החלטות שקובעות את ההתנהגות

  • הבידוד בין עסקים נאכף במסד, לא באפליקציה. כל שאילתה עוברת דרך RLS ופונקציות שגוזרות את זהות העסק מהטוקן עצמו. גם אם שכבת האפליקציה הייתה נפרצת לחלוטין, מנהל של עסק אחד לא היה רואה נתונים של עסק אחר. זה נבדק בפועל: התחברות כמנהל של עסק שני וניסיון לגשת לכל רשומה החזירו תוצאה ריקה.
  • דיווח הוא פעולה אטומית אחת. פונקציית Postgres יחידה, ואינדקס ייחודי שמבטיח ברמת המסד משמרת פתוחה אחת לכל עובד, ולא בדיקה בקוד שאפשר לעקוף בלחיצה כפולה.
  • משמרת שנשכחה פתוחה לא נשארת תלויה. היא נסגרת אוטומטית ומסומנת לבירור, במקום להמציא שעות ובמקום לנעול את העובד מחוץ למערכת.

באגים שנמצאו רק במציאות

שלושה דברים לא התגלו בפיתוח אלא בשימוש, ותוקנו. לחיצה כפולה מהירה פתחה וסגרה משמרת בתוך פחות משתי שניות, כי הכפתור מתחלף במקומו. קישור ההצטרפות החד-פעמי נשרף לפני שהעובד בכלל לחץ עליו, כי תצוגה מקדימה של וואטסאפ צרכה אותו. ומשמרת שנשכחה פתוחה נעלה את העובד מחוץ למערכת. כל אחד מהם נפתר בשורש, לא בעקיפה.

מה צריך מכם כדי להתחיל

  • רשימת העובדים: שם, טלפון ותפקיד
  • החלטה איפה תשב כל מדבקה
  • מדבקות NFC ריקות, ואפליקציית כתיבה חינמית בטלפון (כמה שקלים למדבקה)
  • אזור הזמן ושעות הפעילות של העסק