כל הפרויקטים

מטהר Company Base Migration

מטהר Python שמנרמל חוברת referrals ישנה מבולגנת לתבנית מוכנה למיגרציה.

המטרה

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

הפתרון

סקריפט Python יחיד - migrate_cleaner.py - שקורא את כל הגיליונות מהחוברת הלא-נקייה, מיישם ארבעה כללים דטרמיניסטיים (הוצאת שורות FREE JOB, הוצאת סכומים שליליים, פיצול חברה מאיש קשר לפי סוגריים, ופיצוץ שורות עם כמה מספרי עבודה), ממיר מחרוזות בסגנון מטבע למספרים אמיתיים, וכותב את הפלט בדיוק בסדר העמודות של התבנית שנמסרה.

עיקרי הדברים

  • פלט מונע-תבנית הופך את יעד המיגרציה ingestable ללא עריכות
  • 4 כללים דטרמיניסטיים מחליפים ימים של ניקוי ידני
  • פיצוץ שורות למרובי-עבודות שומר על קישור downstream

האתגר

אלפי שורות הכילו 'שם חברה (שם איש קשר)' מודבקים לתוך תא Referral From אחד, בלי הפרדה עקבית.

ביטוי רגולרי ^(.*?)\s*\((.*?)\)\s*$ לוכד את שם החברה ואת איש הקשר שבסוגריים. שורות בלי סוגריים מטופלות כחברה בלבד עם עמודת איש קשר ריקה, כדי שלא ייווצר מידע שלא היה שם.

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

ביטוי רגולרי case-insensitive מסוג \bFREE\s*JOB\b עם רווחים גמישים תופס את כל הווריאציות שנצפו בפועל, במקום להתאים למחרוזת אחת ולפספס את השאר.

מספרי עבודה הגיעו מודבקים יחד עם מפרידים מעורבים: פסיק, לוכסן, המילה and, והסימן &.

ביטוי מקומפל [,/]| and |\s*&\s* מפצל אותם, ואז פיצוץ שורות: שורה מקורית עם N מספרי עבודה הופכת ל-N שורות. כך כל קליטה בהמשך יכולה לקשר רשומה לעבודה בודדת במקום לנסות לפרק מחרוזת.

עמודת הסכום עירבבה מספרים עשרוניים, מחרוזות בסגנון '$1,234.00', תאים ריקים ומקפים.

פונקציית to_number() מסירה סימני דולר ופסיקים, מחזירה None לתאים ריקים או לא תקינים, ומספר אמיתי בכל מקרה אחר. סכומים שליליים מנותבים ל-has_negative_amount() ומוצאים מהפלט לפי הכלל שהוגדר.

מה נמסר

  • migrate_cleaner.py - סקריפט ניקוי יחיד עם נקודת כניסה אחת
  • requirements.txt עם pandas ו-openpyxl
  • חוברת פלט בדיוק בסדר העמודות של התבנית, מוכנה לקליטה

תוצאות

4

כללי ניקוי

All sheets

גיליונות

Template-matched

צורת פלט

מה זה לימד אותי

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