ניהול לידים, הצעות מחיר והסכמים
הפיכת ליד ללקוח פעיל בלי לעזוב את Shipnest: הצעת מחיר מעוצבת עם PDF, חתימה דיגיטלית עם תוקף משפטי (חוק חתימה אלקטרונית, תשס״א-2001), הקמת לקוח אטומית עם מחירון ופורטל — וגם השעיה אם צריך.
Updated: 1 ביוני 2026
מה זה כולל#
מודול ה-CRM של Shipnest מקים זרימה רציפה בין 4 ישויות חדשות — ליד, הצעת מחיר, הסכם ו-לקוח — ומחבר ביניהן כך שאינך צריך להעתיק נתונים ידנית.
הזרימה בקצרה
הפעלת המודולים#
המודולים מוצגים פר-טננט. מנהל הפלטפורמה מפעיל אותם דרך /admin/tenants/[id] בעריכת הטננט:
- מודול הצעות מחיר — מציג את התפריט "הצעות מחיר" תחת קבוצת הלקוחות בסיידבר, ומאפשר ל-API של
/api/quotesלעבוד. - מודול הסכמים וחתימה דיגיטלית — תלוי בהפעלת הצעות מחיר. מציג את התפריט "הסכמים" ומאפשר את
/api/contracts. - ספק חתימה דיגיטלית — דרופדאון שמופיע כש-הסכמים פעיל. כרגע זמין רק חתימה פנימית (Shipnest); אינטגרציה עם חשבונית ירוקה מסומנת "בקרוב".
לידים נשמרים ב-/leads עם שם, אימייל, טלפון, מקור, סכום צפוי, מועד מעקב הבא, וסוכן מטפל (אופציונלי). הסטטוס נע על הסקלה:
NEW → IN_TREATMENT → QUOTED → CONTRACT_SENT → CONTRACT_SIGNED → CONVERTED
↑ ↑
ידנית/מהפעלה אוטומטית מהזרימהכשליד מקבל הצעת מחיר/הסכם/חתימה — הסטטוס שלו מתקדם אוטומטית ופעולה נוצרת ב-LeadActivity. אין צורך לעדכן ידנית.
הצעות מחיר#
יצירת הצעת מחיר מ-/quotes או מתוך כפתור "צור הצעת מחיר" בפעולות שורת הליד. ההצעה כוללת תעריפי בסיס (מסירה / איסוף / החזרה / חבילה נוספת / תוספת גוביינא / תוספת יעד חריג), הערות חופשיות, ותנאי שירות שיוצגו ללקוח.
זרימת חיים של הצעה#
- DRAFT — נוצרת ועריכה חופשית. עוד לא ראתה אור.
- לחיצה על "שלח ללקוח" → המערכת מפיקה PDF בעברית RTL (פונט Rubik, תעריפים בש״ח, תנאי שירות, מספור עמודים), מעלה ל-Supabase Storage, יוצרת טוקן צפייה ציבורי של 32 בייטים, ושולחת מייל ללקוח עם לינק.
- SENT — ההצעה אינה ניתנת יותר לעריכה. המייל שולח את הלקוח לעמוד ציבורי
/q/[token]שמציג את ההצעה ממותגת עם לוגו הטננט. - VIEWED — ברגע שהלקוח פותח את הקישור בפעם הראשונה, הסטטוס מתקדם אוטומטית ו-
viewedAtמסומן.
מספור הצעות
QUO-YYYY-NNNN פר טננט ופר שנה (לדוגמה QUO-2026-0001).הסכם ניתן ליצור משלושה מקורות:
- מהצעת מחיר — הדרך המומלצת. בעמוד ההצעה (כשסטטוס ≠ DRAFT) יש כפתור "צור הסכם". התעריפים ותנאי השירות מועתקים אוטומטית מההצעה.
- מליד — לקפיצה מעל שלב הצעת המחיר.
- מלקוח קיים — לעדכון מחירון של לקוח שכבר אצלך במערכת.
זרימת חיים של הסכם#
- DRAFT — עריכה חופשית של תעריפים, תקופת תוקף, חידוש אוטומטי, ותנאי שירות.
- SENT_FOR_SIGNATURE — בלחיצה על "שלח לחתימה" המערכת מפיקה PDF טיוטה (בלי חתימה), שולחת מייל עם לינק לעמוד החתימה
/sign/[token], וסוגרת את ההסכם לעריכה. - VIEWED — מסומן אוטומטית בכניסה הראשונה של הלקוח.
- SIGNED — אחרי שהלקוח חותם, המערכת:
- שומרת את תמונת החתימה (PNG) ב-Supabase
- מפיקה PDF חתום סופי עם תמונת החתימה משובצת + פרטי החותם + IP + UA + הצהרה משפטית
- שולחת מייל אישור ללקוח עם הקובץ החתום
- כותבת רשומת ContractEvent ל-audit log
- ACTIVE — לאחר ההמרה ללקוח (שלב 4).
מה הלקוח רואה בעמוד החתימה#
העמוד הציבורי ב-/sign/[token] ממותג עם לוגו הטננט, מציג את ההסכם המלא, ודורש מהלקוח:
- שם מלא (חובה)
- אימייל (חובה)
- תעודת זהות / ח.פ. (חובה — מאומת באלגוריתם ספרת הביקורת הישראלי הרשמי, 9 ספרות)
- טלפון (אופציונלי)
- חתימה — שדה ציורי (signature pad) שתומך בעכבר ובמסך מגע
- אישור קריאה — checkbox
המערכת לוכדת אוטומטית את כתובת ה-IP וה-User Agent ושומרת אותם ב-Contract וב-ContractEvent לצרכי תיעוד משפטי.
חתימה אלקטרונית רגילה — תקפה משפטית
ל-3 רמות חתימה דיגיטלית בחוק (רגילה / מאובטחת / מאושרת), הזרימה הזו מתאימה לחוזי שירות מסחריים סטנדרטיים. למצבים שדורשים חתימה מאושרת (למשל מקרקעין או צוואות) — נדרשת אינטגרציה עם גורם מאשר רשמי, ולא נתמכת כיום.
המרה ללקוח פעיל#
לאחר חתימת ההסכם — בעמוד /contracts/[id] מופיע כפתור "המר ללקוח פעיל". הוא פותח דיאלוג עם:
- פרטי הלקוח — שם, אימייל, טלפון, כתובת, ולקוח אב (אופציונלי). הכל ממולא אוטומטית מנתוני החתימה.
- גישה לפורטל — checkbox שאם מסומן, יוצר משתמש פורטל ראשון (Owner) ושולח לו מייל הזמנה.
בלחיצה על "צור לקוח והפעל" — הכל קורה בטרנזקציה אחת אטומית:
- יוצר/מעדכן
Customerעם status=ACTIVE - יוצר
CustomerPricingProfileעם תעריפי ההסכם (באגורות) - יוצר
CustomerPricingRuleלכל כלל מותאם בהסכם - מעדכן
Contract.status=ACTIVEומקשר לסטומר - מעדכן
Lead.status=CONVERTEDו-convertedCustomerId - שולח invite לפורטל (אם נבחר) — מחוץ לטרנזקציה, כדי שכשלון מייל לא יבטל את ההמרה
ההמרה אטומית
השעיית לקוחות#
כשיש בעיה עם לקוח (חוב פתוח, הפרת תנאים) — בעמוד הלקוח יש כפתור "השעה" שפותח דיאלוג עם שדה סיבה חובה (לפחות 5 תווים). ההשעיה:
- מסמנת
status=SUSPENDEDו-isActive=false - שומרת את הסיבה, מי השעה ומתי
- שולחת מייל ללקוח עם הסיבה (ניתן לדלג עם checkbox)
- מציגה באנר אדום בולט בראש כרטיס הלקוח
מאותו רגע — יצירת משלוחים חדשים חסומה:
- במסך יצירת משלוח (admin + portal) — הלקוח לא מופיע בדרופדאון, וגם אם מנסים לעקוף → 403 עם הודעה ברורה.
- ב-API ציבורי
POST /api/v1/shipments— מחזיר 403. - משלוחים קיימים ממשיכים להיות מטופלים כרגיל.
ביטול השעיה — בלחיצה אחת. הלקוח חוזר למצב ACTIVE ושדות ההשעיה מתאפסים.
יומן אירועים#
כל פעולה משמעותית על הסכם נכתבת כ-ContractEvent immutable עם:
- סוג האירוע (
CREATED/SENT/VIEWED/SIGNED/ACTIVATED) - סוג הפועל (
STAFF/CUSTOMER/SYSTEM/PROVIDER) - מזהה הפועל, IP, User Agent, ו-metadata חופשי
- timestamp
היומן מוצג בכרטיס "יומן אירועים" בעמוד ההסכם.
תכניות עתידיות#
- אינטגרציה עם חשבונית ירוקה — Proposals Plus כספק חתימה. ממתין לבירור API איתם.
- תבניות הסכמים — ContractTemplate CRUD ב-/settings/contracts/templates (כרגע יש default terms קבועים בקוד).
- בחירת ספק חתימה per-contract — override של ברירת מחדל של הטננט.
- Addendum / חוזה משנה — קישור הסכם לאב.