# הקשר להמשך ישיר — 0023 (M2 ✓ closed in code)
תאריך: 2026-05-23 (סוף סשן ארוך — M2 שלבים 1+2+3+4 כולם נסגרו)
אפליקציה: VitSiteReport

## מה בנוי עכשיו — M2 ✓ סגור בקוד

### Architecture & Schema
- Firestore חי ב-europe-west1, rules deployed (כולל `visitsCounter` ב-project keys allowlist)
- 7 Models: org / user_profile / project (+`visitsCounter`) / contact / **visit** (חדש) / finding / report
- 3 Services: `analytics_service` (allowlist 16 events + value guard) / `firestore_service` (כל ה-CRUD + atomic counters + `acceptTos` + `ackDisclaimer`) / `bootstrap_service`
- 12 Providers: services + bootstrap + auth state + currentUserProfile (Stream אמיתי) + projects + projectProvider.family + visits/visit/contacts/distributionList/openFindings/allFindings (כולם family)
- **flutter analyze ✓ No issues found**

### Screens — flow מלא end-to-end
```
Login (Google ✓ / Microsoft stub) → user_signed_in analytics
  ↓ bootstrap (profile+org idempotent)
  ↓ ToS gate (PopScope blocking, scroll-to-end gating, checkbox, accept)
ProjectsList → Project Detail (3 tabs Visits/Findings/Settings)
  ↓ Settings tab: contacts list + dist-list switches + branding placeholder + Privacy/Legal link
  ↓ FAB "התחל סיור"
Attendees (free-form + contacts picker) → createVisit (atomic)
  ↓ open findings? → Carry-Over (groups by discipline, ChoiceChip per row)
Visit (start-time header + finding counter + FAB)
  ↓ FAB "ממצא חדש"
Finding Form (title/severity/discipline/safety/location/due/assignees)
  ↓ first safetyUrgent → modal disclaimer with ack
createFinding (atomic counter, FieldValue.arrayUnion to visit.findingIds)
```

### Legal & Disclaimers (Plan §3.7 strategy — 5 layers)
| שכבה | סטטוס |
|---|---|
| 1. ToS modal ב-signup | ✓ (currentTosVersion=1.0.0-2026-05, gate ב-_AuthGate) |
| 2. דיסקליימר דו-שכבתי ב-PDF | ⏳ M6 (PDF rendering not built) |
| 3. מודאלים בנקודות מפתח | ✓ first_safety_urgent עובד · first_ai_rephrase ב-M5 · first_send_report ב-M5 |
| 4. Modal לפני שליחה | ⏳ M5 (send flow not built) |
| 5. Privacy/Legal screen ב-Settings | ✓ (ToS full + privacy summary + acceptance status) |

### Analytics (Plan §3.4)
Wired: `project_created` · `visit_started` · `visit_ended(duration,finding_count)` · `finding_added(type,has_photo/sketch/voice)` · `user_signed_in(provider)`
Pending (waiting for related feature): voice/transcription/draft/report_rendered/report_sent/seat/upgrade_prompt

### Security (Plan §3.5)
- Rules user-doc model (deviation from Plan — Spark constraint, anti-spoof על ownsTargetOrg). Return to custom-claim ב-M5-M6 כש-Blaze ייפתח
- `functions/setOrgClaim` כתוב, מנותק מ-firebase.json ("DEFERRED" header)
- App Check, KMS, encryptedTokens — כולם stubbed per rules (allow=false), ייכנסו ב-M5-M6

## משימות חיצוניות שנותרו (לא קוד)
🟡 **🔬 Hebrew transcription spike** — להריץ לפני M5: 5 הקלטות מבחן עם כלונס/ממ"ד/גמר טייח/איטום בוטומיני → WER ≥80% מול ספק הבחירה (Google STT / Microsoft Cognitive / Whisper). אם נכשל → שינוי ספק לפני שמשלבים עם finding form
🟡 **Google OAuth verification** — `gmail.send` scope, ימים-שבועות
🟡 **Microsoft Publisher Verification** — Partner account + DNS-verified domain, שבועות
🟡 **Contacts import** — דורש OAuth (Contacts scope), נדחה עד שה-OAuth ייגמר
🟡 **Blaze upgrade** — דחוי ל-M5-M6 (תלוי בכל הפונקציות יחד: sendReportEmail+cryptoFn+mintSignedUrl+setOrgClaim)

## הצעד הבא — M3
**M3 = Camera + Annotation + Upload Queue + Outdoor Mode** (PLAN שורה 617):
1. מצלמה דרך `camera` package (כבר ב-pubspec)
2. 5 כלי סקיצה: חץ / מסגרת / טקסט / freehand / מחק (+ 3 צבעים: אדום/צהוב/לבן)
3. Upload queue ל-Storage עם indicator + retry exponential backoff
4. Stylus support (S-Pen בטאבלטים)
5. Outdoor mode toggle ב-tour header

### לפני M3 — חוקי הגלובלי
לפני `flutter build apk --debug` חדש → לארכב את ה-APK הישן של M1 ל-`build\app\outputs\flutter-apk\OLD\app-debug-<timestamp>.apk`.

## חשבון
- VitSiteReport **תמיד עסקי** `vitruviusecosystem@gmail.com` (Override ב-CLAUDE.md)

## רוקאפ — קבצים שנוצרו / שונו בסשן 0023
חדשים:
- `lib/legal/tos.dart`
- `lib/models/visit.dart`
- `lib/providers/providers.dart` (הורחב מאוד)
- `lib/screens/contacts/contact_form_screen.dart`
- `lib/screens/legal/{tos_acceptance,privacy_legal}_screen.dart`
- `lib/screens/projects/project_detail_screen.dart`
- `lib/screens/visit/{attendees,carry_over,visit,finding_form}_screen.dart`
- `lib/widgets/{vit_icon,bidi_text}.dart`

שונו:
- `lib/main.dart` (4-state router gate)
- `lib/models/{project,user_profile}.dart` (visitsCounter + disclaimers fields)
- `lib/screens/auth/login_screen.dart` (Consumer + analytics)
- `lib/screens/projects/projects_list_screen.dart` (onTap → detail)
- `lib/services/{firestore,auth}_service.dart`
- `firestore.rules` (visitsCounter ב-keys, deployed)
- `lib/l10n/app_{he,en}.arb` (~130 מחרוזות חדשות)
