# סיכום סשן — 0017
תאריך: 2026-05-20 22:00
אפליקציה: VitSiteTrack
נושא: Report Templates & Branding — תוספת §3.6 ל-PLAN

## מה נבנה/הושלם

### תוספת §3.6 ל-PLAN — Report Templates & Branding
המשתמש נזכר בדרישה מהותית: לכל משרד אדריכלים פורמט דו"ח משלו, ופורמט אחיד יידחה. המסקנה — מערכת טמפלייטים מרובים + מיתוג ברמת ארגון, בלי AI. נוסף סעיף מלא §3.6 לתוכנית:

**שלב 1 — Built-in Templates Library (M6):**
- 3–5 טמפלייטים מובנים בקוד ב-`lib/report_templates/`, interface `IReportTemplate` (build PDF widget tree לפי `Visit` model)
- **תנאי מקדים ל-M6:** המשתמש יזין 4–6 דוגמאות דו"ח אמיתיות → ניתוח רובריקות + היררכיה משותפת ידני (לא AI) → עיצוב 3–5 טמפלייטים נציגים
- רובריקות בסיס מומלצות: כותרת+פרטי משרד · פרטי פרויקט · תאריך+נוכחים · מבוא · ממצאים (לפי discipline/severity/location/order) · סיכום · תפוצה · חתימה
- בחירת טמפלייט ב-settings פעם אחת, או override per-visit ב-Draft Editor

**שלב 2 — Branding (M2 schema, M6 UI):**
- Logo upload ל-Storage `orgs/{orgId}/branding/logo.{ext}`, max 2MB, png/jpg, signed URL לקריאה ב-PDF
- Logo position enum: `none | header_{left,center,right} | footer_{left,center,right} | watermark` (watermark = שקיפות ~12%)
- Accent color hex אופציונלי שמחליף את צבע הכותרת/קווים בטמפלייט
- חתימה כבר ב-schema (`users.signatureUrl`) — Branding ברמת user

**שלב 3 — Auto-adapt מקובץ דו"ח משרדי = NOT IN SCOPE / נדחה מפורשות:**
- דורש OCR + Layout LLM (חילוץ היררכיה ויזואלית מ-PDF), מורכבות גבוהה, עלויות API חוזרות, שכבת פרטיות נוספת
- **החלטת משתמש מפורשת:** לא ללכת ל-AI
- חלופה לטיר Office (M9+): `orgs/{orgId}/customTemplates/{tid}` — JSON spec ידני שצוות מעצב פנימי בונה לפי דו"ח של המשרד. נשמרה רק collection placeholder ב-schema כדי לא להיתקע אחר כך.

### שינויי schema (§3.1)
- `orgs/{orgId}` הורחב: `defaultReportTemplateId, brandingLogoPath, brandingLogoPosition, brandingAccentColor`
- `users/{uid}` הורחב: `reportTemplateId` (override של ברירת המחדל של ה-org), `logoPositionOverride`
- `orgs/{orgId}/customTemplates/{tid}` — collection placeholder (M9+, לא MVP)

### עץ services + screens
- `services/report_template_service.dart` — registry של built-ins, getter לפי id
- `services/branding_service.dart` — upload לוגו, signed URL, position picker
- `services/pdf_service.dart` עודכן: מקבל `IReportTemplate` ו-branding
- `screens/settings/branding_screen.dart` חדש — לוגו upload + position picker + template chooser + accent color

### Milestones
- **M6 הורחב** מ-"PDF + Email" ל-"PDF + Email + Templates" עם הערה על תנאי מקדים (כיול עם דוגמאות דו"ח)

### CLAUDE.md
- תת-סעיף חדש: "VitSiteTrack — Report Templates & Branding (plan §3.6, הוספה סשן 0014)"

## החלטות שהתקבלו

1. **גישת built-in templates על פני generic template engine ב-MVP** — 3–5 קלאסי Dart implementations נטענים מ-registry. פשוט יותר, מהיר יותר ל-render, אין JSON parsing. generic engine נדחה ל-M9+ עבור Custom Templates של Office tier.
2. **כיול הטמפלייטים = משימה ידנית עם המשתמש לפני M6** — לא AI. המשתמש מספק PDF/Word דוגמאות אמיתיות מהשטח, אנחנו מנתחים יחד את הרובריקות והעיצוב הנפוץ.
3. **Auto-adapt מקובץ דו"ח משרדי נדחה מפורשות** — מודע שזה הפיצ'ר ה-"WOW" אך עלות AI + עלות פרטיות + מורכבות OCR לא משתלמים בסקייל הנוכחי. הומר ל-Custom Templates ידני ל-Office tier ב-M9+.
4. **Branding ברמת org, לא ברמת user, כברירת מחדל** — משרד הוא יחידת המיתוג. user יכול override אך זה לא מסלול ברירת המחדל.
5. **Logo position = enum סגור של 8 ערכים** (כולל watermark) — לא חופשי. מונע פורמטים מוזרים ומפשט את ה-PDF renderer.

## בעיות שנפתרו

לא היו בעיות טכניות בסשן הזה — כולו תכנון/דוקומנטציה. סדר הביצוע של M2 לא השתנה (שדות branding מצטרפים ל-org.dart מהמודל הראשון).

## מה לא עבד / צריך להיזהר

- **CLAUDE.md ממשיך לגדול** — אחרי תוספת §3.6 התת-סעיף החדש מצטרף ל-3 סעיפי VitSiteTrack שכבר ארוכים (Analytics, Security, ועכשיו Templates). כלל הסקיל הוא "לא לעלות על 150 שורות" — CLAUDE.md הרבה מעבר. יש לעשות consolidate ב-/anthropic-skills:consolidate-memory בסשן עתידי.
- **תנאי מקדים ל-M6 = איסוף דוגמאות דו"חות אמיתיים** — אם המשתמש לא יאסוף עד M6, צריך לחסום או לבנות 3–5 טמפלייטים גנריים על סמך תחושת בטן (יורד באיכות).
- **בחירת טמפלייט per-visit ב-Draft Editor** מוסיפה state ל-`visits` doc — לוודא שזה לא נשבר ע"י ה-write validation rules (immutable fields list).

## קבצים שנוצרו/שונו

### נוצרו
- `D:\Vitruvius Ecosystem\Sessions\0017-טמפלייטים-ומיתוג-VitSiteTrack-context-now.md`
- `D:\Vitruvius Ecosystem\Sessions\0017-טמפלייטים-ומיתוג-VitSiteTrack-session.md`
- `D:\Vitruvius Ecosystem\Sessions\0017-טמפלייטים-ומיתוג-VitSiteTrack-kickoff.md`
- `D:\Vitruvius Ecosystem\VitSiteTrack\0017-kickoff.md` (עותק)

### שונו
- `C:\Users\elyas\.claude\plans\snuggly-exploring-newell.md` — §3.6 חדש · §3.1 schema (orgs+users branding) · עץ services (3 שירותים+מסך branding) · M6 milestone
- `D:\Vitruvius Ecosystem\VitSiteTrack\PLAN.md` — סונכרן (43KB)
- `D:\Vitruvius Ecosystem\CLAUDE.md` — תת-סעיף "VitSiteTrack — Report Templates & Branding"
- `D:\Vitruvius Ecosystem\Sessions\sessions-index.html` — שורת 0017 + kickoff store

## הצעד הבא

ללא שינוי מסשן 0014 — M2 שלב 1 (קוד):
1. `firebase firestore:databases:create "(default)" --location=europe-west1 --project=vitsitetrack --account=vitruviusecosystem@gmail.com`
2. Models לפי §3.1 המעודכן (כולל שדות branding ב-org.dart)
3. `analytics_service.dart` allowlist wrapper
4. Firestore Rules path-scoped + custom claim + write validation
5. `setOrgClaim` Function
6. `firestore_service.dart` CRUD + Riverpod
7. App Check monitor + email-enumeration protection
8. מקביל: OAuth verification

**משימת רקע (M6 prerequisite):** המשתמש יתחיל לאסוף 4–6 דוגמאות דו"ח פיקוח עליון ממשרדים שונים.
