galbendavids commited on
Commit
e6e7d55
·
1 Parent(s): 5c74566

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

Browse files
Files changed (1) hide show
  1. app/sql_service.py +95 -18
app/sql_service.py CHANGED
@@ -131,44 +131,121 @@ class SQLFeedbackService:
131
  if self.df is None:
132
  return "No data available"
133
 
134
- # Build complete schema with all columns - be very specific about types and meanings
135
- all_columns_info = "- ID: מזהה ייחודי של כל משוב (UUID/טקסט, למשל: 71BE94CF-A408-47EC-9443-CA2385B6BFCF)\n"
136
- all_columns_info += "- ServiceName: שם השירות הדיגיטלי (טקסט, למשל: 1050_NifAvoda@btl.gov.il)\n"
137
- all_columns_info += "- Level: הציון שהמשתמש נתן לשירות (מספר שלם מ-1 עד 5, כאשר 1=גרוע מאוד, 5=מעולה)\n"
138
- all_columns_info += "- Text: הטקסט החופשי שהמשתמש הזין כחלק מהפידבק (טקסט, יכול להיות ארוך)\n"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
 
140
  # Add optional columns if they exist
141
  if 'ReferenceNumber' in self.df.columns:
142
- all_columns_info += "- ReferenceNumber: מספר הפניה של המשוב (מספר שלם, יכול להיות NULL)\n"
 
 
 
 
 
143
  if 'RequestID' in self.df.columns:
144
- all_columns_info += "- RequestID: מז��ה בקשה (UUID/טקסט, יכול להיות NULL)\n"
 
 
 
 
 
145
  if 'ProcessID' in self.df.columns:
146
- all_columns_info += "- ProcessID: מזהה תהליך (UUID/טקסט, יכול להיות NULL)\n"
 
 
 
 
147
 
148
  # Add info about date/time columns - these are PRE-CALCULATED and MUST be used for time-based queries
149
  date_columns = ['יום_בחודש', 'יום_בשבוע', 'שנה', 'חודש', 'שעה', 'יום_לילה']
150
  existing_date_columns = [col for col in date_columns if col in self.df.columns]
151
  date_columns_info = ""
152
  if existing_date_columns:
153
- date_columns_info = "\n\n⚠️⚠️⚠️ שדות תאריך/זמן מחושבים (כבר מולאו בנתונים - חובה להשתמש בהם לשאילתות זמן!):"
154
- if 'יום_בחודש' in existing_date_columns:
155
- date_columns_info += "\n- יום_בחודש: יום בחודש (1-31, מספר שלם) - מוכן לשימוש!"
156
- if 'יום_בשבוע' in existing_date_columns:
157
- date_columns_info += "\n- יום_בשבוע: יום בשבוע (טקסט: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday) - מוכן לשימוש!"
158
  if 'שנה' in existing_date_columns:
159
  # Get actual year range from data
160
  try:
161
  year_min = int(self.df['שנה'].min())
162
  year_max = int(self.df['שנה'].max())
163
- date_columns_info += f"\n- שנה: שנה (מספר שלם, טווח: {year_min}-{year_max}) - מוכן לשימוש!"
164
  except:
165
- date_columns_info += "\n- שנה: שנה (מספר שלם, למשל 2020) - מוכן לשימוש!"
 
 
 
 
 
 
 
 
166
  if 'חודש' in existing_date_columns:
167
- date_columns_info += "\n- חודש: חודש (1-12, מספר שלם, 1=ינואר, 12=דצמבר) - מוכן לשימוש!"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
168
  if 'שעה' in existing_date_columns:
169
- date_columns_info += "\n- שעה: שעה ביום (0-23, מספר שלם, 0=חצות, 23=23:00) - מוכן לשימוש!"
 
 
 
 
 
 
170
  if 'יום_לילה' in existing_date_columns:
171
- date_columns_info += "\n- יום_לילה: האם זה יום או לילה (טקסט: 'יום' או 'לילה', יום=6:00-18:00, לילה=18:00-6:00) - מוכן לשימוש!"
 
 
 
 
 
 
172
 
173
  schema_info = f"""
174
  ⚠️⚠️⚠️ שם הטבלה: 'Feedback_transformed' (עם אות גדולה F ו-underscore) - זה הקובץ feedback_transformed.csv
 
131
  if self.df is None:
132
  return "No data available"
133
 
134
+ # Build complete schema with all columns - be very specific about types, meanings, business context, and examples
135
+ all_columns_info = ""
136
+
137
+ # ID field
138
+ all_columns_info += "- ID: מזהה ייחודי של כל משוב\n"
139
+ all_columns_info += " * סוג: UUID/טקסט (מזהה ייחודי גלובלי)\n"
140
+ all_columns_info += " * משמעות עסקית: מזהה ייחודי לכל משוב במערכת, מאפשר מעקב אחר משוב ספציפי, קישור בין משובים, ומניעת כפילויות\n"
141
+ all_columns_info += " * דוגמאות: '71BE94CF-A408-47EC-9443-CA2385B6BFCF', '6E36E9B9-45D5-4143-AF24-216C2A889217'\n"
142
+ all_columns_info += " * שימוש בשאילתות: WHERE ID = '...', COUNT(DISTINCT ID), GROUP BY ID\n\n"
143
+
144
+ # ServiceName field
145
+ all_columns_info += "- ServiceName: שם השירות הדיגיטלי\n"
146
+ all_columns_info += " * סוג: טקסט (שם השירות)\n"
147
+ all_columns_info += " * משמעות עסקית: מזהה את השירות הדיגיטלי הממשלתי שעליו ניתן המשוב. מאפשר ניתוח לפי שירות, השוואה בין שירותים, וזיהוי שירותים בעייתיים או מצטיינים\n"
148
+ all_columns_info += " * דוגמאות: '1050_NifAvoda@btl.gov.il', '7112@btl.gov.il', 'שירות דיגיטלי אחר'\n"
149
+ all_columns_info += " * שימוש בשאילתות: WHERE ServiceName = '...', GROUP BY ServiceName, COUNT(*) GROUP BY ServiceName\n\n"
150
+
151
+ # Level field
152
+ all_columns_info += "- Level: הציון שהמשתמש נתן לשירות\n"
153
+ all_columns_info += " * סוג: מספר שלם (1-5)\n"
154
+ all_columns_info += " * משמעות עסקית: מדד שביעות רצון המשתמש מהשירות. 1=גרוע מאוד, 2=גרוע, 3=בינוני, 4=טוב, 5=מעולה. מאפשר מדידת שביעות רצון, זיהוי בעיות, ומעקב אחר שיפורים\n"
155
+ all_columns_info += " * דוגמאות: 1, 2, 3, 4, 5\n"
156
+ all_columns_info += " * שימוש בשאילתות: WHERE Level >= 4 (משובים חיוביים), WHERE Level <= 2 (משובים שליליים), AVG(Level), GROUP BY Level\n\n"
157
+
158
+ # Text field
159
+ all_columns_info += "- Text: הטקסט החופשי שהמשתמש הזין כחלק מהפידבק\n"
160
+ all_columns_info += " * סוג: טקסט (ארוך, יכול להכיל מספר משפטים)\n"
161
+ all_columns_info += " * משמעות עסקית: התוכן המפורט של המשוב - ביקורות, הצעות לשיפור, תלונות, מחמאות. מאפשר ניתוח איכותי של המשובים, זיהוי נושאים חוזרים, וקבלת תובנות עסקיות מעמיקות\n"
162
+ all_columns_info += " * דוגמאות: 'כי זה לא מנפיק את המספר', 'הכל מעולה!', 'במקרה של בעיה אין טלפון לבירורים...'\n"
163
+ all_columns_info += " * שימוש בשאילתות: WHERE Text LIKE '%...%', WHERE Text LIKE '%בעיה%', LENGTH(Text), COUNT(*) WHERE Text IS NOT NULL\n\n"
164
 
165
  # Add optional columns if they exist
166
  if 'ReferenceNumber' in self.df.columns:
167
+ all_columns_info += "- ReferenceNumber: מספר הפניה של המשוב\n"
168
+ all_columns_info += " * סוג: מספר שלם (יכול להיות NULL)\n"
169
+ all_columns_info += " * משמעות עסקית: מספר הפניה פנימי של המשוב במערכת. מאפשר קישור למסמכים או בקשות קשורות, מעקב אחר תהליכים, וניהול בקשות\n"
170
+ all_columns_info += " * דוגמאות: 6928, 6938, NULL\n"
171
+ all_columns_info += " * שימוש בשאילתות: WHERE ReferenceNumber = 6928, WHERE ReferenceNumber IS NOT NULL, COUNT(*) WHERE ReferenceNumber IS NULL\n\n"
172
+
173
  if 'RequestID' in self.df.columns:
174
+ all_columns_info += "- RequestID: מזהה בקשה\n"
175
+ all_columns_info += " * סוג: UUID/טקסט (יכול להיות NULL)\n"
176
+ all_columns_info += " * משמעות עסקית: מזהה ייחודי של הבקשה המקורית שקשורה למשוב. מאפשר קישור בין בקשות למשובים, מעקב אחר תהליכים, וניתוח הקשר בין בקשה למשוב\n"
177
+ all_columns_info += " * דוגמאות: 'D02E2BB5-079B-44AD-AC35-9D30A22715F9', '463B8D9A-C85B-474C-895D-D73CE067EF27', NULL\n"
178
+ all_columns_info += " * שימוש בשאילתות: WHERE RequestID = '...', COUNT(DISTINCT RequestID), WHERE RequestID IS NOT NULL\n\n"
179
+
180
  if 'ProcessID' in self.df.columns:
181
+ all_columns_info += "- ProcessID: מזהה תהליך\n"
182
+ all_columns_info += " * סוג: UUID/טקסט (יכול להיות NULL)\n"
183
+ all_columns_info += " * משמעות עסקית: מזהה ייחודי של התהליך העסקי שקשור למשוב. מאפשר ניתוח לפי תהליכים, זיהוי תהליכים בעייתיים, ומעקב אחר ביצועים של תהליכים ספציפיים\n"
184
+ all_columns_info += " * דוגמאות: UUID או NULL\n"
185
+ all_columns_info += " * שימוש בשאילתות: WHERE ProcessID = '...', COUNT(DISTINCT ProcessID), WHERE ProcessID IS NOT NULL\n\n"
186
 
187
  # Add info about date/time columns - these are PRE-CALCULATED and MUST be used for time-based queries
188
  date_columns = ['יום_בחודש', 'יום_בשבוע', 'שנה', 'חודש', 'שעה', 'יום_לילה']
189
  existing_date_columns = [col for col in date_columns if col in self.df.columns]
190
  date_columns_info = ""
191
  if existing_date_columns:
192
+ date_columns_info = "\n\n⚠️⚠️⚠️ שדות תאריך/זמן מחושבים (כבר מולאו בנתונים - חובה להשתמש בהם לשאילתות זמן!):\n"
193
+
 
 
 
194
  if 'שנה' in existing_date_columns:
195
  # Get actual year range from data
196
  try:
197
  year_min = int(self.df['שנה'].min())
198
  year_max = int(self.df['שנה'].max())
199
+ year_range = f"{year_min}-{year_max}"
200
  except:
201
+ year_range = "למשל 2020"
202
+
203
+ date_columns_info += "- שנה: שנה שבה ניתן המשוב\n"
204
+ date_columns_info += " * סוג: מספר שלם\n"
205
+ date_columns_info += f" * טווח: {year_range}\n"
206
+ date_columns_info += " * משמעות עסקית: מאפשר ניתוח מגמות לאורך שנים, השוואה בין שנים, זיהוי שיפורים או הידרדרות, ותכנון אסטרטגי לטווח ארוך\n"
207
+ date_columns_info += f" * דוגמאות: {year_min}, {year_max}\n"
208
+ date_columns_info += " * שימוש בשאילתות: WHERE שנה = 2020, GROUP BY שנה, SELECT שנה, COUNT(*) GROUP BY שנה\n\n"
209
+
210
  if 'חודש' in existing_date_columns:
211
+ date_columns_info += "- חודש: חודש בשנה שבו ניתן המשוב\n"
212
+ date_columns_info += " * סוג: מספר שלם (1-12)\n"
213
+ date_columns_info += " * משמעות: 1=ינואר, 2=פברואר, 3=מרץ, 4=אפריל, 5=מאי, 6=יוני, 7=יולי, 8=אוגוסט, 9=ספטמבר, 10=אוקטובר, 11=נובמבר, 12=דצמבר\n"
214
+ date_columns_info += " * משמעות עסקית: מאפשר ניתוח עונתי, זיהוי חודשים בעייתיים או מצטיינים, תכנון משאבים לפי עונות, וזיהוי דפוסים חודשיים\n"
215
+ date_columns_info += " * דוגמאות: 1 (ינואר), 6 (יוני), 12 (דצמבר)\n"
216
+ date_columns_info += " * שימוש בשאילתות: WHERE חודש = 1, GROUP BY חודש, SELECT חודש, COUNT(*) GROUP BY חודש ORDER BY חודש\n\n"
217
+
218
+ if 'יום_בחודש' in existing_date_columns:
219
+ date_columns_info += "- יום_בחודש: יום בחודש שבו ניתן המשוב\n"
220
+ date_columns_info += " * סוג: מספר שלם (1-31)\n"
221
+ date_columns_info += " * משמעות עסקית: מאפשר ניתוח לפי ימים בחודש, זיהוי ימים בעייתיים (למשל סוף חודש), וניתוח דפוסים יומיים\n"
222
+ date_columns_info += " * דוגמאות: 1, 15, 31\n"
223
+ date_columns_info += " * שימוש בשאילתות: WHERE יום_בחודש = 1, GROUP BY יום_בחודש, SELECT יום_בחודש, COUNT(*) GROUP BY יום_בחודש\n\n"
224
+
225
+ if 'יום_בשבוע' in existing_date_columns:
226
+ date_columns_info += "- יום_בשבוע: יום בשבוע שבו ניתן המשוב\n"
227
+ date_columns_info += " * סוג: טקסט (אנגלית)\n"
228
+ date_columns_info += " * ערכים אפשריים: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday\n"
229
+ date_columns_info += " * משמעות עסקית: מאפשר ניתוח לפי ימי השבוע, זיהוי ימים בעייתיים (למשל ראשון), תכנון כוח אדם, וזיהוי דפוסים שבועיים\n"
230
+ date_columns_info += " * דוגמאות: 'Monday', 'Wednesday', 'Friday'\n"
231
+ date_columns_info += " * שימוש בשאילתות: WHERE יום_בשבוע = 'Monday', GROUP BY יום_בשבוע, SELECT יום_בשבוע, COUNT(*) GROUP BY יום_בשבוע\n\n"
232
+
233
  if 'שעה' in existing_date_columns:
234
+ date_columns_info += "- שעה: שעה ביום שבה ניתן המשוב\n"
235
+ date_columns_info += " * סוג: מספר שלם (0-23)\n"
236
+ date_columns_info += " * משמעות: 0=חצות (00:00), 12=צהריים (12:00), 23=23:00\n"
237
+ date_columns_info += " * משמעות עסקית: מאפשר ניתוח לפי שעות היום, זיהוי שעות שיא, תכנון זמינות שירות, וזיהוי דפוסים יומיים (למשל שעות בוקר מול ערב)\n"
238
+ date_columns_info += " * דוגמאות: 0 (חצות), 9 (9 בבוקר), 14 (2 בצהריים), 18 (6 בערב), 23 (11 בלילה)\n"
239
+ date_columns_info += " * שימוש בשאילתות: WHERE שעה >= 9 AND שעה <= 17 (שעות עבודה), GROUP BY שעה, SELECT שעה, COUNT(*) GROUP BY שעה ORDER BY שעה\n\n"
240
+
241
  if 'יום_לילה' in existing_date_columns:
242
+ date_columns_info += "- יום_לילה: האם המשוב ניתן בשעות היום או הלילה\n"
243
+ date_columns_info += " * סוג: טקסט\n"
244
+ date_columns_info += " * ערכים אפשריים: 'יום' או 'לילה'\n"
245
+ date_columns_info += " * הגדרה: יום=6:00-18:00, לילה=18:00-6:00\n"
246
+ date_columns_info += " * משמעות עסקית: מאפשר ניתוח לפי שעות פעילות, זיהוי הבדלים בין יום ללילה, תכנון זמינות שירות, וזיהוי בעיות בשעות מסוימות\n"
247
+ date_columns_info += " * דוגמאות: 'יום', 'לילה'\n"
248
+ date_columns_info += " * שימוש בשאילתות: WHERE יום_לילה = 'יום', GROUP BY יום_לילה, SELECT יום_לילה, COUNT(*) GROUP BY יום_לילה\n\n"
249
 
250
  schema_info = f"""
251
  ⚠️⚠️⚠️ שם הטבלה: 'Feedback_transformed' (עם אות גדולה F ו-underscore) - זה הקובץ feedback_transformed.csv