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

מפת הטבלאות והקשרים למתקדמים

מפה נבחרת של טבלאות הליבה, השדות והקשרים, עם בדיקות לפני JOIN.

נכתב על ידי Alex Merkin

המספור תואם לתיקיות: בתיקייה 01 מופיעות השאלות 01-01, 01-02 וכן הלאה. שלוש שאלות ההתחלה הן 01-05, 01-08 ו־01-02; מקור ערכי פילטר התהליך הוא 01-20. מזהי OBP ושמות קובצי SQL נשארים קבועים.

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

מה נבדק ומה עדיין צריך לבדוק?

שבע טבלאות מקור מופיעות ב־SQL השמור של החבילה. שש טבלאות או תצוגות עזר מגיעות מתבניות אנליטיקה מתועדות ודורשות בדיקה בסביבת היעד. הקשר formdata → form מופיע ב־05-01–05-02; שאר הקשרים לא הורצו כאן כבדיקות JOIN בסביבת היעד. יש לבדוק זהות, סוגים, ייחודיות, שיעור מפתחות חסרים וריבוי התאמות. זו אינה סכימה מלאה של מסד הנתונים.

workorder

רשומה אחת: פקודת עבודה אחת.

בסיס התיעוד: מקור שמשמש בשאלות 01-01, 01-02, 01-03, 01-04, 01-05, 01-06, 01-07, 01-08, 01-09, 01-10, 01-11, 01-12, 06-02, 06-03, 02-12, 01-13, 01-14, 01-15, 01-16, 01-17, 01-18, 01-19, 01-20.

  • _id — מזהה פנימי של הפקודה בסיס השדה: repository_documented_not_tenant_tested.

  • workordernumber — מספר הפקודה שמוצג למשתמש בסיס השדה: saved_sql_definition_read.

  • sku — מק״ט הפקודה בסיס השדה: saved_sql_definition_read.

  • workflowname — שם התהליך שנשמר בפקודה בסיס השדה: saved_sql_definition_read.

  • statustype — קוד מצב; בשאלות מסירים את הקידומת WO.STATUSES. בסיס השדה: saved_sql_definition_read.

  • statusname — שם התצוגה של המצב בסיס השדה: saved_sql_definition_read.

  • createdat — מועד יצירת הפקודה יחידה: timestamp. בסיס השדה: saved_sql_definition_read.

  • releasedat — מועד שחרור הפקודה יחידה: timestamp. בסיס השדה: saved_sql_definition_read.

  • start — מועד תחילת העבודה יחידה: timestamp. בסיס השדה: saved_sql_definition_read.

  • end — מועד סיום הפקודה יחידה: timestamp. בסיס השדה: saved_sql_definition_read.

  • expecteddate — מועד היעד יחידה: timestamp. בסיס השדה: saved_sql_definition_read.

  • quantity — כמות מתוכננת יחידה: item_dependent. בסיס השדה: saved_sql_definition_read.

  • validquantity — כמות תקינה מדווחת יחידה: item_dependent. בסיס השדה: saved_sql_definition_read.

  • invalidquantity — כמות פסולה מדווחת יחידה: item_dependent. בסיס השדה: saved_sql_definition_read.

  • progress — ערך התקדמות כפי שנשמר; אין להניח סולם אחוזים בסיס השדה: saved_sql_definition_read.

  • deletedat — סימון מחיקה; ברשומות הפעילות הערך NULL יחידה: timestamp. בסיס השדה: saved_sql_definition_read.

workflowsessionitem

רשומה אחת: ריצה של תהליך על יחידה, אצווה או כמות.

בסיס התיעוד: מקור שמשמש בשאלות 02-01, 02-02, 02-03, 02-04, 02-05, 02-06, 02-07, 02-08, 02-09, 02-10, 02-11, 06-01, 02-13, 06-05, 02-14.

  • _id — מזהה פנימי של הריצה בסיס השדה: saved_sql_definition_read.

  • workorderid — מזהה הפקודה המקושרת בסיס השדה: repository_documented_not_tenant_tested.

  • workflowid — מזהה גרסת התהליך המקושרת בסיס השדה: repository_documented_not_tenant_tested.

  • workflowname — שם התהליך שנשמר בריצה בסיס השדה: saved_sql_definition_read.

  • partsku — מק״ט הריצה בסיס השדה: saved_sql_definition_read.

  • serials — מערך מספרים סידוריים; יכול להיות ריק או לכלול כמה ערכים בסיס השדה: repository_documented_not_tenant_tested.

  • userid — מזהה המשתמש המשויך לפתיחת הריצה לפי תבנית הדוח בסיס השדה: repository_documented_not_tenant_tested.

  • status — קוד מצב כגון WF.NEW או WF.FINISH בסיס השדה: saved_sql_definition_read.

  • created — מועד יצירת הריצה יחידה: timestamp. בסיס השדה: saved_sql_definition_read.

  • start — תחילת הריצה יחידה: timestamp. בסיס השדה: saved_sql_definition_read.

  • end — סיום הריצה יחידה: timestamp. בסיס השדה: saved_sql_definition_read.

  • nettimespent — זמן נטו רשום יחידה: seconds. בסיס השדה: saved_sql_definition_read.

  • quantity — הכמות הרשומה בריצה יחידה: item_dependent. בסיס השדה: saved_sql_definition_read.

  • nextnodename — שם השלב הבא שנרשם בסיס השדה: saved_sql_definition_read.

  • nextchaptername — שם הפרק הבא שנרשם בסיס השדה: saved_sql_definition_read.

  • progress — ערך התקדמות רשום בסיס השדה: saved_sql_definition_read.

  • deletedat — סימון מחיקה יחידה: timestamp. בסיס השדה: saved_sql_definition_read.

stock

רשומה אחת: רשומת מלאי; אינה בהכרח יחידה אחת.

בסיס התיעוד: מקור שמשמש בשאלות 03-01, 03-02, 03-03, 03-04, 03-05, 03-06, 03-07, 03-08, 03-09, 06-04.

  • _id — מזהה רשומת המלאי בסיס השדה: repository_documented_not_tenant_tested.

  • workflowsessionitemid — מזהה ריצת הייצור המקושרת בסיס השדה: saved_sql_definition_read.

  • workordernumber — מספר פקודה שנשמר ברשומה; אינו מפתח פנימי בסיס השדה: saved_sql_definition_read.

  • sku — מק״ט בסיס השדה: saved_sql_definition_read.

  • serial — מספר סידורי; עשוי להיות חסר בסיס השדה: saved_sql_definition_read.

  • skurev — גרסת פריט, ולא גרסת תהליך בסיס השדה: saved_sql_definition_read.

  • skudesc — תיאור הפריט שנשמר ברשומה בסיס השדה: saved_sql_definition_read.

  • stockstatus — מצב המלאי בסיס השדה: saved_sql_definition_read.

  • productionstatus — מצב הייצור של הרשומה בסיס השדה: saved_sql_definition_read.

  • quantity — כמות ברשומה יחידה: item_dependent. בסיס השדה: saved_sql_definition_read.

  • availablequantity — כמות זמינה כפי שנרשמה יחידה: item_dependent. בסיס השדה: saved_sql_definition_read.

  • kitstatus — סימון שלמות קיט; אינו רשימת רכיבים בסיס השדה: saved_sql_definition_read.

  • isserial — סימון ניהול סידורי בסיס השדה: saved_sql_definition_read.

  • created — מועד יצירת הרשומה יחידה: timestamp. בסיס השדה: saved_sql_definition_read.

  • source — מקור הרשומה כפי שנשמר בסיס השדה: saved_sql_definition_read.

  • deletedat — סימון מחיקה יחידה: timestamp. בסיס השדה: saved_sql_definition_read.

timelogreport

רשומה אחת: דיווח זמן אחד; עשוי להיות קשור לכמה ריצות.

בסיס התיעוד: מקור שמשמש בשאלות 04-01, 04-02, 04-03, 04-04, 04-05, 04-06, 04-07, 04-08, 04-09, 04-10, 06-06.

  • _id — מזהה הדיווח בסיס השדה: repository_documented_not_tenant_tested.

  • workorderid — מזהה פקודה מקושרת בסיס השדה: repository_documented_not_tenant_tested.

  • workordernumber — מספר פקודה לצפייה בסיס השדה: saved_sql_definition_read.

  • workflowid — מזהה גרסת תהליך בסיס השדה: repository_documented_not_tenant_tested.

  • userid — מזהה המשתמש שבדיווח בסיס השדה: repository_documented_not_tenant_tested.

  • sessionids — מערך מזהי ריצות; אין להתייחס אליו כמזהה יחיד בסיס השדה: saved_sql_definition_read.

  • sku — מק״ט רשום בסיס השדה: saved_sql_definition_read.

  • chaptername — שם פרק כפי שנשמר בסיס השדה: saved_sql_definition_read.

  • start — תחילת הדיווח יחידה: timestamp. בסיס השדה: saved_sql_definition_read.

  • end — סיום הדיווח; NULL משמש לזיהוי טיימר פתוח יחידה: timestamp. בסיס השדה: saved_sql_definition_read.

  • firstend — מועד הסיום הראשון שנשמר יחידה: timestamp. בסיס השדה: saved_sql_definition_read.

  • duration — משך זמן רשום יחידה: milliseconds. בסיס השדה: saved_sql_definition_read.

  • recordtype — סוג הרישום בסיס השדה: saved_sql_definition_read.

  • type — סוג העבודה כפי שנרשם בסיס השדה: saved_sql_definition_read.

  • managerapprovalstatus — מצב אישור מנהל בסיס השדה: saved_sql_definition_read.

  • deletedat — סימון מחיקה יחידה: timestamp. בסיס השדה: saved_sql_definition_read.

formdata

רשומה אחת: טופס שנשמר, עם הקשר אם נרשם.

בסיס התיעוד: מקור שמשמש בשאלות 05-01, 05-02.

  • _id — מזהה הרשומה שנשמרה, ולא מזהה הגדרת הטופס בסיס השדה: repository_documented_not_tenant_tested.

  • formid — מזהה הגדרת הטופס בסיס השדה: saved_sql_definition_read.

  • sessionid — מזהה ריצה בהקשר הטופס; שם השדה כאן שונה מזה שבמלאי בסיס השדה: repository_documented_not_tenant_tested.

  • workorderid — מזהה פקודה בהקשר הטופס בסיס השדה: repository_documented_not_tenant_tested.

  • workordernumber — מספר פקודה לצפייה בסיס השדה: repository_documented_not_tenant_tested.

  • stringnumber — מספר הרשומה לצפייה בסיס השדה: repository_documented_not_tenant_tested.

  • status — מצב מקורי; יכול להיות NULL בסיס השדה: saved_sql_definition_read.

  • created — מועד יצירת הרשומה יחידה: timestamp. בסיס השדה: repository_documented_not_tenant_tested.

  • deletedat — סימון מחיקה יחידה: timestamp. בסיס השדה: saved_sql_definition_read.

form

רשומה אחת: הגדרה של סוג טופס.

בסיס התיעוד: מקור שמשמש בשאלות 05-01, 05-02.

  • _id — מזהה ההגדרה שאליו מפנה formdata.formid בסיס השדה: saved_sql_definition_read.

  • name — שם הטופס; אינו בהכרח ייחודי בסיס השדה: saved_sql_definition_read.

  • deletedat — סימון מחיקה; אינו מסונן בצד ההגדרה בשאלות 05-01–05-02 יחידה: timestamp. בסיס השדה: repository_documented_not_tenant_tested.

workflow

רשומה אחת: גרסה אחת של הגדרת תהליך.

בסיס התיעוד: מקור שמשמש בשאלות 05-03, 05-04.

  • _id — מזהה גרסה מסוימת של התהליך בסיס השדה: repository_documented_not_tenant_tested.

  • recordid — מזהה תהליך יציב בין גרסאות, לפי מפת הנתונים המתועדת בסיס השדה: repository_documented_not_tenant_tested.

  • name — שם התהליך; אינו מפתח ייחודי בסיס השדה: saved_sql_definition_read.

  • normalizedversion — מספר/תווית הגרסה כפי שנחשפים לניתוח בסיס השדה: saved_sql_definition_read.

  • currentreleasedversion — האם הגרסה מסומנת כמשוחררת נוכחית בסיס השדה: saved_sql_definition_read.

  • latestversion — האם הגרסה מסומנת כאחרונה בסיס השדה: saved_sql_definition_read.

  • deletedat — סימון מחיקה יחידה: timestamp. בסיס השדה: saved_sql_definition_read.

usermodel

רשומה אחת: רשומת משתמש.

בסיס התיעוד: הרחבה מתבניות מתועדות; לא אומתה כאן כמקור של החבילה.

  • _id — מזהה משתמש בסיס השדה: repository_documented_not_tenant_tested.

  • displayname — שם תצוגה בסיס השדה: repository_documented_not_tenant_tested.

  • username — שם משתמש לשימוש כשאין שם תצוגה בסיס השדה: repository_documented_not_tenant_tested.

workflowsessionitemrecord

רשומה אחת: אירוע/רישום בריצה; אינו בהכרח חתימת ביצוע.

בסיס התיעוד: הרחבה מתבניות מתועדות; לא אומתה כאן כמקור של החבילה.

  • _id — מזהה רישום בסיס השדה: repository_documented_not_tenant_tested.

  • workflowsessionitemid — מזהה הריצה בסיס השדה: repository_documented_not_tenant_tested.

  • nodeid — מזהה שלב כפי שנרשם בסיס השדה: repository_documented_not_tenant_tested.

  • originalnodeid — מזהה שלב ההגדרה המקורי, אם נרשם בסיס השדה: repository_documented_not_tenant_tested.

  • userid — מזהה משתמש בסיס השדה: repository_documented_not_tenant_tested.

  • start — מועד התחלה ברישום יחידה: timestamp. בסיס השדה: repository_documented_not_tenant_tested.

  • end — מועד סיום ברישום; קיומו לבדו אינו הוכחת חתימה יחידה: timestamp. בסיס השדה: repository_documented_not_tenant_tested.

  • deletedat — סימון מחיקה יחידה: timestamp. בסיס השדה: repository_documented_not_tenant_tested.

sessioncustomfieldview

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

בסיס התיעוד: הרחבה מתבניות מתועדות; לא אומתה כאן כמקור של החבילה.

  • workflowsessionitemid — מזהה הריצה בסיס השדה: repository_documented_not_tenant_tested.

  • fieldid — מזהה הגדרת השדה בסיס השדה: repository_documented_not_tenant_tested.

  • date — מועד רישום הערך יחידה: timestamp. בסיס השדה: repository_documented_not_tenant_tested.

  • nodeid — מזהה שלב בסיס השדה: repository_documented_not_tenant_tested.

  • originalnodeid — מזהה שלב מקורי, אם נרשם בסיס השדה: repository_documented_not_tenant_tested.

  • sessionnodeid — מזהה מופע שלב, אם נחשף בסיס השדה: repository_documented_not_tenant_tested.

  • userid — מזהה משתמש בסיס השדה: repository_documented_not_tenant_tested.

  • valuestring — ערך טקסט; בקבצים עשוי להיות מזהה משאב בסיס השדה: repository_documented_not_tenant_tested.

  • valuenumber — ערך מספרי; היחידה תלויה בשדה יחידה: field_dependent. בסיס השדה: repository_documented_not_tenant_tested.

  • valueboolean — ערך כן/לא בסיס השדה: repository_documented_not_tenant_tested.

  • valuedate — ערך תאריך יחידה: timestamp. בסיס השדה: repository_documented_not_tenant_tested.

  • deletedat — סימון מחיקה יחידה: timestamp. בסיס השדה: repository_documented_not_tenant_tested.

field

רשומה אחת: הגדרה של שדה.

בסיס התיעוד: הרחבה מתבניות מתועדות; לא אומתה כאן כמקור של החבילה.

  • _id — מזהה השדה בסיס השדה: repository_documented_not_tenant_tested.

  • title — כותרת השדה בסיס השדה: repository_documented_not_tenant_tested.

  • type — סוג שדה בסיס השדה: repository_documented_not_tenant_tested.

  • subtype — תת־סוג בסיס השדה: repository_documented_not_tenant_tested.

  • min — מגבלת קלט תחתונה; אינה בהכרח סבולת הנדסית יחידה: field_dependent. בסיס השדה: repository_documented_not_tenant_tested.

  • max — מגבלת קלט עליונה; אינה בהכרח סבולת הנדסית יחידה: field_dependent. בסיס השדה: repository_documented_not_tenant_tested.

stockitemview

רשומה אחת: שורת רכיב המקושר לרשומת מלאי של מוצר־אב.

בסיס התיעוד: הרחבה מתבניות מתועדות; לא אומתה כאן כמקור של החבילה.

  • stockid — מזהה רשומת המלאי של מוצר־האב בסיס השדה: repository_documented_not_tenant_tested.

  • sku — מק״ט הרכיב בסיס השדה: repository_documented_not_tenant_tested.

  • serial — מספר סידורי של הרכיב, אם קיים בסיס השדה: repository_documented_not_tenant_tested.

  • quantity — כמות רכיב בשורה יחידה: item_dependent. בסיס השדה: repository_documented_not_tenant_tested.

  • deletedat — סימון מחיקה יחידה: timestamp. בסיס השדה: repository_documented_not_tenant_tested.

workorderkititemview

רשומה אחת: שורת רכיב נדרש בקיט של פקודה.

בסיס התיעוד: הרחבה מתבניות מתועדות; לא אומתה כאן כמקור של החבילה.

  • workorderid — מזהה הפקודה בסיס השדה: repository_documented_not_tenant_tested.

  • sku — מק״ט רכיב הקיט בסיס השדה: repository_documented_not_tenant_tested.

  • rev — גרסת הרכיב בסיס השדה: repository_documented_not_tenant_tested.

  • quantity — כמות נדרשת יחידה: item_dependent. בסיס השדה: repository_documented_not_tenant_tested.

  • issuedquantity — כמות מנופקת כפי שנרשמה; יש לבדוק ערכים שליליים יחידה: item_dependent. בסיס השדה: repository_documented_not_tenant_tested.

  • deletedat — סימון מחיקה יחידה: timestamp. בסיס השדה: repository_documented_not_tenant_tested.

קשרים מועמדים

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

  • workflowsessionitem.workorderid → workorder._id. ריבוי צפוי: many_to_optional_one. נמדד: לא. בסיס: repository_documented_not_tenant_tested.

  • stock.workflowsessionitemid → workflowsessionitem._id. ריבוי צפוי: many_to_optional_one. נמדד: לא. בסיס: repository_documented_not_tenant_tested.

  • workflowsessionitem.workflowid → workflow._id. ריבוי צפוי: many_to_optional_one. נמדד: לא. בסיס: repository_documented_not_tenant_tested.

  • timelogreport.workorderid → workorder._id. ריבוי צפוי: many_to_optional_one. נמדד: לא. בסיס: repository_documented_not_tenant_tested.

  • timelogreport.userid → usermodel._id. ריבוי צפוי: many_to_optional_one. נמדד: לא. בסיס: repository_documented_not_tenant_tested.

  • timelogreport.workflowid → workflow._id. ריבוי צפוי: many_to_optional_one. נמדד: לא. בסיס: repository_documented_not_tenant_tested.

  • timelogreport.sessionids[] → workflowsessionitem._id. ריבוי צפוי: array_many_to_many. נמדד: לא. בסיס: repository_documented_not_tenant_tested.

  • formdata.formid → form._id. ריבוי צפוי: many_to_optional_one. נמדד: לא. בסיס: saved_sql_join_read.

  • formdata.sessionid → workflowsessionitem._id. ריבוי צפוי: many_to_optional_one. נמדד: לא. בסיס: repository_documented_not_tenant_tested.

  • formdata.workorderid → workorder._id. ריבוי צפוי: many_to_optional_one. נמדד: לא. בסיס: repository_documented_not_tenant_tested.

  • workflowsessionitemrecord.workflowsessionitemid → workflowsessionitem._id. ריבוי צפוי: many_to_optional_one. נמדד: לא. בסיס: repository_documented_not_tenant_tested.

  • sessioncustomfieldview.workflowsessionitemid → workflowsessionitem._id. ריבוי צפוי: many_to_optional_one. נמדד: לא. בסיס: repository_documented_not_tenant_tested.

  • sessioncustomfieldview.fieldid → field._id. ריבוי צפוי: many_to_optional_one. נמדד: לא. בסיס: repository_documented_not_tenant_tested.

  • stockitemview.stockid → stock._id. ריבוי צפוי: many_to_optional_one. נמדד: לא. בסיס: repository_documented_not_tenant_tested.

  • workorderkititemview.workorderid → workorder._id. ריבוי צפוי: many_to_optional_one. נמדד: לא. בסיס: repository_documented_not_tenant_tested.

כללים לפני חיבור

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

  • בדקו זמינות וסוגי שדות באופן ממוקד. data_type שהוא null משמעו לא ידוע, ולא varchar.

  • קראו את ה־SQL השמור ואת תנאיו; אין להסיק חישוב רק משם השאלה.

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

  • סננו רשומות עובדה שנמחקו באמצעות deletedat IS NULL. כשמשמרים עובדות ללא התאמה, סינון מחיקה של טבלת ההגדרות שייך ל־ON של LEFT JOIN. בשחזור 05-01–05-02 שמרו את התנהגות המקור שלהן.

  • העדיפו מזהים פנימיים על שמות או מספרים עסקיים. שדות ששמם דומה אינם מוכיחים קשר.

  • אין להניח שקשר מלאי לריצה הוא אחד לאחד. מדדו ריבוי ורשומות ללא התאמה לפני JOIN.

  • אין לסכום משך טיימר לאחר הרחבת sessionids ללא כלל חלוקה מפורש. סכום שעות טיימרים אינו נוכחות.

  • אל תעלימו עובדות היסטוריות ב־INNER JOIN לגרסאות אלא אם האוכלוסייה המבוקשת דורשת הגדרה תואמת.

  • workflow._id מזהה גרסה. workflow.recordid מתועד כזהות בין גרסאות ומצריך אימות בסביבה. שמות הם תוויות תצוגה.

  • אין להסיק גבולות תקין/פסול מ־field.min/max: אלה גבולות קלט. יש לברר את משמעות המדידה ויחידותיה בארגון.

  • אין לפרש אירועים כחתימות ביצוע או הפרשי start/end כעבודה בפועל בלי סיווג האירועים.

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

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

כמות פקודה עלולה להשתכפל בחיבור לדיווחים רבים; סכמו דיווחים לרמת פקודה לפני החיבור. אין להרחיב sessionids ואז לסכום משך מלא ללא כלל חלוקה. התאמת מזהה מלאי וריצה אינה מבטיחה קשר אחד לאחד. בשחזור 05-01–05-02 שמרו את סינון המחיקה המקורי.

דוגמאות אבחון לקריאה בלבד

דוגמאות SELECT אלה לא הורצו בסביבת היעד. החליפו {{schema}}, בדקו סוגי שדות והריצו משפט אחד בכל פעם. דוגמת השעות שומרת את כלל החבילה: משך גדול מאפס ועד 12 שעות.

-- בדיקת כיסוי הקישור ממלאי לריצות
-- Documentation example; not executed in target environment.
WITH active_sessions AS (
SELECT _id
FROM {{schema}}.workflowsessionitem
WHERE deletedat IS NULL
GROUP BY _id
)
SELECT
count(*) AS stock_rows,
count_if(st.workflowsessionitemid IS NULL) AS no_session_id,
count_if(st.workflowsessionitemid IS NOT NULL AND s._id IS NULL) AS missing_active_session,
count_if(s._id IS NOT NULL) AS matched_active_session
FROM {{schema}}.stock st
LEFT JOIN active_sessions s ON s._id=st.workflowsessionitemid
WHERE st.deletedat IS NULL;

-- בדיקת ריבוי רשומות מלאי לאותה ריצה
-- Documentation example; not executed in target environment.
SELECT workflowsessionitemid, count(*) AS stock_rows
FROM {{schema}}.stock
WHERE deletedat IS NULL
AND workflowsessionitemid IS NOT NULL
GROUP BY workflowsessionitemid
HAVING count(*) > 1
ORDER BY stock_rows DESC
LIMIT 20;

-- חיבור שעות לפקודה בלי לשכפל את כמות הפקודה
-- Documentation example; not executed in target environment.
WITH hours_per_order AS (
SELECT workorderid, count(*) AS reports,
sum(duration)/3600000.0 AS reported_hours
FROM {{schema}}.timelogreport
WHERE deletedat IS NULL
AND "end" IS NOT NULL
AND duration > 0 AND duration <= 43200000
GROUP BY workorderid
)
SELECT wo._id, wo.workordernumber, wo.quantity,
h.reports, h.reported_hours
FROM {{schema}}.workorder wo
LEFT JOIN hours_per_order h ON h.workorderid=wo._id
WHERE wo.deletedat IS NULL;

תצוגות ייחודיות לארגון

תצוגות טופס מתועדות במבנה formdataview-<form._id>, ותצוגות טבלה ארגוניות במבנה tableview-<table._id>. השמות והעמודות משתנים. בדקו את ההגדרה והתצוגה המדויקות; אין להניח שחיפוש רחב ב־information_schema יציג את כולן.

הקשר להעתקה לסוכן בינה

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

{
"dialect": "Trino",
"schema_placeholder": "{{schema}}",
"contains_customer_data": false,
"tables": [
{
"name": "workorder",
"grain": "One work order",
"fields": [
{
"name": "_id",
"meaning": "Internal record identifier; inspect its exposed type and uniqueness.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "workordernumber",
"meaning": "Recorded work-order number for display and lookup.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "sku",
"meaning": "Recorded item/SKU identifier.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "workflowname",
"meaning": "Recorded workflow/process name; names are not version identifiers.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "statustype",
"meaning": "Technical work-order status code.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "statusname",
"meaning": "Display name of the work-order status.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "createdat",
"meaning": "Record creation timestamp.",
"unit": "timestamp",
"evidence": "saved_sql_definition_read"
},
{
"name": "releasedat",
"meaning": "Recorded work-order release timestamp.",
"unit": "timestamp",
"evidence": "saved_sql_definition_read"
},
{
"name": "start",
"meaning": "Recorded start timestamp for this table’s record.",
"unit": "timestamp",
"evidence": "saved_sql_definition_read"
},
{
"name": "end",
"meaning": "Recorded end timestamp; interpret it in the context of the table.",
"unit": "timestamp",
"evidence": "saved_sql_definition_read"
},
{
"name": "expecteddate",
"meaning": "Recorded order due timestamp.",
"unit": "timestamp",
"evidence": "saved_sql_definition_read"
},
{
"name": "quantity",
"meaning": "Recorded quantity; unit of measure depends on the item and context.",
"unit": "item_dependent",
"evidence": "saved_sql_definition_read"
},
{
"name": "validquantity",
"meaning": "Reported good quantity on the order.",
"unit": "item_dependent",
"evidence": "saved_sql_definition_read"
},
{
"name": "invalidquantity",
"meaning": "Reported rejected quantity on the order.",
"unit": "item_dependent",
"evidence": "saved_sql_definition_read"
},
{
"name": "progress",
"meaning": "Recorded progress value; do not assume a universal percentage scale.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "deletedat",
"meaning": "Soft-delete marker; active facts are normally selected with IS NULL.",
"unit": "timestamp",
"evidence": "saved_sql_definition_read"
}
]
},
{
"name": "workflowsessionitem",
"grain": "One workflow run on a unit, batch or quantity",
"fields": [
{
"name": "_id",
"meaning": "Internal record identifier; inspect its exposed type and uniqueness.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "workorderid",
"meaning": "Recorded internal work-order identifier.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "workflowid",
"meaning": "Recorded workflow-version identifier.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "workflowname",
"meaning": "Recorded workflow/process name; names are not version identifiers.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "partsku",
"meaning": "SKU recorded on a production run.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "serials",
"meaning": "Array of serial values; may be empty or contain several.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "userid",
"meaning": "Recorded user identifier; association depends on the record type.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "status",
"meaning": "Raw saved status code; its vocabulary depends on the table and process.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "created",
"meaning": "Record creation timestamp.",
"unit": "timestamp",
"evidence": "saved_sql_definition_read"
},
{
"name": "start",
"meaning": "Recorded start timestamp for this table’s record.",
"unit": "timestamp",
"evidence": "saved_sql_definition_read"
},
{
"name": "end",
"meaning": "Recorded end timestamp; interpret it in the context of the table.",
"unit": "timestamp",
"evidence": "saved_sql_definition_read"
},
{
"name": "nettimespent",
"meaning": "Recorded run net time, in seconds.",
"unit": "seconds",
"evidence": "saved_sql_definition_read"
},
{
"name": "quantity",
"meaning": "Recorded quantity; unit of measure depends on the item and context.",
"unit": "item_dependent",
"evidence": "saved_sql_definition_read"
},
{
"name": "nextnodename",
"meaning": "Next step name recorded on the run.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "nextchaptername",
"meaning": "Next chapter name recorded on the run.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "progress",
"meaning": "Recorded progress value; do not assume a universal percentage scale.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "deletedat",
"meaning": "Soft-delete marker; active facts are normally selected with IS NULL.",
"unit": "timestamp",
"evidence": "saved_sql_definition_read"
}
]
},
{
"name": "stock",
"grain": "One stock record, not necessarily one unit",
"fields": [
{
"name": "_id",
"meaning": "Internal record identifier; inspect its exposed type and uniqueness.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "workflowsessionitemid",
"meaning": "Recorded production-run identifier.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "workordernumber",
"meaning": "Recorded work-order number for display and lookup.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "sku",
"meaning": "Recorded item/SKU identifier.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "serial",
"meaning": "Recorded serial value; do not assume uniqueness without SKU and identity rules.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "skurev",
"meaning": "Item/product revision recorded on stock.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "skudesc",
"meaning": "Item description observed on stock records.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "stockstatus",
"meaning": "Recorded inventory status.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "productionstatus",
"meaning": "Recorded stock production status, separate from stock status.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "quantity",
"meaning": "Recorded quantity; unit of measure depends on the item and context.",
"unit": "item_dependent",
"evidence": "saved_sql_definition_read"
},
{
"name": "availablequantity",
"meaning": "Recorded available quantity; not a guarantee of order allocation.",
"unit": "item_dependent",
"evidence": "saved_sql_definition_read"
},
{
"name": "kitstatus",
"meaning": "Saved kit-complete flag; does not recalculate component coverage.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "isserial",
"meaning": "Saved serial-management flag.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "created",
"meaning": "Record creation timestamp.",
"unit": "timestamp",
"evidence": "saved_sql_definition_read"
},
{
"name": "source",
"meaning": "Recorded source/origin value.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "deletedat",
"meaning": "Soft-delete marker; active facts are normally selected with IS NULL.",
"unit": "timestamp",
"evidence": "saved_sql_definition_read"
}
]
},
{
"name": "timelogreport",
"grain": "One time report, possibly linked to several runs",
"fields": [
{
"name": "_id",
"meaning": "Internal record identifier; inspect its exposed type and uniqueness.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "workorderid",
"meaning": "Recorded internal work-order identifier.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "workordernumber",
"meaning": "Recorded work-order number for display and lookup.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "workflowid",
"meaning": "Recorded workflow-version identifier.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "userid",
"meaning": "Recorded user identifier; association depends on the record type.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "sessionids",
"meaning": "Array of linked run identifiers; expanding it can duplicate report duration.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "sku",
"meaning": "Recorded item/SKU identifier.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "chaptername",
"meaning": "Chapter name stored on the time report.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "start",
"meaning": "Recorded start timestamp for this table’s record.",
"unit": "timestamp",
"evidence": "saved_sql_definition_read"
},
{
"name": "end",
"meaning": "Recorded end timestamp; interpret it in the context of the table.",
"unit": "timestamp",
"evidence": "saved_sql_definition_read"
},
{
"name": "firstend",
"meaning": "First stored end timestamp, used for the limited end-change comparison.",
"unit": "timestamp",
"evidence": "saved_sql_definition_read"
},
{
"name": "duration",
"meaning": "Stored time-report duration, in milliseconds.",
"unit": "milliseconds",
"evidence": "saved_sql_definition_read"
},
{
"name": "recordtype",
"meaning": "Stored report creation/record type.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "type",
"meaning": "Stored type or classification; use this table’s definition and vocabulary.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "managerapprovalstatus",
"meaning": "Saved manager-approval status.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "deletedat",
"meaning": "Soft-delete marker; active facts are normally selected with IS NULL.",
"unit": "timestamp",
"evidence": "saved_sql_definition_read"
}
]
},
{
"name": "formdata",
"grain": "One saved form record with any recorded context",
"fields": [
{
"name": "_id",
"meaning": "Internal record identifier; inspect its exposed type and uniqueness.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "formid",
"meaning": "Recorded form-definition identifier.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "sessionid",
"meaning": "Recorded run context on a form record; field name differs from stock.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "workorderid",
"meaning": "Recorded internal work-order identifier.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "workordernumber",
"meaning": "Recorded work-order number for display and lookup.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "stringnumber",
"meaning": "Display number of the saved form record.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "status",
"meaning": "Raw saved status code; its vocabulary depends on the table and process.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "created",
"meaning": "Record creation timestamp.",
"unit": "timestamp",
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "deletedat",
"meaning": "Soft-delete marker; active facts are normally selected with IS NULL.",
"unit": "timestamp",
"evidence": "saved_sql_definition_read"
}
]
},
{
"name": "form",
"grain": "One form-type definition",
"fields": [
{
"name": "_id",
"meaning": "Internal record identifier; inspect its exposed type and uniqueness.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "name",
"meaning": "Definition/display name, not a guaranteed unique identity.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "deletedat",
"meaning": "Soft-delete marker; active facts are normally selected with IS NULL.",
"unit": "timestamp",
"evidence": "repository_documented_not_tenant_tested"
}
]
},
{
"name": "workflow",
"grain": "One version of a workflow definition",
"fields": [
{
"name": "_id",
"meaning": "Internal record identifier; inspect its exposed type and uniqueness.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "recordid",
"meaning": "Documented cross-version workflow identity; verify in the target environment.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "name",
"meaning": "Definition/display name, not a guaranteed unique identity.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "normalizedversion",
"meaning": "Stored normalized workflow version number.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "currentreleasedversion",
"meaning": "Flag marking a currently released workflow version.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "latestversion",
"meaning": "Flag marking the latest version; latest need not be released.",
"unit": null,
"evidence": "saved_sql_definition_read"
},
{
"name": "deletedat",
"meaning": "Soft-delete marker; active facts are normally selected with IS NULL.",
"unit": "timestamp",
"evidence": "saved_sql_definition_read"
}
]
},
{
"name": "usermodel",
"grain": "One user record",
"fields": [
{
"name": "_id",
"meaning": "Internal record identifier; inspect its exposed type and uniqueness.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "displayname",
"meaning": "Recorded user display name.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "username",
"meaning": "Recorded username.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
}
]
},
{
"name": "workflowsessionitemrecord",
"grain": "One run event/record, not necessarily an execution signature",
"fields": [
{
"name": "_id",
"meaning": "Internal record identifier; inspect its exposed type and uniqueness.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "workflowsessionitemid",
"meaning": "Recorded production-run identifier.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "nodeid",
"meaning": "Recorded workflow-step/node identifier.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "originalnodeid",
"meaning": "Original step/node identifier used by documented templates; verify the target type and matching rule.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "userid",
"meaning": "Recorded user identifier; association depends on the record type.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "start",
"meaning": "Recorded start timestamp for this table’s record.",
"unit": "timestamp",
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "end",
"meaning": "Recorded end timestamp; interpret it in the context of the table.",
"unit": "timestamp",
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "deletedat",
"meaning": "Soft-delete marker; active facts are normally selected with IS NULL.",
"unit": "timestamp",
"evidence": "repository_documented_not_tenant_tested"
}
]
},
{
"name": "sessioncustomfieldview",
"grain": "One saved field value with run and time context",
"fields": [
{
"name": "workflowsessionitemid",
"meaning": "Recorded production-run identifier.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "fieldid",
"meaning": "Recorded field-definition identifier.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "date",
"meaning": "Timestamp associated with the saved field value.",
"unit": "timestamp",
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "nodeid",
"meaning": "Recorded workflow-step/node identifier.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "originalnodeid",
"meaning": "Original step/node identifier used by documented templates; verify the target type and matching rule.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "sessionnodeid",
"meaning": "Run-specific node identifier; do not substitute a workflow-definition node ID.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "userid",
"meaning": "Recorded user identifier; association depends on the record type.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "valuestring",
"meaning": "Stored text value.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "valuenumber",
"meaning": "Stored numeric value; measurement meaning and unit depend on the field.",
"unit": "field_dependent",
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "valueboolean",
"meaning": "Stored Boolean value.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "valuedate",
"meaning": "Stored date value.",
"unit": "timestamp",
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "deletedat",
"meaning": "Soft-delete marker; active facts are normally selected with IS NULL.",
"unit": "timestamp",
"evidence": "repository_documented_not_tenant_tested"
}
]
},
{
"name": "field",
"grain": "One field definition",
"fields": [
{
"name": "_id",
"meaning": "Internal record identifier; inspect its exposed type and uniqueness.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "title",
"meaning": "Recorded field title.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "type",
"meaning": "Stored type or classification; use this table’s definition and vocabulary.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "subtype",
"meaning": "Recorded field subtype.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "min",
"meaning": "Configured input minimum; not automatically a quality specification limit.",
"unit": "field_dependent",
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "max",
"meaning": "Configured input maximum; not automatically a quality specification limit.",
"unit": "field_dependent",
"evidence": "repository_documented_not_tenant_tested"
}
]
},
{
"name": "stockitemview",
"grain": "One component row linked to a parent stock record",
"fields": [
{
"name": "stockid",
"meaning": "Recorded parent-stock identifier.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "sku",
"meaning": "Recorded item/SKU identifier.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "serial",
"meaning": "Recorded serial value; do not assume uniqueness without SKU and identity rules.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "quantity",
"meaning": "Recorded quantity; unit of measure depends on the item and context.",
"unit": "item_dependent",
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "deletedat",
"meaning": "Soft-delete marker; active facts are normally selected with IS NULL.",
"unit": "timestamp",
"evidence": "repository_documented_not_tenant_tested"
}
]
},
{
"name": "workorderkititemview",
"grain": "One required kit-component row for an order",
"fields": [
{
"name": "workorderid",
"meaning": "Recorded internal work-order identifier.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "sku",
"meaning": "Recorded item/SKU identifier.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "rev",
"meaning": "Recorded component/item revision.",
"unit": null,
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "quantity",
"meaning": "Recorded quantity; unit of measure depends on the item and context.",
"unit": "item_dependent",
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "issuedquantity",
"meaning": "Recorded issued component quantity; compare using compatible units.",
"unit": "item_dependent",
"evidence": "repository_documented_not_tenant_tested"
},
{
"name": "deletedat",
"meaning": "Soft-delete marker; active facts are normally selected with IS NULL.",
"unit": "timestamp",
"evidence": "repository_documented_not_tenant_tested"
}
]
}
],
"relationships": [
{
"id": "session_workorder",
"from_table": "workflowsessionitem",
"from_field": "workorderid",
"to_table": "workorder",
"to_field": "_id",
"expected_cardinality": "many_to_optional_one",
"cardinality_measured": false,
"foreign_key_enforced": "not_verified",
"evidence": "repository_documented_not_tenant_tested",
"reference": "sql/sessions.sql"
},
{
"id": "stock_session",
"from_table": "stock",
"from_field": "workflowsessionitemid",
"to_table": "workflowsessionitem",
"to_field": "_id",
"expected_cardinality": "many_to_optional_one",
"cardinality_measured": false,
"foreign_key_enforced": "not_verified",
"evidence": "repository_documented_not_tenant_tested",
"reference": "sql/stock.sql"
},
{
"id": "session_workflow",
"from_table": "workflowsessionitem",
"from_field": "workflowid",
"to_table": "workflow",
"to_field": "_id",
"expected_cardinality": "many_to_optional_one",
"cardinality_measured": false,
"foreign_key_enforced": "not_verified",
"evidence": "repository_documented_not_tenant_tested",
"reference": "sql/workflow-specification.sql"
},
{
"id": "time_workorder",
"from_table": "timelogreport",
"from_field": "workorderid",
"to_table": "workorder",
"to_field": "_id",
"expected_cardinality": "many_to_optional_one",
"cardinality_measured": false,
"foreign_key_enforced": "not_verified",
"evidence": "repository_documented_not_tenant_tested",
"reference": "sql/labour-time.sql"
},
{
"id": "time_user",
"from_table": "timelogreport",
"from_field": "userid",
"to_table": "usermodel",
"to_field": "_id",
"expected_cardinality": "many_to_optional_one",
"cardinality_measured": false,
"foreign_key_enforced": "not_verified",
"evidence": "repository_documented_not_tenant_tested",
"reference": "sql/labour-time.sql"
},
{
"id": "time_workflow",
"from_table": "timelogreport",
"from_field": "workflowid",
"to_table": "workflow",
"to_field": "_id",
"expected_cardinality": "many_to_optional_one",
"cardinality_measured": false,
"foreign_key_enforced": "not_verified",
"evidence": "repository_documented_not_tenant_tested",
"reference": "sql/labour-time.sql"
},
{
"id": "time_sessions",
"from_table": "timelogreport",
"from_field": "sessionids[]",
"to_table": "workflowsessionitem",
"to_field": "_id",
"expected_cardinality": "array_many_to_many",
"cardinality_measured": false,
"foreign_key_enforced": "not_verified",
"evidence": "repository_documented_not_tenant_tested",
"reference": "sql/labour-time.sql"
},
{
"id": "form_definition",
"from_table": "formdata",
"from_field": "formid",
"to_table": "form",
"to_field": "_id",
"expected_cardinality": "many_to_optional_one",
"cardinality_measured": false,
"foreign_key_enforced": "not_verified",
"evidence": "saved_sql_join_read",
"reference": "sql/form-record-links.sql"
},
{
"id": "form_session",
"from_table": "formdata",
"from_field": "sessionid",
"to_table": "workflowsessionitem",
"to_field": "_id",
"expected_cardinality": "many_to_optional_one",
"cardinality_measured": false,
"foreign_key_enforced": "not_verified",
"evidence": "repository_documented_not_tenant_tested",
"reference": "sql/form-record-links.sql"
},
{
"id": "form_workorder",
"from_table": "formdata",
"from_field": "workorderid",
"to_table": "workorder",
"to_field": "_id",
"expected_cardinality": "many_to_optional_one",
"cardinality_measured": false,
"foreign_key_enforced": "not_verified",
"evidence": "repository_documented_not_tenant_tested",
"reference": "sql/form-record-links.sql"
},
{
"id": "record_session",
"from_table": "workflowsessionitemrecord",
"from_field": "workflowsessionitemid",
"to_table": "workflowsessionitem",
"to_field": "_id",
"expected_cardinality": "many_to_optional_one",
"cardinality_measured": false,
"foreign_key_enforced": "not_verified",
"evidence": "repository_documented_not_tenant_tested",
"reference": "sql/step-records.sql"
},
{
"id": "value_session",
"from_table": "sessioncustomfieldview",
"from_field": "workflowsessionitemid",
"to_table": "workflowsessionitem",
"to_field": "_id",
"expected_cardinality": "many_to_optional_one",
"cardinality_measured": false,
"foreign_key_enforced": "not_verified",
"evidence": "repository_documented_not_tenant_tested",
"reference": "sql/field-values-light.sql"
},
{
"id": "value_field",
"from_table": "sessioncustomfieldview",
"from_field": "fieldid",
"to_table": "field",
"to_field": "_id",
"expected_cardinality": "many_to_optional_one",
"cardinality_measured": false,
"foreign_key_enforced": "not_verified",
"evidence": "repository_documented_not_tenant_tested",
"reference": "sql/field-values-light.sql"
},
{
"id": "component_parent",
"from_table": "stockitemview",
"from_field": "stockid",
"to_table": "stock",
"to_field": "_id",
"expected_cardinality": "many_to_optional_one",
"cardinality_measured": false,
"foreign_key_enforced": "not_verified",
"evidence": "repository_documented_not_tenant_tested",
"reference": "sql/as-built-components.sql"
},
{
"id": "kit_workorder",
"from_table": "workorderkititemview",
"from_field": "workorderid",
"to_table": "workorder",
"to_field": "_id",
"expected_cardinality": "many_to_optional_one",
"cardinality_measured": false,
"foreign_key_enforced": "not_verified",
"evidence": "repository_documented_not_tenant_tested",
"reference": "sql/kit-lines.sql"
}
],
"agent_rules": [
"Confirm the authorized database and schema before querying. This file grants no access or write permission.",
"Resolve table and field availability/types with focused inspection; null data_type means unknown, not varchar.",
"Read the matching saved SQL and its filters; never infer the metric solely from its name.",
"Treat identity_candidate and expected_cardinality as hypotheses to validate, not enforced database constraints.",
"Filter soft-deleted facts with deletedat IS NULL. Place dimension soft-delete filters in LEFT JOIN ON when preserving unmatched facts; keep the original 47–48 behavior when reproducing it.",
"Prefer internal IDs to names or business numbers. Do not invent an ID relationship from a similarly named field.",
"Do not assume stock-to-session is one-to-one. Measure multiplicity and unmatched keys before joining.",
"Never sum timer duration after expanding sessionids without an explicit allocation rule. Summed timer hours are not attendance.",
"Do not inner-join historical facts to version definitions unless the requested population explicitly requires a matching definition.",
"Use workflow._id for one version; workflow.recordid is a documented cross-version identity requiring target verification. Names are display labels.",
"Do not infer pass/fail tolerances from field.min/max; these are input limits. Tenant field vocabulary and measurement units require discovery.",
"Do not interpret event records as execution signatures or start/end differences as actual labour without event classification.",
"Use read-only SELECT for diagnostics; validate totals, missing keys and row counts before and after joins. New examples in this map were not executed.",
"Do not carry tenant values, record contents, identifiers or credentials into reusable documentation or another environment."
]
}

מאמרים קשורים

האם קיבלת תשובה לשאלתך?