דלג לתוכן הראשי

חישוב זמן השבתת נכס (Asset Downtime)

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


סקירה כללית

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

המערכת משתמשת בשלושה שדות עיקריים לניהול זמן השבתה:

  1. זמן השבתה כברירת מחדל (Default Downtime): מחושב אוטומטית על סמך חותמות זמן.
  2. זמן השבתה ידני (Manual Downtime): עקיפות (overrides) המסופקות על ידי המשתמש.
  3. זמן השבתה אפקטיבי (Effective Downtime): הערך הסופי המשמש לדשבורדים ודוחות.

לוגיקה מפורטת

1. זמן השבתה כברירת מחדל (default_downtime_min)

זמן השבתה כברירת מחדל הוא משך הזמן הגולמי של הכרטיס בדקות.

  • כרטיסים בביצוע (In-Progress): אם כרטיס פתוח, זמן ההשבתה מחושב דינמית כזמן שחלף מזמן התחלת השבר (breakdown.start_time) ועד עכשיו. אם breakdown.start_time חסר, המערכת משתמשת בזמן יצירת הכרטיס.
  • כרטיסים שהושלמו (Completed): ברגע שלכרטיס יש חותמת זמן של סיום (ended), זמן ההשבתה "קופא" כהפרש בין זמן הסיום לזמן התחלת השבר (או זמן היצירה).

נוסחה:

Default Downtime = (זמן סיום או עכשיו) - זמן התחלת שבר (או זמן יצירה)

2. זמן השבתה ידני (manual_downtime_min)

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

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

3. זמן השבתה אפקטיבי (effective_downtime_min)

זהו "מקור האמת" לכל הדיווחים. המערכת קובעת ערך זה לפי סדר עדיפויות ספציפי:

  1. עקיפות ידניות: אם הוגדר manual_downtime_min, הוא תמיד ישמש כזמן ההשבתה האפקטיבי.
  2. חישוב ברירת מחדל: אם לא קיים ערך ידני, משתמשים ב-default_downtime_min.
  3. נתונים ישנים (Legacy): עבור כרטיסים ישנים מאוד, המערכת עשויה להשתמש בשדה downtime_min הישן.

מימוש טכני

שמירת נתונים

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

  • כרטיסים פתוחים: הבקאנד מחשב את effective_downtime_min תוך כדי תנועה בעת קריאת הכרטיס. נתון זה אינו נשמר בבסיס הנתונים כדי למנוע נתונים לא עדכניים (אלא אם הוגדר ערך ידני).
  • כרטיסים סגורים: כאשר כרטיס מעודכן עם חותמת זמן של סיום (ended), המערכת מחשבת את ה-default_downtime_min וה-effective_downtime_min הסופיים ושומרת אותם בבסיס הנתונים. פעולה זו "מקפיאה" את הנתונים לצורך דוחות היסטוריים.

קבצי קוד רלוונטיים

  • src/db/ticket-mapper.js: מכיל את לוגיקת המיפוי והחישוב הדינמי לתגובות ה-API.
  • src/db/tickets.js: מממש את לוגיקת השמירה בזמן יצירת ועדכון כרטיסים.

דוגמאות

דוגמה 1: שבר סטנדרטי

  1. יצירת כרטיס: 1 בינואר, 10:00 בבוקר.
  2. זמן נוכחי: 1 בינואר, 10:30 בבוקר.
    • זמן השבתה כברירת מחדל: 30 דקות.
    • זמן השבתה אפקטיבי: 30 דקות.
  3. סיום כרטיס: 1 בינואר, 11:00 בבוקר.
    • זמן השבתה כברירת מחדל שנשמר: 60 דקות.
    • זמן השבתה אפקטיבי שנשמר: 60 דקות.

דוגמה 2: עקיפה ידנית

  1. יצירת כרטיס: 1 בינואר, 10:00 בבוקר.
  2. סיום כרטיס: 1 בינואר, 11:00 בבוקר (משך מחושב: 60 דקות).
  3. קלט משתמש: המשתמש מגדיר זמן השבתה ידני של 45 דקות כי המכונה עבדה חלקית.
    • זמן השבתה כברירת מחדל: 60 דקות (נשמר לעיון).
    • זמן השבתה ידני: 45 דקות.
    • זמן השבתה אפקטיבי: 45 דקות.

דוגמה 3: השבתה קיימת מראש (שימוש בזמן התחלת שבר)

  1. תקלה במכונה: 08:00 בבוקר.
  2. יצירת כרטיס: 09:00 בבוקר (זמן התחלת השבר מעודכן ידנית ל-08:00 בבוקר).
  3. סיום כרטיס: 10:00 בבוקר.
    • זמן השבתה כברירת מחדל: 120 דקות (10:00 - 08:00).
    • זמן השבתה אפקטיבי: 120 דקות.

(הערה: משתמשים עדיין יכולים להשתמש ב-manual_downtime_min כדי לעקוף נתונים אם הם מעדיפים שיטה זו, אך הגדרת breakdown.start_time מתאימה את חישוב ברירת המחדל באופן טבעי).