ה־guard לא מצא את שירות הטוקנים
ה־guard של JWT בנתיבי המסלקה נכשל בעלייה: שירות הטוקנים נרשם במודול ההזדהות אבל לא היה זמין לשאר האפליקציה.
ייצאתי את מודול ה־JWT ממודול ההזדהות, כך שכל נתיב מוגן משתמש באותה תצורה (טוקן לשעה).
מיזם פינטק ישראלי בשלב מוקדם רצה להראות למשקיעים ולשותפים אפליקציה שמושכת מהמסלקה הפנסיונית את כל קרנות הפנסיה, קופות הגמל וקרנות ההשתלמות של אדם, והופכת אותן לתמונה אחת שאפשר להבין. תכננתי ובניתי את ה־POC מקצה לקצה: שכבת API מאובטחת, ממפה נתונים למבנה עברי מקונן ועמוק, ודשבורד מובייל בעברית מימין לשמאל.
לרוב העובדים בישראל יש כמה מוצרי חיסכון ארוך טווח: קרן פנסיה, קופת גמל אחת או יותר וקרן השתלמות, ולא פעם אצל גופים שונים. המסלקה הפנסיונית יודעת להחזיר את כולם בתשובה אחת, אבל התשובה הזו נבנתה בשביל גופים מוסדיים ולא בשביל אנשים. בתשובת דוגמה אחת לשלוש פוליסות יש 684 נקודות מידע: שמות שדות בעברית, טבלאות מקוננות, מספרים ששמורים כטקסט עם פסיקים, ואותו שדה שמגיע כרשימה בפוליסה אחת וכאובייקט בפוליסה אחרת. חוסך שרוצה לדעת ”כמה יש לי ואיך זה מתקדם?” בדרך כלל נכנס לאתר של כל גוף בנפרד.
התרשים רחב מהמסך: החליקו הצידה לצפייה בכולו →
בדמו, הדשבורד קורא תשובה מוקלטת של המסלקה דרך אותו ממפה שישמש לנתונים החיים. המעבר לנתונים חיים הוא שינוי בקובץ שירות אחד, בלי לגעת בממשק.
מפתח המסלקה ובקשת המידע האישי לא מגיעים לדפדפן אף פעם. שכבת NestJS מוסיפה הזדהות JWT, CORS ותיעוד Swagger, כך שהפרונט וכל אפליקציית מובייל עתידית חולקים חוזה אחד מתועד. המחיר: עוד שירות להריץ, וזה זול בהרבה מדליפה של פרטי גישה לשירות מפוקח.
כל הידע על המפתחות העבריים, הטבלאות המקוננות והמבנים הלא עקביים נמצא בממפה אחד. הקומפוננטות רואות רק טיפוס PensionFund של 9 שדות. המחיר: כרגע הממפה מתעלם מרוב השדות, אבל הוספת שדה היא שורה אחת בקובץ אחד.
גישה חיה למסלקה דורשת רישוי והסכמה חתומה של החוסך, ו־POC של שבוע לא יכול לחכות לזה. נתיבי השרת לזרימה החיה נבנו קודם, והממשק רץ על תשובה מוקלטת דרך אותו ממפה. המחיר: הדמו מציג מבנה נתונים אמיתי, לא נתונים בזמן אמת.
ספריית גרפים הותקנה ונוסתה, אבל במסך הראשון חוסך צריך שלושה מספרים אמינים: סך הכול, הסכום הנזיל ותשואה משוקללת לפי יתרה. הגרפים נדחו לשלב הבא. המחיר: דמו פחות צבעוני.
גם ב־POC של שבוע יש בעיות אמיתיות. רובן הגיעו מהמבנה של הנתונים.
ה־guard של JWT בנתיבי המסלקה נכשל בעלייה: שירות הטוקנים נרשם במודול ההזדהות אבל לא היה זמין לשאר האפליקציה.
ייצאתי את מודול ה־JWT ממודול ההזדהות, כך שכל נתיב מוגן משתמש באותה תצורה (טוקן לשעה).
פירוט מסלולי ההשקעה חזר כרשימה ב־2 מתוך 3 פוליסות הדוגמה וכאובייקט יחיד בשלישית. קוד שמניח רשימה היה קורס על לקוח אמיתי.
הממפה מנרמל את שני המבנים לפני שהוא קורא את התשואה נטו של המסלול.
יתרות צפויות הגיעו כטקסט עם פסיקי אלפים, סכומים אחרים כמספרים רגילים, ותאריכים כמחרוזת יום־חודש־שנה.
מסלול פענוח אחד לכל סכום ותאריך, עם ברירת מחדל בטוחה של אפס, כך ששדה חסר מוצג כ־₪0 ולא כ־NaN.
ממוצע פשוט של תשואות הקרנות נתן לקרן קטנה עם תשואה גבוהה משקל שווה לקרן פנסיה גדולה. ביתרות מציאותיות, התשואה בכותרת נופחה ביותר מ־2 נקודות אחוז.
התשואה משוקללת עכשיו לפי יתרה, בנפרד לטווח קצר, לטווח ארוך ולסך הכול.
לכל פוליסה יש תאריך נכונות משלה, ולכן תווית ”נכון ל...” אחת יכולה להיות שגויה בחצי מהכרטיסים.
כל כרטיס מציג את חודש הנכונות האחרון של הפוליסות שהוא מסכם, בשם החודש בעברית.
אזהרות lint ושאריות של תבניות הצטברו בשבוע מהיר.
תיקנתי את כל אזהרות ה־lint, הסרתי קוד שלא בשימוש, וה־build של פרודקשן נכשל עכשיו על כל שגיאת lint או טיפוסים.
תיק סינתטי של שלוש פוליסות (בלי נתוני לקוח). החליפו בין שתי הדרכים לחשב את התשואה בכותרת.
שיחת אבחון חינם · 30 דקות · ללא התחייבות
כתבו בכמה שורות: איזה תהליך או מערכת, מה כואב היום (זמן, טעויות, עלויות או פיילוט AI שנתקע) ומי עובד עם זה. אחרי שיחה קצרה מקבלים תוך כ־3 ימים תוכנית כתובה והצעת מחיר סגורה.
נפתח מייל מוכן מראש · מענה תוך יום עסקים
ה־AI קורא. הקוד סופר.
כל הפרויקטים