Reorganize: skills/ directory + move memory to docs/

skill-legal-decision/ → skills/decision/
skill-legal-assistant/ → skills/assistant/
skill-legal-docx/ → skills/docx/
memory/*.md → docs/

Also removed: TASKS.md (use TaskMaster), classifier.py (replaced by local_classifier.py)
Updated all references in CLAUDE.md, scripts, PRDs, docs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-04 14:27:07 +00:00
parent d5ccf03e4c
commit 911c797eb2
21 changed files with 224 additions and 316 deletions

264
skills/assistant/SKILL.md Normal file
View File

@@ -0,0 +1,264 @@
---
name: legal-assistant
description: עוזר משפטי לניתוח וקטלוג תיקים שיפוטיים. Skill זה משמש לריכוז, ניתוח וקטלוג כרונולוגי של מסמכים משפטיים סרוקים ליצירת ציר זמן דיוני (Table of Contents). יש להשתמש ב-skill זה כאשר המשתמש מבקש לנתח מסמכים משפטיים, ליצור טבלת תוכן עניינים לתיק, או להכין תשתית לכתיבת פסק דין.
---
# עוזר משפטי לניהול וקטלוג תיק שיפוטי
## מטרת ה-Skill
ריכוז, ניתוח וקטלוג כרונולוגי של מאגר מסמכים סרוקים לצורך הכנת תשתית לכתיבת פסק דין.
התוצר הסופי הוא "ציר זמן דיוני" מפורט ומדויק בפורמט טבלה.
## מתי להשתמש ב-Skill
- כאשר המשתמש מעלה מסמכים משפטיים לניתוח
- כאשר נדרש ליצור ציר זמן דיוני או Table of Contents
- כאשר נדרש לסכם ולקטלג תיק שיפוטי
- כאשר מכינים תשתית לכתיבת פסק דין
## תהליך העבודה
### שלב א': הכנת החומר (Preprocessing)
1. **קיבוץ מסמכים**: לעבוד על קבוצות של עד 20-30 קבצים בכל פעם כדי לא להעמיס על זיכרון ההקשר.
2. **שמות קבצים**: לוודא שלקבצים יש שמות בסיסיים (למשל: `doc_001.pdf`).
3. **תמלול PDF ל-Markdown** ⚠️ **חובה**:
- **לכל קובץ PDF יש ליצור קובץ MD מקביל** באותה תיקייה
- להשתמש בכלי `mcp__gemini-vision__analyze_document` לתמלול
- לשמור את התמלול עם אותו שם קובץ וסיומת `.md`
- **דוגמה**: `כתב-ערר.pdf``כתב-ערר.md`
- לשמור על מבנה המסמך המקורי: כותרות, פסקאות, רשימות ממוספרות, טבלאות
### שלב ב': ניתוח המסמכים
עבור כל מסמך, לבצע את הפעולות הבאות:
1. **זיהוי תאריך קובע**:
- לחפש חותמת "נתקבל" של בית המשפט - זהו התאריך הקובע
- אם אין חותמת, לחפש את תאריך המכתב/בקשה
- **חשוב**: להבחין בין תאריך יצירת המסמך לבין תאריך הגשתו
2. **זיהוי הצד המגיש**:
- תובע / נתבע / צד ג' / בית המשפט (החלטה)
3. **סיכום המהות**:
- לסכם ב-20 מילים את מהות המסמך והסעד המבוקש
4. **הערות מיוחדות**:
- אם המסמך הוא "תגובה" המציינת תאריך של מסמך קודם - לציין זאת
- לציין חריגות: "הוגש באיחור", "חתימה חסרה" וכו'
### שלב ג': מבנה הטבלה הנדרש
הטבלה צריכה לכלול את העמודות הבאות:
| עמודה | תיאור |
|-------|-------|
| מספר סידורי | לפי סדר כרונולוגי |
| תאריך קובע | תאריך ההגשה/חותמת |
| שם המסמך | תיאור משפטי תקני |
| הצד המגיש | תובע/נתבע/צד ג'/בית המשפט |
| תמצית המהות | 2-3 משפטים על עיקרי הטענות/ההחלטה |
| הערות מיוחדות | חריגות, קישורים למסמכים קודמים |
### פורמט הפלט
להציג את התוצאה בפורמט טבלה מוכנה להעתקה ל-Excel, לדוגמה:
```
מס' | תאריך | שם המסמך | מגיש | תמצית | הערות
1 | 01/01/2024 | כתב תביעה | תובע | תביעה לפיצויים בסך 100,000 ש"ח בגין הפרת חוזה | -
2 | 15/01/2024 | כתב הגנה | נתבע | הכחשת טענות התובע, טענה לפגם בחוזה | תגובה לכתב תביעה מ-01/01/2024
```
## נקודות קריטיות לבקרת איכות
1. **פענוח חותמות**: חותמות דיו חלשות עלולות להיות קשות לקריאה - לבקש מהמשתמש לאמת במקרה של ספק.
2. **הבחנה בין סוגי מסמכים**: להקפיד לא להתבלבל בין:
- "החלטה" לבין "בקשה"
- "פסק דין" לבין "החלטה"
- "תגובה" לבין "בקשה עצמאית"
3. **הצלבת נתונים**: כאשר מסמך מתייחס למסמך קודם - לציין את הקשר בעמודת ההערות.
## דוגמה לפרומפט עבודה
כאשר המשתמש מעלה מסמכים, להגיב בצורה הבאה:
> אני מנתח את המסמכים שהעלית. עבור כל מסמך אזהה:
> - תאריך קובע (חותמת "נתקבל" או תאריך המסמך)
> - הצד המגיש
> - מהות המסמך
>
> אציג את התוצאות בטבלה מוכנה להעתקה ל-Excel.
> האם יש מסמכים נוספים לניתוח?
---
## טיפול בעררים/תיקים מאוחדים
כאשר מטפלים במספר עררים או תיקים שאוחדו לדיון משותף:
### מבנה תיקיות מותאם
```
[שם-פרויקט]/
├── README.md # סיכום התיק
├── קטלוג-מסמכים.md # ציר זמן דיוני
├── החלטה/ # לכתיבת ההחלטה
├── תכנון/ # טיוטות
└── חומרי-מקור/
├── [מספר-ערר-1]/ # מסמכים ייחודיים לערר 1
│ └── כתב-ערר/
├── [מספר-ערר-2]/ # מסמכים ייחודיים לערר 2
│ └── כתב-ערר/
└── משותף/ # מסמכים משותפים לכל העררים
├── כתבי-תשובה/
├── פרוטוקולי-דיון/
├── החלטות/
├── בקשות/
├── חוות-דעת/
└── מסמכים-נוספים/
```
### סיווג מסמכים
| סוג מסמך | תיקיית יעד |
|----------|------------|
| כתבי ערר ייחודיים | `[מספר-ערר]/כתב-ערר/` |
| כתבי תשובה | `משותף/כתבי-תשובה/` |
| פרוטוקולי דיון | `משותף/פרוטוקולי-דיון/` |
| החלטות ביניים/סופיות | `משותף/החלטות/` |
| בקשות (דחייה, הארכה) | `משותף/בקשות/` |
| חוות דעת מומחה | `משותף/חוות-דעת/` |
| מצגות, תשריטים, אחר | `משותף/מסמכים-נוספים/` |
---
## שינוי שמות קבצים
### פורמט שמות
```
[YYYY-MM-DD]-[סוג-מסמך]-[מגיש]-[פרטים].pdf
```
### דוגמאות
| שם מקורי | שם חדש |
|----------|--------|
| `ערר.pdf` | `2025-02-09-כתב-ערר-רחמים-ואחרים.pdf` |
| `כתב תשובה לעררים...pdf` | `2025-06-16-כתב-תשובה-ועדה-מקומית.pdf` |
| `פרוטוקול דיון...pdf` | `2025-06-29-פרוטוקול-דיון-ראשון.pdf` |
| `בקשה דחופה...pdf` | `2025-07-16-בקשה-דחיית-דיון-יציב.pdf` |
### כללי שמות
1. **תאריך בהתחלה** - מאפשר מיון כרונולוגי אוטומטי
2. **מקפים במקום רווחים** - מונע בעיות בטרמינל
3. **עברית מותרת** - לקריאות מיטבית
4. **ללא תווים מיוחדים** - רק אותיות, מספרים, מקפים
---
## זיהוי וטיפול בכפילויות
### סוגי כפילויות נפוצים
1. **signed vs unsigned**:
- לשמור רק גרסת `signed`
- לסמן unsigned כ-`-מסמך-כפול` או למחוק
2. **קבצים זהים בתיקיות שונות** (בעררים מאוחדים):
- להעביר עותק אחד ל-`משותף/`
- לא לשכפל לכל תיקיית ערר
3. **גרסאות עם מספור** (למשל `(1)`, `(2)`):
- לזהות איזו הגרסה האחרונה
- לשמור רק אותה
### תהליך זיהוי
```bash
# השוואת שמות קבצים בין תיקיות
comm -12 <(ls תיקייה1 | sort) <(ls תיקייה2 | sort)
```
### כלל אצבע
אם קובץ מופיע ביותר מתיקייה אחת עם שם זהה - הוא כנראה משותף ויש להעבירו פעם אחת לתיקייה `משותף/`.
---
## תמלול מסמכי PDF ל-Markdown
### חובת תמלול
**כל קובץ PDF בתיק חייב להיות מתומלל לקובץ Markdown מקביל.** זה מאפשר:
- חיפוש בתוכן המסמכים
- העתקה והדבקה של ציטוטים
- עריכה ועיבוד הטקסט
- שמירה על הידע גם ללא גישה לכלי קריאת PDF
### תהליך התמלול
1. **זיהוי קבצי PDF** בתיקייה:
```bash
find . -name "*.pdf" -type f
```
2. **תמלול כל PDF** באמצעות:
```
mcp__gemini-vision__analyze_document
- document_path: [נתיב לקובץ]
- prompt: "תמלל את המסמך במלואו בעברית. שמור על המבנה המקורי - כותרות, פסקאות, רשימות ממוספרות. אם יש טבלאות, שמור עליהן בפורמט markdown."
```
3. **טיפול בתוצאה ארוכה** ⚠️ מסמכים משפטיים הם בדרך כלל ארוכים (20-60 עמודים). כש-`analyze_document` מחזיר תוצאה שחורגת ממגבלת הטוקנים:
- התוצאה נשמרת אוטומטית לקובץ זמני (הנתיב מופיע בהודעת השגיאה)
- **השתמש ב-Task agent** (subagent_type: general-purpose) כדי לקרוא את הקובץ הזמני בחלקים (offset/limit) ולשמור אותו כ-MD
- אל תנסה לקרוא את הקובץ הזמני ישירות - הוא בדרך כלל חורג מ-25K טוקנים
4. **שמירת התמלול** כקובץ MD:
- באותה תיקייה כמו ה-PDF
- עם אותו שם קובץ
- סיומת `.md` במקום `.pdf`
### פורמט התמלול
```markdown
# [כותרת המסמך]
**תאריך:** [תאריך המסמך]
**לכבוד:** [נמען]
---
## 1. [כותרת סעיף ראשון]
1.1. [תוכן תת-סעיף]
1.2. [תוכן תת-סעיף]
---
## חתימות
| שם | מ.ז |
|---|---|
| [שם] | [מספר זהות] |
```
### סוגי מסמכים לתמלול
| סוג מסמך | עדיפות | הערות |
|----------|--------|-------|
| כתבי ערר | גבוהה | מכילים את טענות העוררים |
| כתבי תשובה | גבוהה | מכילים את עמדת המשיבים |
| פרוטוקולי דיון | גבוהה | מתעדים את הנאמר בדיון |
| החלטות קודמות | בינונית | לצורך הפניות ופסיקה |
| חוות דעת | בינונית | מסמכים טכניים |
| נספחים | נמוכה | לפי הצורך |

501
skills/decision/SKILL.md Normal file
View File

@@ -0,0 +1,501 @@
---
name: legal-decision
description: This skill should be used when writing legal decisions (החלטות) for betterment levy appeals (היטל השבחה) and licensing appeals (רישוי). It applies low temperature for accuracy and high token output for elaborate legal analysis with citations from case law.
---
# סגנון כתיבת החלטות - דפנה תמיר
מדריך זה מלמד לכתוב החלטות של ועדת ערר לתכנון ובניה בסגנון של יו"ר הוועדה דפנה תמיר. המדריך עוסק אך ורק בסגנון הכתיבה, במבנה, בביטויים ובשיטה האנליטית. הפסיקה הרלוונטית תסופק בכל ערר בנפרד.
סוגי עררים: היטל השבחה (מספרי 8xxx), רישוי ובנייה (מספרי 1xxx), תכנון (מספרי 1xxx).
## 1. זיהוי סוג הערר והטון
מספר הערר קובע את הטון. ערר רישוי (1xxx) נכתב בטון חם יחסית עם אלמנטים אנושיים בסיום. ערר היטל השבחה (8xxx) נכתב בטון קר, יבש ומקצועי, ללא רגשות.
סוג הערר משפיע על טון הכתיבה, על פתיחת הדיון (רחבה עם הקשר תכנוני ברישוי לעומת ישירה בהיטל השבחה), על סיום ההחלטה (פסקת סיום חמה ברישוי שנדחה לעומת סיום יבש בהיטל השבחה), ועל יחסי החלקים במסמך.
## 2. מבנה המסמך
### 2.1 כותרת והרכב
המסמך נפתח בכותרת מובנית הכוללת: שם המוסד (מדינת ישראל, ועדת ערר לתכנון ובניה, מחוז ירושלים), מספר תיק, הרכב הוועדה (יו"ר וחברים), שמות הצדדים ובאי כוחם, והמילה "החלטה".
### 2.2 סדר הפרקים
הרקע העובדתי מתחיל ישירות בסעיף 1, ללא כותרת מפורשת. לאחריו באים: "תמצית טענות הצדדים" עם תת-פרקים לכל צד (טענות העוררים, עמדת הוועדה המקומית, עמדת מבקשי ההיתר), ואז "דיון והכרעה", ולבסוף "סיכום" או "סוף דבר".
כשהוועדה המקומית קיימה דיון מנומק, ייתכן פרק נפרד שמצטט את הפרוטוקול לפני הטענות. כשהדיון בפני ועדת הערר הוסיף מעבר לכתבי הטענות, ייתכן תת-פרק "הדיון בפני ועדת הערר" או "הבהרות".
כותרת הסיום: "סיכום" מועדף בעררי היטל השבחה ובדחיות. "סוף דבר" מועדף בעררי רישוי ובקבלות. לא "סיכום והכרעה".
### 2.3 כותרות משנה
כותרות משנה מופיעות רק כשיש הבחנה בין צדדים (טענות העוררים, הוועדה המקומית, מבקשי ההיתר) או בין נושאים מרכזיים שונים. בפרק הדיון וההכרעה הכלל הוא אסה רציפה אחת ללא כותרות משנה, והמעברים נעשים באמצעות ביטויי מעבר טקסטואליים. החריג: כשיש מספר נושאים נפרדים לחלוטין (למשל: "הבקשה להקלה בגובה המבנה" ואז "התייחסות לטענות נוספות שעלו בכתב הערר"), מותרת כותרת נושאית.
### 2.4 מספור סעיפים
מספרים עוקבים לאורך כל המסמך: 1, 2, 3 וכו'. אין איפוס מספור בין פרקים. המספור ממשיך ברצף מ-1 עד הסוף.
## 3. סגנון ניסוח
### 3.1 אורך סעיפים
בחלק הרקע והטענות: סעיף טענה רגיל הוא 40-60 מילים (פתיחה, טענה, פירוט, השלכה - לא פחות מ-3 משפטים). סעיף תגובה הוא 50-80 מילים (דחיית הטענה, נימוק, ראיה). סעיף עם ציטוט הוא 80-150 מילים (הקדמה, ציטוט, הסבר). סעיפי גשר בלבד הם 15-30 מילים ("נבהיר כי...", "כך גם נציין..."). הממוצע הכולל: 45-55 מילים לסעיף.
בחלק הדיון וההכרעה: הסעיפים ארוכים יותר משמעותית. סעיף ניתוח רגיל הוא 40-80 מילים. סעיף עם ציטוט מקיף מפסיקה או מהחלטה מרכזת יכול להגיע ל-200-600 מילים - ואין לפצל ציטוט כזה למספר סעיפים. הממוצע בדיון: 80-120 מילים לסעיף כולל ציטוטים.
דוגמה לסעיף טענה תקין (כ-40 מילים): "העוררים טוענים כי נפל פגם מהותי בהליך ההמצאה. לטענתם, תכניות הבנייה והבקשה להיתר לא הומצאו לידיהם כנדרש. העוררים מדגישים כי אי-ההמצאה מנעה מהם את האפשרות להתנגד במועד, ולטענתם מדובר ב'מחטף' שנועד לעקוף את זכות ההתנגדות של בעלי הזכויות בנכס."
### 3.2 יחסי הזהב - חלוקת אחוזים
ערר רישוי שנדחה (1xxx): פתיחה 0.5%, רקע 15-25%, טענות 30-40%, דיון 37-50%, סיכום 2-9%. מאפיינים: פתיחת דיון עם הקשר תכנוני רחב (5-8 פסקאות), אלמנטים אנושיים בסיום.
ערר רישוי שמתקבל (1xxx): רקע כולל ציטוט מפרוטוקול הוועדה 30-40%, טענות כולל השלמת מסמכים 20-30%, דיון עם ניתוח נימוק-נימוק 35-45%, סוף דבר 3-5%. מאפיינים: פתיחת דיון ישירה, דיון ארוך עם חזרות מכוונות, סיום עניני.
ערר רישוי שמתקבל חלקית (1xxx): רקע כולל ציטוט מפרוטוקול 25-35%, טענות כולל השלמת טיעון 25-30%, דיון 40-47%, סיכום 2-3%. מאפיינים: פתיחת דיון עם מיפוי מתחים (3-6 סעיפים), דיון ארוך עם ציטוטים נרחבים מהוראות תכנית ונספחים, סיכום מינימלי-אופרטיבי. ראה: בית הכרם 1126/25.
ערר היטל השבחה (8xxx): פתיחה 5-7%, רקע 6-18%, טענות 13-25%, דיון 32-48%, סיכום 3-4%. מאפיינים: פתיחה ישירה, הרבה ציטוטי פסיקה, סיום יבש.
### 3.3 הגדרות בשיטת "להלן"
פורמט קבוע: (להלן: "שם ההגדרה"). ההגדרה מופיעה במירכאות כפולות, בסוגריים לאחר האזכור הראשון. ניתן להגדיר שני מונחים חלופיים עם קו נטוי: (להלן: "התכנית" או "תכנית הל/435"). דוגמאות: (להלן: "הבקשה להיתר"), (להלן: "הבניין" / "המקרקעין"), (להלן: "התקנות").
### 3.4 ציטוטים ארוכים
ציטוטים ארוכים מפרוטוקולים, תכניות או פסיקה מוצגים כבלוק נפרד עם כניסה. לעיתים עם הערה "(הדגשת הח"מ)" או "(הדגשת הח.מ.)". ציטוטים ארוכים הם כלי מרכזי - דפנה מעדיפה לצטט בלוק ארוך אחד (200-500 מילים) מתוך החלטה מרכזת שכבר ריכזה את הפסיקה, במקום לצטט כל פסק דין בנפרד.
### 3.5 תמונות ונספחים
תמונות ותשריטים משולבים בטקסט עם הפניה מילולית: "להלן מתוך נספח האדריכלות והבקשה להיתר שם ניתן לראות את הדברים:", "להלן תמונת המגרשים הרלוונטיים מתוך מערכת ה-GIS של הוועדה המקומית", "להלן מתוך נספח הבינוי המצורף להוראות התכנית". העיצוב הטכני נעשה בשלב הוורד.
### 3.6 קיצורים משפטיים
עו"ד (עורך דין), ב"כ (בא כוח), עוה"ד (עורך הדין), יח"ד (יחידת דיור), מ"ר (מטר רבוע), תב"ע (תכנית בניין עיר), רמ"י (רשות מקרקעי ישראל), ר"ר / בר"ר (רשות רישוי), סה"כ (סך הכל).
### 3.7 פורמט תאריכים ומספרים
תאריכים: DD.MM.YY (לדוגמה: 12.06.25 או 17.4.2024). מספר תכנית: 102-1170893 או הל/435. מספר בקשה להיתר: 20250337. גוש וחלקה: גוש 30322 חלקה 77 מגרש 13.
### 3.8 עקרונות כלליים
הקורא צריך להבין את ההקשר המלא מקריאת ההחלטה בלבד. תן הקשר מלא ואל תניח שהקורא מכיר את התיק. ציטוט עדיף על תמצות כשיש מסמך מקור. פרט מספרים ונתונים מדויקים ("10 מתוך 14 דירות (71.4%)" ולא רק "רוב"). הסבר מונחים ("במסלול הירוק, קרי היתרים תואמי תכנית").
## 4. הצגת טענות הצדדים
### 4.1 טענות העוררים
מבנה סעיף: מספר, תיאור הטענה, פירוט, השלכות לטענת העוררים. ביטויים: "העוררים טוענים כי...", "לטענתם...", "העוררים מדגישים כי...", "עוד ציינו כי...", "לטענתם מדובר ב...", "העורר מוסיף וטוען כי...", "לחיזוק טענתו, מצביע העורר על...", "לחיזוק טענותיו...". טענות מהדיון: "בדיון הוסיפו וטענו העוררים כי...", "בדיון הוסיפה וטענה העוררת גב' [שם] כי...". הבהרות: "במסגרת הודעת העורר כי הצדדים לא הגיעו לפתרון מוסכם ביניהם צירף העורר הבהרה וטען כי...".
### 4.2 עמדת הוועדה המקומית
פתיחה: "במסגרת כתב התשובה ובדיון בפנינו הוועדה המקומית הציגה את עמדתה באופן מפורט." ביטויים: "הטענה המרכזית הינה כי...", "הוועדה המקומית הציגה נתונים מפורטים לעניין...", "הוועדה המקומית הבהירה כי...", "הוועדה הוסיפה כי...", "הוועדה המקומית טוענת כי...", "הוועדה המקומית מוסיפה כי...", "עוד טוענת הוועדה המקומית כי...", "לבסוף טוענת הוועדה המקומית כי...".
### 4.3 טענות מבקשי ההיתר
ביטויים: "מבקשי ההיתר דוחים מכל וכל את הטענה...", "לטענתם...", "מבקשי ההיתר מציינים כי...", "מבקשי ההיתר מבהירים כי...", "עוד מציינים מבקשי ההיתר כי...", "מכל מקום, מבקשי ההיתר...", "לגופו של עניין...", "לאור האמור, מבקשי ההיתר עותרים ל...".
### 4.4 כללים
הפרדה ברורה בין הצדדים - כל צד בפרק נפרד. סדר קבוע: עוררים, וועדה מקומית, מבקשי היתר. אין שילוב של טענות צדדים שונים באותו סעיף.
## 5. ביטויים ומעברים
### 5.1 ביטויים כלליים
"לפנינו" - פתיחת המסמך ("לפנינו שני עררים..."). "לענייננו" - מיקוד בנקודה רלוונטית. "נבהיר כי" - הבהרה חשובה. "כך גם נציין כי" - הוספת נקודה משלימה. "מדובר ב..." - הסבר עובדתי. "כפי ש..." - הפניה למידע קודם. "ואשר עניינם/עניינה ב..." - הגדרת נושא. "ככל ש..." - תנאי. "הרי ש..." - מסקנה. "מכל מקום" - מעבר לטענה חלופית. "לגופו של עניין" - מעבר לדיון המהותי. "אדרבא" - טענה נגדית חזקה. "קרי" - הסבר/פירוש. "כאמור" - הפניה לדבר שנאמר קודם. "בענייננו" - מעבר מכלל לפרט.
### 5.2 ביטויי מעבר בפרק הדיון
"ועל מנת לא לצאת בחסר" - פתיחת obiter dicta / נימוקים נוספים. דוגמה: "אך יחד עם זאת ועל מנת לא לצאת בחסר מצאנו להוסיף..."
"נציין כי טענות אלו נטענו בלשון רפה" - הכרה שטענות חלשות אבל נדונות. דוגמה: "...אך יחד עם זאת נדרשנו אליהם מכח הלכת שפר."
"עינינו הרואות" - סיכום ביניים לאחר ציטוט ארוך.
"נוסיף." - מעבר קצר (משפט אחד) לפני ציטוט נוסף.
"אם כן" / "אם כך" - הסקת מסקנה מציטוט או ניתוח. דוגמה: "אם כך, לעת הזו, הגישה הנוהגת היא ש..."
"למעלה מן הצורך" - דיון שאינו הכרחי להכרעה אבל נכתב מטעמים אסטרטגיים.
"ברי כי" - מסקנה מובנת מאליה.
"נפנה ל..." - פתיחת ניתוח של סעיף חוק/פסיקה.
"למיטב הבנתנו" - עמדה זהירה בסוגיה שטרם הוכרעה.
"נשלים ונציין" - תוספת אחרונה לפני הסיכום.
"מכל האמור לעיל" - מעבר לסיכום.
"נשוב על כך כי" - חזרה מכוונת על עקרון חשוב שכבר נאמר. דוגמה: "נשוב על כך כי ההחלטה לאישור הבקשה אין בה בכדי להוות כל הכרעה קניינית."
"דא עקא" - הצגת הבעיה המרכזית או מה שסותר את הטענה.
"ובמילים אחרות" - חידוד/פרפרזה של נקודה שנאמרה.
"הגענו לכלל מסקנה כי" - מסקנה מרכזית (בפתיחת דיון).
"לא נוכל לקבל" - דחיית עמדה/טענה.
"מקובלת עלינו" - קבלת עמדה.
"התרשמנו כי" - מסקנה מהדיון/ממסמכים.
"נחדד כי" - חידוד נקודה קודמת.
"סיכומם של דברים" - פתיחת סיכום מהותי לפני "סוף דבר".
"המסקנה מכל האמור היא כי" - מסקנת ביניים מקיפה.
"לעמדתנו" - עמדת הוועדה.
"בנסיבות אלה" - מעבר מעובדות למסקנה.
"נזכיר כי" - תזכורת לעקרון ידוע.
"מצאנו כי" - קביעה עובדתית.
"שוכנענו כי" - קביעה לאחר בחינה.
"על כן ולו רק מסיבה זו" - ניטרול טענה חלשה לפני ניתוח מעמיק.
"יחד עם זאת, מצאנו לנכון לדון בשאלה העקרונית" - מעבר לדיון עקרוני למרות דחייה.
"נסכם כי" - מעבר לסיכום ביניים.
"משכך" - הסקת מסקנה מהאמור.
"הדברים מתחדדים שעה ש..." - חידוד נוסף לאור נסיבות נוספות.
"נחזור על כך כי" - חזרה מודגשת על קביעה חשובה.
"זאת ועוד" - הוספת נימוק נוסף.
"יתרה מכך" - חיזוק הנימוק הקודם.
"לאור כל האמור לעיל" - פתיחת סיכום סופי.
"נפתח בכך כי" - פתיחה של הדיון (לא של המסמך).
"נפנה בעניין זה להחלטת..." - הפניה לתקדים.
"הדברים משליכים על שיקול הדעת ב..." - קישור בין ממצא למסקנה.
"רוצה לומר כי" - הסבר/פרפרזה אלטרנטיבית.
"נוצר מצב בו" - הצגת בעיה/מצב עובדתי.
"לכך נוסיף כי" - הוספת נדבך נוסף לטיעון.
"יש אולי להצר על כך ש..." - הערה ביקורתית עדינה (כלפי מוסד תכנון).
"עם ההבנה לטענה זו של העוררים, אין בידנו לקבלה" - acknowledge-reject מרוכך.
"ברי כי משאב הקרקע יקר לבעליו ולציבור" - הצדקת שימוש יעיל בקרקע.
## 6. השיטה האנליטית - "איך לחשוב" לפני "איך לכתוב"
### 6.1 שומר הסף - שאלת הסף
לפני שנוגעים בטענה לגופה, השאלה הראשונה היא: "יש לעוררים בכלל זכות ערר?" זו לא רק שאלה פרוצדורלית - זו מסגרת הניתוח כולה. **סייג חשוב:** שאלת הסף היא כלי אסטרטגי, לא חובה. בתיקים עם שאלות מהותיות חזקות (חניה, שימור, קווי בניין), דפנה עשויה לדלג על שאלת הסף ולדון ישירות בגוף העניין — במיוחד בקבלה חלקית. ראה: בית הכרם 1126/25 — דילגה על ס' 152 לחלוטין.
### 6.2 קילוף מסכות - סיווג הטענות
לוקחים כל טענה ובוחנים מה מתחת למסכה. האם טענה של "סטייה מתכנית" היא באמת סטייה, או השגה על התכנית עצמה? האם טענה קניינית לבשה כסות תכנונית? הטכניקה: לכתוב במפורש "טענות שהוצגו בכסות של טענות תכנוניות" - לחשוף את האסטרטגיה, לא רק לדחות אותה.
### 6.3 עיגולים קונצנטריים - בניית שכבות
לא לענות על כל טענה בנפרד. לבנות פירמידה של שכבות הגנה: שכבה חיצונית (אין זכות ערר כלל), "אך יחד עם זאת..." שכבה שנייה (גם אם הייתה - אין סטייה מתכנית), "למעלה מן הצורך..." שכבה שלישית (גם על המריטים - ההחלטה נכונה), "עוד נשלים..." שכבה רביעית (הטענות הקנייניות - מקומן בערכאה אחרת). ההחלטה נהיית חסינה מערעור - גם אם בית המשפט לא יקבל שכבה אחת, השכבות האחרות עומדות בפני עצמן. **הערה:** מבנה השכבות מתאים בעיקר לערר שנדחה (כמו הכט 1180-1181). בקבלה חלקית, דפנה עשויה להשתמש במבנה חלופי: הקשר → מיפוי נקודות מתח → ניתוח נושא-נושא → הוראות מעשיות. ראה: בית הכרם 1126/25.
### 6.4 הכרה-דחייה-ניתוב
לעולם לא לומר שהטענה לא לגיטימית. במקום זאת: להכיר ("אכן, לעוררים עומדת זכות להגיש התנגדות קניינית"), לדחות ("אולם הדין לא נתן בידי אותו בעל זכות גם זכות ערר"), לנתב ("מקומן של הטענות להתברר בפני המפקח על הבתים המשותפים").
### 6.5 מיפוי מצב הדין
כשיש שאלה משפטית שטרם הוכרעה, לא לבחור צד ולצטט. למפות את כל המצב: פסיקה A (דעת רוב - כיוון X), עתירה/ערעור, עמדת המדינה (כיוון Y), פסיקה B (חזרה מ-A), ערעור תלוי ועומד (טרם הוכרע), מסקנה: "לעת הזו, הגישה הנוהגת היא ש..."
### 6.6 נדיבות אסטרטגית - למעלה מן הצורך
השימוש ב"למעלה מן הצורך" הוא אסטרטגי: מראה שגם על המריטים התוצאה זהה, מונע טענה של "לא שמעו אותנו", יוצר תקדים גם בשאלות שלא היו חייבים להכריע, בונה קו פסיקתי עקבי.
### 6.7 ניטרול טענה חלשה לפני ניתוח מעמיק
כשיש טענה שאפשר לדחות מסיבה טכנית פשוטה, אבל יש גם שאלה עקרונית מעניינת מאחוריה - דפנה קודם מנטרלת את הטענה ("על כן ולו רק מסיבה זו נכון היה לדחות את הערעור ולסיים את הדיון"), ואז עוברת לדיון עקרוני ("יחד עם זאת, מצאנו לנכון לדון בשאלה העקרונית האם..."). זה מאפשר ליצור תקדים עקרוני מבלי להסתמך על הטענה החלשה.
### 6.8 טכניקת החידוד ("שארפנינג")
חזרה מכוונת על נקודות מפתח, כאשר כל חזרה מוסיפה זווית חדשה. דפנה משתמשת ב"נחדד כי...", "נשוב על כך כי...", "הדברים מתחדדים שעה ש...", "נחזור על כך כי..." - כל אחד מהביטויים האלה לא חוזר על מה שנאמר אלא מוסיף שכבה נוספת של ניתוח.
### 6.9 מנגנון פרשנות תכנית
כשצריך לפרש תכנית בניין עיר, דפנה עוברת ארבעה שלבים: ראשית, בחינת לשון התכנית (ציטוט מדויק מההוראות, בחינה האם ההוראה מחייבת או מנחה, חיפוש ניסוחים מחייבים כמו "בכל מקרה", "לא יעלה על"). שנית, בחינת תכלית התכנית (מה המטרות שהוגדרו, האם מדובר בתכנית נקודתית או כוללנית, מי היו היוזמים). שלישית, בחינת ההיסטוריה התכנונית (מה קבעו תכניות קודמות, האם התכנית החדשה החמירה או הקלה, מה המגמה). רביעית, בחינה ראייתית (היתרים שניתנו באזור, תצלומים, תשריטים, הדמיות).
### 6.10 ניתוח "בית בודד" בתמ"א 38
כשעוסקים בחיזוק/הריסה של בית בודד (להבדיל מבניין מגורים רב-קומתי), אינטרס החיזוק מפני רעידות אדמה מוחלש. דפנה מציינת זאת במפורש: "עסקינן בחיזוק בית בודד ועל כן... לא קיים באופן מלא אינטרס חיזוק כזה המצדיק את אישור מלוא הזכויות." המשמעות: שיקול דעת זהיר יותר באישור מלוא הזכויות מכוח תכנית 10038, במיוחד בנושאי קווי בניין וחניה. "הדברים משליכים על שיקול הדעת באישור הבקשה להיתר." ראה: בית הכרם ס' 41.
### 6.11 תכנית אב כ"מגן" מפני תכנון אד-הוק
כשקיימת תכנית אב/מדיניות לאזור, דפנה משתמשת בה כדי לאמת שהיתר בודד לא יוצר חריג: "קיימת תכנית אב אשר מקלה על בחינת הבקשה... החשש לאישור היתר מכח תכנית 10038 על מגרש בודד ללא ראיה כללית אינו קיים למעשה." דפוס: בדוק אם יש מדיניות → ציטוט הסעיפים הרלוונטיים → מסקנה שההיתר "משתלב עם ראיה כללית קיימת" ולא "מכתיב תכנון עתידי לסביבה". ראה: בית הכרם ס' 42.
## 7. כתיבת פרק הדיון וההכרעה
### 7.1 עקרונות כתיבה
אסה רציפה אחת - ללא כותרות משנה (חריג: נושאים נפרדים לחלוטין). מסקנה בפתיחה - הפרק נפתח עם המסקנה ואז מפרט את הנימוקים. ציטוטים ארוכים ומקיפים - העדפה לבלוק ציטוט אחד ארוך על פני פיצול. הפניה להחלטות מרכזות - במקום לצטט כל פסק דין בנפרד, הפניה להחלטה שכבר ריכזה את הפסיקה. שכבות ניתוח - מסקנה, נימוק ראשי, "אך יחד עם זאת", נימוק משני, "למעלה מן הצורך", obiter.
### 7.2 פתיחת הדיון - לפי סוג ערר ותוצאה
ערר רישוי שנדחה (פתיחה רחבה, 5-8 סעיפים): הדיון נפתח עם הקשר תכנוני רחב שמכין את הקורא. הקשר פרוצדוראלי (1-2 פסקאות) על ניסיון גישור שלא צלח. מהות דיני התכנון כעקרון (2-3 פסקאות) על יצירת פיתוח ואיכות חיים. איזונים בתכנון (1-2 פסקאות) על התחשבות בכל המעורבים. ערך ההתחשבות באחר (1-2 פסקאות). ייחוד המקרה (1 פסקה) - "בענייננו, אנו נדרשים לערוך את האיזונים הללו ולבחון האם...". רק אחרי 5-8 פסקאות אלה - צלול לעניין הספציפי עם מסקנה.
ערר רישוי שמתקבל (פתיחה ישירה, 1-2 סעיפים): "לאחר שמיעת טענות הצדדים ועיון במסמכים שהוגשו, הגענו לכלל מסקנה כי דין הערר להתקבל בכפוף למספר תיקונים בבקשה להיתר כפי שיורחב להלן." ואז הערה פרוצדורלית אם צריך.
ערר היטל השבחה (פתיחה ישירה עם מסקנה): "לאחר שבחנו את טענות הצדדים ונערך דיון בפנינו בו נשמעו בהרחבה, החלטנו בשלב ראשון כי [המסקנה]. אך יחד עם זאת ועל מנת לא לצאת בחסר ומאחר ונשמעו הצדדים בפנינו מצאנו להוסיף מספר הערות והכל כפי שיפורט להלן;"
ערר על פרשנות תכנית / סטיה ניכרת (פתיחה עם שאלה מרכזית): "כאמור השאלה המרכזית בערר הינה בחינת הבקשה ל[נושא הערר]." ואז ניטרול טענות חלשות, ומעבר לדיון עקרוני.
ערר רישוי שמתקבל חלקית (פתיחה במיפוי מתחים, 3-6 סעיפים): 1-2 פסקאות כלליות על ערך התכנון ואיזון אינטרסים. "בערר דנן עולות שאלות כיצד והאם..." → רשימה של 4-6 נקודות מתח ספציפיות בתיק (בבולטים), כל נקודה מתארת ציר מתח בין אינטרסים מנוגדים. "כל הנקודות לעיל עומדות לפנינו ולשם כך קראנו, שמענו את הצדדים..." → מעבר לניתוח. ראה: בית הכרם ס' 37-40.
### 7.3 מסלול דיון לפי סוג ערר
**ערר רישוי שנדחה - מסלול שכבות הגנה:**
פתיחה רחבה עם הקשר תכנוני (5-8 סעיפים). ניתוח זכות הערר (2-4 סעיפים). טענות קנייניות - אין זכות ערר (1-2 סעיפים ארוכים עם ציטוט מקיף מהחלטה מרכזת). דחיית טענות סטייה מתכנית (3-5 סעיפים). "למעלה מן הצורך" - היתכנות קניינית (אופציונלי). התייחסות לטענות ספציפיות (2-3 סעיפים קצרים).
**ערר רישוי שמתקבל - מסלול נימוק-נימוק:**
פתיחה ישירה עם מסקנה. הדיון מאורגן לפי נימוקי הדחייה של הוועדה המקומית. לכל נימוק: הצגת הנימוק ("באשר ל[נימוק] - הוועדה המקומית קבעה כי..."), ניתוח ("מעיון ב... / לא נוכל לקבל... / מקובלת עלינו..."), מסקנת ביניים ("משכך..." / "על כן..."). כשיש היבט קנייני - "נשוב על כך כי..." מופיע לפחות פעמיים (בדיון ובסיכום).
**ערר על פרשנות תכנית / סטיה ניכרת:**
הצגת שאלה מרכזית (1 פסקה). ניטרול טענות חלשות (1-2 פסקאות) - "על כן ולו רק מסיבה זו נכון היה לדחות". מעבר לדיון עקרוני (1 פסקה) - "יחד עם זאת, מצאנו לנכון לדון בשאלה העקרונית". ניתוח מקיף (5-15 פסקאות) באמצעות מנגנון פרשנות התכנית בארבעת שלביו: לשון, תכלית, היסטוריה תכנונית, בחינה ראייתית. ציטוטי פסיקה משולבים (2-3 פסקאות). מסקנה (1-2 פסקאות) עם "נסכם כי" או "לאור כל האמור לעיל".
**ערר היטל השבחה:**
פתיחה ישירה עם מסקנה. ניתוח ישיר - ציטוטי פסיקה מרובים. סיום יבש.
**ערר רישוי שמתקבל חלקית — מסלול מיפוי מתחים + ניתוח נושאי:**
פתיחה במיפוי מתחים (3-6 סעיפים): הקשר כללי קצר (1-2 פסקאות), רשימת נקודות מתח ספציפיות בתיק (4-6 בולטים), מעבר לניתוח. אין שימוש בשכבות/עיגולים קונצנטריים — ניתוח לפי נושאים: כל נושא מקבל טיפול מלא (הצגה → ציטוט הוראות תכנית → פסיקה → מסקנה). נושא חניה/תשתיות מקבל טיפול מעמיק במיוחד עם ציטוטים ישירים מהוראות תכנית ונספחים. טענות ספציפיות (מטרדים, עצים, בור מים) — 1-2 סעיפים תמציתיים לכל אחת. סיכום מינימלי — רק הוראות אופרטיביות (2-3 סעיפים). ראה: בית הכרם 1126/25.
### 7.4 טכניקת "ציטוט דרך החלטה מרכזת"
במקום לצטט כל פסק דין בנפרד, דפנה מפנה להחלטה שכבר ריכזה את הפסיקה: "בכל הנוגע ל[נושא], נפנה לניתוח המקיף שערכה ועדת הערר במסגרת ערר [שם] (פורסם בנבו) משם עולה כי..." ואז ציטוט בלוק ארוך (200-500 מילים) מתוך ההחלטה המרכזת שכוללת הפניות לפסיקה רלוונטית. הסיום: "אם כך, לעת הזו, הגישה הנוהגת היא ש..."
## 8. כתיבת סיכום / סוף דבר
### 8.1 ערר שנדחה
הכותרת: "סיכום". פתיחה: "לאור כל האמור לעיל, הערר נדחה." מבנה: תתי-סעיפים עם אותיות עבריות (א. ב. ג. ד. ה. ו.), כל תת-סעיף = נימוק מסכם.
בערר רישוי שנדחה בלבד - לפני "הערר נדחה", מופיעה פסקת סיום חמה ואנושית. לדוגמה: "טרם סיום נבקש לציין כי כתיבת החלטה זו לא הייתה קלה והדיון נשמע בפנינו בזמנים לא קלים. אנו מצרים כפי שציינו כי הצדדים לא הגיעו לידי הבנות והלוואי ולא היינו נדרשים לכתיבת ההחלטה. אנו תקווה כי חרף אי ההסכמות ישכילו הצדדים לייצר יחסי שכנות טובה כל אחד בדרכו ובעולמו תוך התחשבות והבנה הדדית לצרכי האחד כלפי שכנו." בערר היטל השבחה שנדחה - סיום יבש בלבד.
### 8.2 ערר שמתקבל
הכותרת: "סוף דבר". פתיחה: "לאור כל האמור לעיל, הערר מתקבל בכפוף ל..." או "אשר על כן, לאחר שמיעת הצדדים...". מבנה: סיכום רציף בפרוזה (3-5 פסקאות), כל פסקה מסכמת נימוק אחד, הוראה אופרטיבית. אין פסקה חמה. הסיום עניני: "בנסיבות העניין, אין צו להוצאות."
### 8.3 ערר שמוחזר לדיון
הכותרת: "סיכום" או "סוף דבר". מבנה: הוראות ממוספרות לוועדה המקומית ("תבחן", "תערוך", "תדון").
### 8.4 ערר שמתקבל חלקית
הכותרת: "סיכום". פתיחה: "לאור כל האמור לעיל, הערר מתקבל באופן חלקי." מבנה: 2-3 סעיפים אופרטיביים בלבד — מה מתקבל (בבולד), מה נדחה, תנאים נוספים. ללא חזרה על נימוקים (ההנמקה כבר בדיון). ייתכן ללא התייחסות להוצאות. ללא פסקת סיום חמה. ראה: בית הכרם ס' 84-86.
### 8.5 חתימה
"ניתנה פה אחד, היום [תאריך עברי], [תאריך לועזי]." חתימות יו"ר ומזכירת ועדת הערר.
### 8.6 הוצאות
"בנסיבות העניין, אין צו להוצאות." (או "יש צו להוצאות בסך...") בקבלה חלקית — ייתכן שההוצאות לא יוזכרו כלל.
## 9. דפוסים ייחודיים
### 9.1 חזרה מכוונת - "נשוב על כך כי"
בהחלטות קבלה שיש בהן היבט קנייני, דפנה חוזרת מספר פעמים על עקרון מרכזי: "נשוב על כך כי ההחלטה לאישור הבקשה אין בה בכדי להוות כל הכרעה קניינית ואין בה בכדי לגבור על כל הוראה אחרת על פי דין." כלל: בכל ערר שמתקבל ויש בו היבט קנייני, לשלב "נשוב על כך כי..." לפחות פעמיים - פעם בדיון ופעם בסיכום.
### 9.2 השלמת מסמכים
בתיקים מורכבים, לאחר הדיון ניתנת החלטה המאפשרת השלמת מסמכים. זה מתועד: "בסופו של דיון התקבלה החלטה המאפשרת השלמת מסמכים ואכן הגישו העוררים השלמת מסמכים הכוללת: [פירוט]. הוועדה המקומית השיבה וטענה כי [תשובה]." השלמת המסמכים מוצגת בסוף פרק הטענות.
### 9.3 הפניה לפרקדים של ניסיון גישור
"במסגרת הדיון בוועדת הערר הוסכם כי הצדדים ינסו לבחון דרכים להגיע לפתרון מוסכם ולבדוק דרך אפשרית לרבות קידום תוכנית נקודתית. במסגרת הודעת העורר כי הצדדים לא הגיעו לפתרון מוסכם ביניהם..."
### 9.4 עמידה על חוסר ראייתי
כשהעורר מעלה טענה בלי תימוכין: "מעבר לציון [מה שהוצג], לא הציג העורר כל תיעוד או אסמכתא להוכחת טענתו זו. בנסיבות אלה, לא עלה בידי העורר להרים את הנטל הראייתי הנדרש להוכחת טענתו בדבר [הטענה] כביכול."
### 9.5 למרות זאת - בדיקה עצמאית
גם כשהטענה לא הוכחה, דפנה בודקת בעצמה: "למרות זאת, ולמעלה מן הצורך, בחנה ועדת הערר את [מה שנבדק] והעלתה את הממצאים הבאים:..."
### 9.6 ציטוט הוראות תכנית
כשמצטטים מהוראות תכנית, דפנה מדגישה (בולד) את המילים המכריעות ומוסיפה ניתוח: "הניסוח הברור והחד-משמעי של ההוראה, בצירוף המילים 'בכל מקרה', מעיד על הכוונה ליצור מגבלה קשיחה."
### 9.7 אבחנה בין מחייב למנחה
"הנספח מבטא את נפח הבינוי המוצע והוא מנחה בלבד למעט לעניין [מה שמחייב]." הדגש המיוחד על מעמדן המחייב של הוראות מסוימות, להבדיל מיתר הוראות מנחות.
## 10. רשימת בדיקה
### רקע עובדתי
סעיף פתיחה "לפנינו..." או "עניינו בערר על החלטת...". תיאור הנכס והבקשה. הגדרות עם "להלן". ציטוט מהתכנית/פרוטוקול. תמונות רלוונטיות (מיקום מסומן). פירוט הליכים.
### טענות הצדדים
פרק "תמצית טענות הצדדים". טענות העוררים. עמדת המשיבים (הוועדה המקומית + מבקשי ההיתר). מספור רציף לאורך כל הסעיפים.
### דיון והכרעה
בדרך כלל אין כותרות משנה - הכל באסה רציפה (חריג: נושאים נפרדים). מסקנה בפתיחה. ציטוטים מקיפים מפסיקה בבלוקים ארוכים. ניטרול טענות חלשות לפני ניתוח מעמיק. מעבר לדיון עקרוני עם "יחד עם זאת, מצאנו לנכון...". שימוש בטכניקת החידוד ("נחדד כי", "נשוב על כך כי"). אם פרשנות תכנית - ארבעת השלבים (לשון, תכלית, היסטוריה, ראיות). אם קבלה עם היבט קנייני - "נשוב על כך כי..." לפחות פעמיים.
### סיכום / סוף דבר
"סיכום" (דחייה/היטל השבחה) או "סוף דבר" (קבלה/רישוי). מבנה סיכום לפי תוצאה (תתי-סעיפים בדחייה, פרוזה בקבלה, הוראות בהחזרה). ערר רישוי שנדחה: פסקת סיום חמה ואנושית. הוצאות. חתימה עם תאריך עברי ולועזי.
### סגנון כללי
שימוש ב"להלן" להגדרות. ביטויים ייחודיים לכל צד. ציטוטים ארוכים כבלוקים נפרדים. קיצורים משפטיים עקביים. אורך סעיפים מותאם (40-60 בטענות, 80-120+ בדיון). הקורא מבין את התיק רק מקריאת ההחלטה.
## 11. מבנה ההחלטה — 12 בלוקים בסדר קבוע
### 11.1 עקרון מנחה: "מבחן השופט"
כל החלטה נכתבת כאילו שופט בית משפט לעניינים מנהליים קורא אותה לראשונה במסגרת עתירה מנהלית. השופט לא מכיר את התיק, לא ביקר בשטח, ולא שמע את הצדדים. כל מה שהוא יודע — הוא מה שכתוב בהחלטה. לכן:
- הרקע מפורט ומלא (לא "כידוע" או "כמפורט בתיק")
- ציטוטים ארוכים ולא מקוצרים (השופט צריך את המקור)
- תמונות וחתכים משולבים (השופט לא היה בסיור)
- כל טענה מקבלת מענה מפורש (שלא ייאמר "הוועדה לא התייחסה")
- ההליכים מתועדים (שיהיה ברור שניתן יום בבית דין מלא)
### 11.2 סדר הבלוקים
להלן 12 הבלוקים בסדר קבוע. הסדר מחייב ואין לסטות ממנו. **להגדרות מלאות** (content model, constraints, משקלות, פרמטרי עיבוד) **ראה `references/block-schema.md`.**
| בלוק | שם | תפקיד | משקל |
|------|-----|--------|------|
| א | כותרת מוסדית | מזהה מוסד ותיק | 1% |
| ב | הרכב הוועדה | מזהה הרכב מחליט | 1% |
| ג | צדדים | מזהה עוררים ומשיבים | 1% |
| ד | "החלטה" | סימון פורמלי | 0% |
| ה | פתיחה | "לפנינו..." — מסגרת + הגדרות "להלן" | 1% |
| ו | רקע ("פתח דבר") | עובדות ניטרליות + תמונות + ציטוט מפרוטוקול | 15-35% |
| ז | טענות הצדדים | פרפרזה נאמנה — **רק כתבי טענות מקוריים** | 20-40% |
| ח | הליכים בפני ועדת הערר | דיון, סיור, השלמות טיעון (עם תוכן), החלטות ביניים | 3-15% |
| ט | תכניות חלות **(אופציונלי)** | ציטוט הוראות תכנית + ניתוח ראשוני | 0-12% |
| י | **דיון והכרעה** | **ניתוח משפטי — CREAC — ליבת ההחלטה** | **32-50%** |
| יא | סיכום / סוף דבר | תוצאה אופרטיבית בלבד | 2-9% |
| יב | חתימות | "ניתנה פה אחד" + חתימות | 1% |
**שלושה כללים מרכזיים:**
- ⚠️ **"רקע ניטרלי" (בלוק ו):** אם משפט מכיל ציטוט ישיר מצד, או מילות שיפוט ("חריג", "חטא") — הוא שייך לטענות (ז) או לדיון (י), לא לרקע. החלטות קודמות = עובדה יבשה בלבד.
- ⚠️ **"ללא כפילות" (בלוק י):** הפנה לבלוקים קודמים ("כאמור בסעיף X"), אל תחזור עליהם. חריג: "נשוב על כך כי..." (חזרה מכוונת עם שכבה חדשה).
- ⚠️ **טענות מקוריות בלבד (בלוק ז):** מכתבי ערר/תשובה. השלמות טיעון → בלוק ח עם תוכן מפורט.
### 11.3 הבדלים בין סוגי עררים
| מרכיב | ערר על היתר | ערר על תכנית | ערר היטל השבחה |
|-------|------------|-------------|---------------|
| בלוק ה (פתיחה) | "ערר על החלטת רשות הרישוי..." | "ערר על החלטת הוועדה..." | "ערר על שומת היטל השבחה..." |
| בלוק ו (מהות) | בקשה להיתר — שטחים, קומות, הריסה | תכנית — סעיפי סמכות, שטחים | שומה — תכנית משביחה, לפני/אחרי |
| בלוק ט (תכניות) | תמ"א 38, 10038, תכנית מפורטת | תכנית אב, תכנית קודמת | לא רלוונטי (בדרך כלל) |
| ציטוט מרכזי ברקע | חוו"ד מחלקת שימור / מהנדס | החלטת ועדה מחוזית / פרוטוקול | שומה + שומה נגדית |
| תמונות | תשריט היתר, הדמיות, סיור | תשריט תכנית, GIS, סיור | לרוב אין |
### 11.4 מיקומי תמונות מומלצים
| מיקום | מה להכניס | מתי |
|-------|----------|-----|
| אחרי תיאור מקרקעין (בלוק ו) | תשריט מיקום / מפת GIS עם סימון המגרש | תמיד |
| אחרי מהות הבקשה (בלוק ו) | תשריט הבקשה / נספח בינוי / תכנית מוצעת | תמיד |
| אחרי סביבת מקרקעין (בלוק ו) | צילום אוויר עם סימון המגרש והסביבה | מומלץ |
| בתוך הליכים (בלוק ח) | צילומים מהסיור | אם היה סיור |
| בתוך הליכים (בלוק ח) | הדמיות / חתכי בינוי מהשלמות טיעון | אם צורפו |
| בתוך דיון (בלוק י) | המחשה סכמטית / השוואה לפני-אחרי | לפי הצורך |
כשמכינים את טיוטת המבנה (שלב 12 להלן), בכל מקום שמתוכננת תמונה יש להכניס תיבת טקסט עם:
- "📷 תמונה:" + תיאור מה צריך להכניס
- למשל: "📷 תמונה: תשריט מיקום המגרש מתוך מערכת GIS — לסמן את חלקה 244 באדום"
### 11.5 פרמטרי עיבוד — סיכום מהיר
להגדרות מלאות של כל בלוק (content model, constraints, weight methodology, processing derivation) ראה `references/block-schema.md`. להלן טבלת סיכום בלבד:
| בלוק | Generation type | Temp | Thinking | Model |
|------|----------------|------|----------|-------|
| א-ד | template-fill | 0 | off | script |
| ה | paraphrase | 0.2 | low | sonnet |
| ו | reproduction | 0 | off | sonnet |
| ז | paraphrase | 0.1 | low | sonnet |
| ח | reproduction + paraphrase | 0 | off | sonnet |
| ט | guided-synthesis | 0.2 | medium | opus |
| **י** | **rhetorical-construction** | **0.4** | **max (16K+)** | **opus** |
| יא | paraphrase | 0.1 | low | sonnet |
| יב | template-fill | 0 | off | script |
## 12. שלב מחייב: "טיוטת מבנה — לפני דיון"
### 12.1 מהות השלב
שלב זה מתבצע **אחרי** איסוף כל החומרים, המרת מסמכים, וניתוח טיעונים — ו**לפני** כתיבת פרק הדיון וההכרעה. מייצרים קובץ DOCX מעוצב עם כל חלקי ההחלטה **עד (ולא כולל)** פרק הדיון.
**כלל מחייב:** לעולם אל תכתוב פרק דיון והכרעה לפני שקובץ המבנה קיים ואושר.
### 12.1.1 כלל "ללא כפילות"
**כלל קריטי:** ככל שהרקע, הטענות וההליכים מפורטים יותר — כך הדיון צריך להיות קצר וממוקד יותר בניתוח בלבד. אין לחזור בדיון על עובדות או טענות שכבר פורטו. הדיון מניח שהקורא קרא את הרקע.
- **ברקע (בלוקים ה-ט):** פרט את כל העובדות, הציטוטים, הטענות, ההליכים — באופן מלא ומקיף.
- **בדיון (בלוק י):** רק ניתוח, הכרעה, ומסקנות. הפנה לרקע ולטענות במקום לחזור עליהם: "כאמור בסעיף X לעיל...", "כפי שפורט...", "כפי שציינו...".
- **כלל אצבע:** אם משפט בדיון חוזר על עובדה שכבר נאמרה ברקע מילה במילה — מחק אותו והחלף בהפניה.
- **חריג:** חזרה מכוונת ("נשוב על כך כי...") היא כלי רטורי לגיטימי כשמוסיפים שכבה חדשה, לא כפילות.
### 12.2 מה כולל קובץ המבנה
הקובץ כולל את בלוקים א-ט ממולאים בתוכן, בלוק י (דיון) עם placeholder, בלוק יא (סיכום) עם placeholder, ובלוק יב (חתימות) מלא. תיבות תמונה מסומנות ב-"📷 תמונה:" במקומות הרלוונטיים.
### 12.3 סדר עבודה
```
שלב 1: איסוף חומרים ← קריאת כל המסמכים
שלב 2: המרת מסמכים ← PDF → Markdown
שלב 3: ניתוח טיעונים ← זיהוי טענות, מיון, סיווג
שלב 4: טיוטת מבנה ← ייצור DOCX עם בלוקים א-ט + placeholders ← שם הקובץ: החלטה-ערר-XXXX-מבנה.docx
שלב 5: אישור המבנה ← דפנה מעיינת ומאשרת / מתקנת
שלב 6: כתיבת דיון והכרעה ← בלוק י
שלב 7: כתיבת סיכום ← בלוק יא
שלב 8: עדכון DOCX סופי ← כל הבלוקים + תמונות אמיתיות
```
### 12.4 עיצוב קובץ ה-DOCX
**חובה לקרוא קודם** את `.claude/skills/legal-docx/SKILL.md` — כל כללי RTL, פונטים, מידות וטבלאות מוגדרים שם. הסקריפט הבסיסי נמצא ב-`.claude/skills/legal-docx/scripts/create-legal-doc.js`.
כללי RTL קריטיים (מתוך legal-docx):
- `AlignmentType.START` (לא LEFT/RIGHT) ליישור ימין
- `AlignmentType.END` ליישור שמאל
- שלוש הגדרות חובה: `bidi: true` (section), `bidirectional: true` (paragraph), `rightToLeft: true` (run)
להלן ההגדרות הייחודיות להחלטת ועדת ערר (מעבר למה שמוגדר ב-legal-docx):
| מרכיב | עיצוב | הערות |
|-------|-------|-------|
| כותרת "החלטה" | 16pt (32 half-points), bold, `AlignmentType.CENTER` | HeadingLevel.HEADING_1 |
| כותרות פרקים ("תמצית טענות הצדדים", "דיון והכרעה") | 14pt (28 half-points), bold, קו תחתון, `AlignmentType.CENTER` | HeadingLevel.HEADING_2 |
| כותרות משנה ("טענות העוררים") | 12pt (24 half-points), bold, `AlignmentType.CENTER`, ללא קו תחתון | פסקה רגילה עם bold |
| מספור סעיפים | מספר + נקודה (bold, run נפרד) + טאב + טקסט (רגיל) | `alignment: AlignmentType.START`, hanging indent |
| ציטוטים (blockquote) | הזחה 567 DXA (~1 ס"מ) משני הצדדים, פונט זהה לגוף | indent: { left: 567, right: 567 } |
| תיבות תמונה | מסגרת עם shading אפור בהיר (fill: "F0F0F0"), טקסט "📷 תמונה: [תיאור]" | ShadingType.CLEAR |
| חתימות | טבלה ללא גבולות (`visuallyRightToLeft: true`), 2 טורים | כמו בתבנית ב-create-legal-doc.js |
| כותרת מוסדית | טבלה ללא גבולות, 2 טורים: ימין=מוסד, שמאל=מספרי תיק | `visuallyRightToLeft: true` |

View File

@@ -0,0 +1,574 @@
# Block Schema — ארכיטקטורת מסמך החלטת ועדת ערר
מסמך זה מגדיר את המבנה הפורמלי של החלטת ועדת ערר לתכנון ובניה. הוא משמש כמקור סמכותי להגדרת בלוקים, משקלות, פרמטרי עיבוד, וכללי ולידציה.
**הפניה:** SKILL.md סעיפים 11-12 מכילים סיכום מהיר והנחיות תהליך. מסמך זה מכיל את ההגדרות המלאות.
---
## 1. יסודות תיאורטיים
ארכיטקטורת המסמך מבוססת על שילוב של ארבעה frameworks מוכרים:
### CREAC — מתודולוגיית כתיבה משפטית
Conclusion → Rule → Explanation → Application → Conclusion.
מקור: Columbia Law School, Legal Writing methodology.
**מיפוי:** חל על בלוק י (דיון) ובלוק יא (סיכום). בלוק י פותח במסקנה (C), מציג כלל משפטי (R), מסביר באמצעות פסיקה (E), מיישם על העובדות (A), וחוזר למסקנה (C). בלוק יא = C אחרון בלבד.
### Federal Judicial Center — Judicial Writing Manual
מגדיר תפקוד פונקציונלי לכל חלק בהחלטה שיפוטית:
- **Orientation** (אוריינטציה) — מי, מה, איפה → בלוקים א-ה
- **Framing** (מסגור) — הקשר עובדתי ותכנוני → בלוק ו
- **Argumentation** (טיעון) — עמדות הצדדים → בלוק ז
- **Procedural record** (תיעוד הליכי) — מה עשינו → בלוק ח
- **Deliberation** (דיון) — ניתוח משפטי → בלוקים ט-י
- **Disposition** (החלטה) — תוצאה אופרטיבית → בלוק יא
### DITA — Darwin Information Typing Architecture
סטנדרט OASIS להגדרת סוגי תוכן מובנים. מספק:
- **Content model** — אילו אלמנטים מותרים בכל בלוק
- **Constraints** — מה אסור (חשוב יותר ממה שמותר)
- **Specialization** — ירושה מסוג בסיסי עם התאמות
- **Relationships** — תלויות בין בלוקים
### Akoma Ntoso / LegalDocumentML
סטנדרט OASIS בינלאומי למסמכים משפטיים מובנים (UN/DESA). מספק:
- **Semantic mapping** — כל בלוק ממופה לרכיב מוכר בסטנדרט
- **Document class** — "judgment" (פסק דין / החלטה)
---
## 2. הגדרות בלוקים
### Block א: כותרת מוסדית / Institutional Header
**ID:** `block-alef`
**Akoma Ntoso:** `meta > identification`
**CREAC role:** none
**Functional purpose (JWM):** Orientation — מזהה את המוסד, התיק והגורם המחליט.
**Content model:**
- Types: template-field
- Elements: טבלה 2 טורים (מוסד | מספרי תיק)
- Sources: מערכת ניהול תיקים
**Constraints:**
- MUST: שם מוסד, מספר תיק, מספר תכנית/בקשה
- MUST NOT: תוכן מהותי כלשהו
- Dependencies: none
**Weight:** 1% (קבוע, לא משתנה בין סוגי עררים)
**Processing:**
- Generation type: template-fill
- Temperature: 0 | Thinking: off | Effort: min | Model: script
### Block ב: הרכב הוועדה / Panel Composition
**ID:** `block-bet`
**Akoma Ntoso:** `meta > references > TLCPerson`
**CREAC role:** none
**Functional purpose (JWM):** Orientation — מזהה את ההרכב המחליט. חשוב לביקורת שיפוטית (הרכב כשיר).
**Content model:**
- Types: template-field
- Elements: "בפני:" + יו"ר + חברים
- Sources: מערכת ניהול
**Constraints:**
- MUST: יו"ר + לפחות חבר אחד
- MUST NOT: תוכן מהותי
- Dependencies: none
**Weight:** 1% (קבוע)
**Processing:**
- Generation type: template-fill
- Temperature: 0 | Thinking: off | Effort: min | Model: script
### Block ג: צדדים / Parties
**ID:** `block-gimel`
**Akoma Ntoso:** `meta > references > TLCPerson` (appellants, respondents)
**CREAC role:** none
**Functional purpose (JWM):** Orientation — מזהה את הצדדים וב"כ. מגדיר את מסגרת הדיון.
**Content model:**
- Types: template-field
- Elements: עוררים + "נגד" + משיבים + ב"כ
- Sources: כתב ערר, כתב תשובה
**Constraints:**
- MUST: שם כל צד, "נגד" כמפריד
- MUST NOT: תוכן מהותי, תיאור הערר
- Dependencies: none
**Weight:** 1% (קבוע)
**Processing:**
- Generation type: template-fill
- Temperature: 0 | Thinking: off | Effort: min | Model: script
### Block ד: כותרת "החלטה" / Decision Title
**ID:** `block-dalet`
**Akoma Ntoso:** `body > judgment > header`
**CREAC role:** none
**Functional purpose (JWM):** Orientation — סימון פורמלי של תחילת ההחלטה.
**Content model:**
- Types: template-field
- Elements: מילה אחת: "החלטה"
- Sources: none
**Constraints:**
- MUST: David 16pt, bold, מרכז
- Dependencies: none
**Weight:** 0% (שורה אחת)
**Processing:**
- Generation type: template-fill
- Temperature: 0 | Thinking: off | Effort: min | Model: script
### Block ה: פתיחה / Opening
**ID:** `block-he`
**Akoma Ntoso:** `body > judgment > introduction`
**CREAC role:** C (מסקנה ראשונית — הצגת מה לפנינו)
**Functional purpose (JWM):** Orientation — מכוון את הקורא למהות הערר במשפט אחד. מגדיר "להלן" מרכזיים.
**Content model:**
- Types: narrative (1-2 סעיפים)
- Elements: numbered-para עם הגדרות "להלן"
- Sources: כתב ערר, החלטת ועדה מקומית
**Constraints:**
- MUST: "לפנינו...", הגדרת הוועדה המקומית, הגדרת התכנית/הבקשה, הגדרת המגרש
- MUST NOT: ניתוח, ערכי שיפוט, ציטוטים מצדדים
- Dependencies: block-gimel (שמות צדדים להגדרות)
**Weight:** 1% (קבוע — 1-2 סעיפים)
**Processing:**
- Generation type: paraphrase
- Temperature: 0.2 | Thinking: low | Effort: low | Model: sonnet
### Block ו: רקע עובדתי / Factual Background ("פתח דבר")
**ID:** `block-vav`
**Akoma Ntoso:** `body > judgment > background`
**CREAC role:** none (עובדות בלבד, לא ניתוח)
**Functional purpose (JWM):** Framing — מספק את התשתית העובדתית שעליה נבנה הדיון. השופט חייב להבין את המציאות בשטח לפני שקורא טענות.
**Content model:**
- Types: narrative, citation-block, image-placeholder
- Elements: numbered-para, blockquote (ציטוט מפרוטוקול), image-box
- Sources: כתבי טענות, תשריטים, פרוטוקולים, החלטות קודמות, GIS
**סדר תוכן פנימי:**
1. מקרקעין — מיקום, שטח, מאפיינים
2. סביבת מקרקעין — בנייה סמוכה, אופי
3. 📷 תמונה: מיקום GIS
4. היסטוריה תכנונית — תכניות, החלטות (עובדות יבשות בלבד)
5. מהות הבקשה/תכנית
6. 📷 תמונה: תשריט
7. ציטוט מפרוטוקול ועדה מקומית
8. החלטת הוועדה + תנאים
9. 📷 תמונה: צילום אוויר (אופציונלי)
10. הגשת הערר
**Constraints:**
- MUST: מקרקעין, מהות הבקשה, החלטת הוועדה, הגשת הערר
- MUST: לפחות 2 תמונות (מיקום + תשריט)
- MUST: ציטוט מפרוטוקול הוועדה המקומית
- ⚠️ **MUST NOT ("רקע ניטרלי"):** ציטוטים ישירים מצדדים, מילות ערך/שיפוט ("חריג", "חטא", "בעייתי"). החלטות קודמות = עובדה יבשה ("ביום X נדחתה תכנית Y"), ללא נימוקים וציטוטים מהן.
- Dependencies: block-he (הגדרות "להלן")
**Weight:**
| סוג ערר | משקל | הערות |
|---------|------|-------|
| רישוי — דחייה | 15-25% | רקע מפורט עם הקשר תכנוני |
| רישוי — קבלה | 30-40% | כולל ציטוט מפרוטוקול |
| רישוי — קבלה חלקית | 25-35% | כולל ציטוט מפרוטוקול |
| היטל השבחה | 6-18% | רקע מצומצם |
**Weight methodology:**
- Communicative weight (40%): גבוה — מספק את "התמונה" לשופט שלא מכיר את התיק
- Reader attention (20%): בינוני-גבוה — primacy effect, הקורא קשוב בהתחלה
- Judicial review (25%): גבוה — שופט בודק שהעובדות מלאות ומדויקות
- Empirical (15%): מבוסס על מדידת החלטות דפנה (3.2 ב-SKILL.md)
**Processing:**
- Generation type: reproduction (העתקה נאמנה ממקורות)
- Cognitive complexity: lookup (ארגון, לא ניתוח)
- Accuracy: high-precision
- Temperature: 0 | Thinking: off | Effort: low | Model: sonnet
### Block ז: טענות הצדדים / Parties' Claims
**ID:** `block-zayin`
**Akoma Ntoso:** `body > judgment > arguments`
**CREAC role:** none (הצגת טענות, לא ניתוח)
**Functional purpose (JWM):** Argumentation — מציג את עמדות הצדדים בנאמנות, כך שהקורא יבין את המחלוקת לפני שקורא את ההכרעה.
**Content model:**
- Types: narrative
- Elements: section-heading ("תמצית טענות הצדדים"), sub-headings (לכל צד), numbered-para
- Sources: כתב ערר, כתב תשובה — **כתבי טענות מקוריים בלבד** (לא השלמות טיעון)
**סדר קבוע:**
1. כותרת: "תמצית טענות הצדדים"
2. "טענות העוררים" (אם כמה עוררים — תתי-כותרות לכל אחד)
3. "עמדת הוועדה המקומית"
4. "עמדת מבקשי ההיתר" / "עמדת מגישי התכנית"
**Constraints:**
- MUST: כל טענה בסעיף נפרד, גוף שלישי ("העורר טוען כי...")
- MUST: כל צד בפרק נפרד, סדר קבוע
- MUST NOT: ניתוח, מסקנות, הערכת הוועדה ("טענה זו חלשה...")
- MUST NOT: תוכן מהשלמות טיעון (→ block-chet)
- Dependencies: block-vav (מספור רציף)
**Weight:**
| סוג ערר | משקל | הערות |
|---------|------|-------|
| רישוי — דחייה | 30-40% | טענות מפורטות |
| רישוי — קבלה | 20-30% | כולל השלמות |
| רישוי — קבלה חלקית | 25-30% | |
| היטל השבחה | 13-25% | |
**Weight methodology:**
- Communicative weight (40%): בינוני — הצגה, לא הכרעה
- Reader attention (20%): נמוך-בינוני — scanning attention, הקורא מחפש טענות ספציפיות
- Judicial review (25%): גבוה — שופט בודק ש"נשמעו כל הצדדים"
- Empirical (15%): מבוסס על מדידת החלטות דפנה
**Processing:**
- Generation type: paraphrase (סיכום נאמן בשפה של דפנה)
- Cognitive complexity: medium-synthesis (קיבוץ וסידור טענות)
- Accuracy: high-precision (לא לפספס טענה, לא לעוות)
- Temperature: 0.1 | Thinking: low | Effort: medium | Model: sonnet
### Block ח: הליכים בפני ועדת הערר / Proceedings
**ID:** `block-chet`
**Akoma Ntoso:** `body > judgment > proceedings` (custom extension)
**CREAC role:** none (תיעוד, לא ניתוח)
**Functional purpose (JWM):** Procedural record — מתעד שהוועדה פעלה כדין ונתנה מלוא יום בבית דין. קריטי ל"מבחן השופט" — שופט בעתמ"ם בודק שהצדדים קיבלו הזדמנות הוגנת.
**Content model:**
- Types: narrative, image-placeholder
- Elements: section-heading ("ההליכים בפני ועדת הערר"), numbered-para, image-box
- Sources: פרוטוקול דיון, תמונות סיור, החלטות ביניים, השלמות טיעון
**סדר כרונולוגי:**
1. דיון — תאריך, נוכחים
2. סיור — תאריך, תיאור
3. 📷 תמונה: צילומים מהסיור
4. השלמות טיעון — עם תוכן מפורט (כל השלמה = סעיף נפרד)
5. החלטות ביניים
6. תגובות לתגובות — כרונולוגי
7. 📷 תמונה: הדמיות/חתכים (אם צורפו)
8. עררים מקבילים (אם יש)
**Constraints:**
- MUST: תאריכים מדויקים, כרונולוגיה ברורה
- MUST: תוכן השלמות טיעון מפורט — כל השלמה בסעיף נפרד עם תמצית תוכן
- MUST NOT: ניתוח או הערכה של ההשלמות ("טענה חזקה/חלשה")
- Dependencies: block-zayin (מספור רציף)
- References: block-zayin (הפניה לטענות מקוריות כשיש חפיפה)
**Weight:**
| סוג ערר | משקל | הערות |
|---------|------|-------|
| ערר פשוט (ללא השלמות) | 3-5% | דיון + סיור בלבד |
| ערר מורכב (השלמות רבות) | 8-15% | כמו אריאלי: 31 סעיפים |
| היטל השבחה | 2-4% | בדרך כלל מינימלי |
**Weight methodology:**
- Communicative weight (40%): נמוך-בינוני — תיעוד, לא הכרעה
- Reader attention (20%): נמוך — scanning, אלא אם יש ממצאים חדשים מסיור/השלמות
- Judicial review (25%): **גבוה מאוד** — שופט בודק שנתנו procedural fairness
- Empirical (15%): מגוון רחב — תלוי בכמות ההשלמות
**Processing:**
- Generation type: reproduction + paraphrase (תאריכים מדויקים + תמצית תוכן)
- Cognitive complexity: low (סידור כרונולוגי)
- Accuracy: high-precision (תאריכים, שמות מסמכים)
- Temperature: 0 | Thinking: off | Effort: low | Model: sonnet
### Block ט: תכניות חלות / Applicable Plans (אופציונלי)
**ID:** `block-tet`
**Akoma Ntoso:** `body > judgment > motivation > background` (extended)
**CREAC role:** R (Rule — הצגת הכללים המשפטיים/תכנוניים)
**Functional purpose (JWM):** Deliberation (preliminary) — מציג את המסגרת הנורמטיבית שלאורה ייבחנו הטענות. בלוק גשר בין עובדות לניתוח.
**Content model:**
- Types: narrative, citation-block
- Elements: section-heading, numbered-para, blockquote (ציטוט מהוראות תכנית)
- Sources: הוראות תכנית (PDF), נספחי בינוי, החלטות מרכזות
**Constraints:**
- MUST: ציטוט ישיר מהוראות תכנית עם הדגשת (bold) מילים מכריעות
- MUST NOT: ניתוח מעמיק (→ block-yod), הכרעה בין פרשנויות
- Dependencies: block-chet (מספור), block-vav (הגדרות תכניות)
- Condition: **אופציונלי** — רק כשיש מורכבות תכנונית (תכניות סותרות, תמ"א 38 + שימור, פרשנות)
**Weight:**
| מתי קיים | משקל |
|----------|------|
| תמ"א 38 + שימור | 8-12% |
| פרשנות תכנית | 5-10% |
| לא קיים | 0% |
**Weight methodology:**
- Communicative weight (40%): בינוני — הנחת תשתית נורמטיבית
- Reader attention (20%): נמוך — טכני, אלא אם פרשנות שנויה במחלוקת
- Judicial review (25%): בינוני — שופט בודק שהוועדה הבינה את הדין
- Empirical (15%): אריאלי — 14 סעיפים; בית הכרם — משולב בדיון
**Processing:**
- Generation type: guided-synthesis (ציטוט + ניתוח ראשוני)
- Cognitive complexity: medium (פרשנות טקסט משפטי)
- Accuracy: precision + interpretation
- Temperature: 0.2 | Thinking: medium | Effort: medium | Model: opus
### Block י: דיון והכרעה / Discussion and Decision
**ID:** `block-yod`
**Akoma Ntoso:** `body > judgment > motivation`
**CREAC role:** **full-CREAC** — C (מסקנה בפתיחה) → R (כלל משפטי) → E (ציטוט פסיקה) → A (יישום על העובדות) → C (מסקנת ביניים)
**Functional purpose (JWM):** Deliberation — ליבת ההחלטה. כאן הוועדה מנתחת, מאזנת, ומכריעה. זהו ה-ratio decidendi.
**Content model:**
- Types: narrative, citation-block, image-placeholder
- Elements: numbered-para (אסה רציפה ללא כותרות משנה), blockquote (ציטוטי פסיקה ותכנית), image-box
- Sources: **כל** הבלוקים הקודמים + פסיקה + skill
**מבנה פנימי (לפי סוג ערר — ראה SKILL.md סעיף 7.3):**
- דחייה: שכבות הגנה (concentric circles)
- קבלה: נימוק-נימוק
- קבלה חלקית: מיפוי מתחים + ניתוח נושאי
- היטל השבחה: פתיחה ישירה עם מסקנה
**Constraints:**
- MUST: מסקנה בפתיחת הדיון (לא בסוף)
- MUST: מענה לכל טענה שהוצגה בבלוק ז
- MUST: ציטוט פסיקה בבלוקים ארוכים (200-600 מילים)
- ⚠️ **MUST NOT ("ללא כפילות"):** חזרה על עובדות/טענות מבלוקים קודמים. השתמש בהפניות: "כאמור בסעיף X לעיל", "כפי שפורט", "כפי שציינו"
- MUST NOT: כותרות משנה (חריג: נושאים נפרדים לחלוטין)
- Dependencies: **ALL** previous blocks (ה-ט)
**Weight:**
| סוג ערר | משקל | הערות |
|---------|------|-------|
| רישוי — דחייה | 37-50% | פתיחה רחבה + שכבות |
| רישוי — קבלה | 35-45% | נימוק-נימוק |
| רישוי — קבלה חלקית | 40-47% | מיפוי מתחים + ניתוח נושאי |
| היטל השבחה | 32-48% | ציטוטי פסיקה מרובים |
**Weight methodology:**
- Communicative weight (40%): **מקסימלי** — זהו ה-ratio decidendi, תכלית ההחלטה
- Reader attention (20%): **גבוה** — deep reading, הקורא מחפש את הנימוקים
- Judicial review (25%): **מקסימלי** — שופט בוחן סבירות, מידתיות, התייחסות לטענות
- Empirical (15%): 35-50% באופן עקבי בכל החלטות דפנה
**Processing:**
- Generation type: **rhetorical-construction** (בניית טיעון, איזון, רטוריקה)
- Cognitive complexity: **high-reasoning** (CREAC מלא, שכבות, חידוד)
- Accuracy: **precision + creativity** (ניתוח מדויק + ביטוי אלגנטי)
- Temperature: **0.4** | Thinking: **max (budget 16K+)** | Effort: **max** | Model: **opus בלבד**
### Block יא: סיכום / סוף דבר / Summary
**ID:** `block-yod-alef`
**Akoma Ntoso:** `body > judgment > decision`
**CREAC role:** C (Conclusion אחרון — תמצית אופרטיבית)
**Functional purpose (JWM):** Disposition — ההוראה האופרטיבית שמבצעים. זה מה שהצדדים צריכים לדעת "מה עכשיו."
**Content model:**
- Types: narrative
- Elements: section-heading ("סיכום"/"סוף דבר"), numbered-para, sub-items (א. ב. ג.)
- Sources: block-yod (מסקנות)
**מבנה לפי תוצאה (ראה SKILL.md סעיף 8):**
- דחייה: "הערר נדחה" + תתי-סעיפים + פסקה חמה (רישוי בלבד)
- קבלה: "הערר מתקבל בכפוף ל..." + פרוזה
- קבלה חלקית: "הערר מתקבל באופן חלקי" + 2-3 הוראות אופרטיביות
- היטל השבחה: יבש
**Constraints:**
- MUST: תוצאה ברורה (נדחה/מתקבל/מתקבל חלקית)
- MUST NOT (בקבלה חלקית): חזרה על נימוקים — ההנמקה כבר בדיון
- Dependencies: block-yod (מסקנות)
**Weight:**
| סוג ערר | משקל |
|---------|------|
| דחייה | 2-9% |
| קבלה | 3-5% |
| קבלה חלקית | 2-3% |
| היטל השבחה | 3-4% |
**Processing:**
- Generation type: paraphrase (עיבוד מסקנות בלוק י)
- Cognitive complexity: low
- Accuracy: high-precision (הוראות חייבות להיות חד-משמעיות)
- Temperature: 0.1 | Thinking: low | Effort: low | Model: sonnet
### Block יב: חתימות / Signatures
**ID:** `block-yod-bet`
**Akoma Ntoso:** `conclusions > signature`
**CREAC role:** none
**Functional purpose (JWM):** Authentication — אישור פורמלי של ההחלטה.
**Content model:**
- Types: template-field
- Elements: "ניתנה פה אחד" + תאריך עברי/לועזי + טבלת חתימות
- Sources: none
**Constraints:**
- MUST: "ניתנה פה אחד", תאריך, יו"ר + מזכיר/ה
- Dependencies: none
**Weight:** 1% (קבוע)
**Processing:**
- Generation type: template-fill
- Temperature: 0 | Thinking: off | Effort: min | Model: script
---
## 3. כללי גזירת פרמטרים
פרמטרי העיבוד נגזרים ממאפייני התוכן, לא נקבעים שרירותית:
### Temperature — נגזר מסוג הייצור
| Generation type | Temperature | נימוק |
|----------------|-------------|-------|
| template-fill | 0 | אין צורך בשפה — מילוי שדות |
| reproduction | 0 | נאמנות מוחלטת למקור. אפס יצירתיות |
| paraphrase | 0.1 | מרווח מינימלי לניסוח בשפה של דפנה |
| guided-synthesis | 0.2 | גמישות בארגון וחיבור מקורות, לא בתוכן |
| analytical-reasoning | 0.3-0.4 | צריך ליצור קשרים בין עקרונות משפטיים |
| rhetorical-construction | 0.4-0.5 | טווח ביטוי רחב לכתיבה משכנעת ואלגנטית |
### Thinking budget — נגזר ממורכבות קוגניטיבית
| Cognitive task | Budget | נימוק |
|---------------|--------|-------|
| template-fill / lookup | off | אין צורך בחשיבה |
| sequential-extraction | low | חילוץ מידע חד-שלבי |
| multi-source-integration | medium | צריך להצליב מקורות |
| legal-analysis-with-CREAC | max (16K+) | חשיבה רב-שלבית: מסקנה → כלל → הסבר → יישום |
### Model — נגזר מדרישת דיוק
| Accuracy profile | Model | נימוק |
|-----------------|-------|-------|
| factual-precision | sonnet | מהיר, מדויק לחילוץ עובדות |
| precision + interpretation | opus | נדרש לפרשנות תכנית / ציטוט מובנה |
| precision + creativity | opus | נדרש לניתוח משפטי מורכב ורטוריקה |
---
## 4. מתודולוגיית משקלות
משקל כל בלוק נקבע על ידי שקלול 4 גורמים:
### 4.1 Communicative Weight (40%)
מה חלקו של הבלוק בתכלית ההחלטה? ההחלטה באה לעשות דבר אחד: להכריע במחלוקת ולנמק. בלוק י (דיון) הוא ליבת התכלית. בלוקים א-ד (כותרות) הם עטיפה.
### 4.2 Reader Attention Distribution (20%)
מבוסס על מחקרי F-pattern ו-primacy/recency:
- **פתיחה** (בלוקים ה-ו): קשב גבוה (primacy effect)
- **אמצע** (בלוקים ז-ח): scanning — הקורא מחפש טענות ספציפיות
- **דיון** (בלוק י): deep reading — הקורא מחפש נימוקים
- **סיום** (בלוק יא): קשב גבוה (recency effect)
### 4.3 Judicial Review Requirement (25%)
מה שופט בבית משפט לעניינים מנהליים יבדוק ("מבחן השופט"):
- **תשתית עובדתית** (בלוק ו): מלאה ומדויקת?
- **שמיעת צדדים** (בלוקים ז-ח): נתנו מלוא יום בבית דין?
- **סבירות ומידתיות** (בלוק י): ההכרעה מנומקת ומאוזנת?
- **התייחסות לטענות** (בלוק י): כל טענה קיבלה מענה?
### 4.4 Empirical Basis (15%)
מבוסס על מדידה מהחלטות שפורסמו:
- הכט 1180-1181 (דחייה, 02.2026)
- בית הכרם 1126/25 (קבלה חלקית, 03.2026)
- אריאלי 1078+1083 (קבלה, 03.2026)
המשקלות ב-SKILL.md סעיף 3.2 (יחסי הזהב) משמשים כבסיס אמפירי שאומת על ידי שלושת הגורמים האנליטיים.
---
## 5. כללי ולידציה
### 5.1 סדר בלוקים
- בלוקים חייבים להופיע בסדר א עד יב
- בלוקים א-ה ויב נדרשים בכל החלטה
- בלוק ט אופציונלי (רק כשיש מורכבות תכנונית)
### 5.2 Content Constraints
- **רקע ניטרלי (בלוק ו):** אם סעיף מכיל ציטוט ישיר מצד או מילת שיפוט → לא שייך כאן
- **טענות מקוריות בלבד (בלוק ז):** רק מכתבי ערר/תשובה. השלמות → בלוק ח
- **ללא כפילות (בלוק י):** הפניה לבלוקים קודמים, לא חזרה. חריג: "נשוב על כך כי..." (חזרה מכוונת עם שכבה חדשה)
- **הליכים ללא הערכה (בלוק ח):** תיעוד מה הוגש, לא הערכה של חוזק הטענות
### 5.3 Weight Compliance
- משקל כל בלוק (ספירת מילים / סה"כ) צריך להיות בטווח המוגדר **±10%**
- אם בלוק י < 30% → flag: דיון לא מפותח מספיק
- אם בלוק ו > 35% → flag: רקע מנופח, בדוק שאין תוכן טענתי
### 5.4 Structural Integrity
- מספור סעיפים רציף מ-1 עד הסוף, ללא איפוס בין בלוקים
- כל הגדרת "להלן" חייבת להופיע לפני השימוש הראשון בה
- כל טענה בבלוק ז חייבת לקבל מענה בבלוק י (ישיר או "למעלה מן הצורך")
- כותרות פרקים: David 14pt, bold, קו תחתון, מרכז
- כותרות משנה: David 12pt, bold, מרכז, ללא קו תחתון
---
## 6. גרף תלויות בין בלוקים
```
א (כותרת) → עצמאי
ב (הרכב) → עצמאי
ג (צדדים) → עצמאי
ד (כותרת) → עצמאי
ה (פתיחה) → תלוי ב: ג (שמות צדדים להגדרות "להלן")
ו (רקע) → תלוי ב: ה (הגדרות). מספור ממשיך מ-ה.
ז (טענות) → תלוי ב: ו (מספור). מפנה ל: ה, ו (הגדרות)
ח (הליכים) → תלוי ב: ז (מספור). מפנה ל: ז (טענות מקוריות)
ט (תכניות) → תלוי ב: ח (מספור). אופציונלי. מפנה ל: ו (הגדרות תכניות)
י (דיון) → תלוי ב: **כל** הבלוקים ה-ט. מפנה ל: כולם.
יא (סיכום) → תלוי ב: י (מסקנות). מפנה ל: י בלבד.
יב (חתימות) → עצמאי
```

View File

@@ -0,0 +1,97 @@
{
"_comment": "תבנית JSON לייצור טיוטת מבנה החלטה — כל שדה עם '_comment' הוא הסבר, לא תוכן",
"_usage": "node .claude/skills/legal-decision/scripts/create-decision-structure.cjs <this-file.json> [output.docx]",
"type": "permit | plan | betterment",
"case_numbers": ["1130/25"],
"plan_number": "152-1257682",
"request_number": null,
"panel": {
"chair": "עו\"ד דפנה תמיר",
"members": [
"יעקב אנוקה, נציג מתכנן המחוז",
"יצחק ליר ליפובצקי, נציג ארגון האדריכלים"
]
},
"appellants": [
{ "name": "1. מרק קובר", "representative": null },
{ "name": "2. יצחק מטמון", "representative": null }
],
"respondents": [
{ "name": "הוועדה המרחבית לתכנון ולבניה הראל", "representative": "עו\"ד ליאורה אפרתי" },
{ "name": "אסתר שרה ליבמן", "representative": null },
{ "name": "יוסף חיים ליבמן", "representative": "עו\"ד משה ברקוביץ" }
],
"appeal_description": "ערר על החלטת הוועדה המרחבית לתכנון ולבניה הראל מיום 23.7.2025, לדחות את ההתנגדויות ולאשר את תכנית מס' 152-1257682",
"opening_paragraphs": [
"לפנינו ערר על החלטת הוועדה המרחבית לתכנון ולבניה הראל (להלן: \"הוועדה המקומית\") מיום 23.7.2025, לדחות את ההתנגדויות ולאשר את תכנית מס' 152-1257682 (להלן: \"התכנית\") ברחוב אבינדב 23, קריית יערים, גוש 29536 חלקה 244 (להלן: \"המגרש\" או \"המקרקעין\")."
],
"use_petach_davar": true,
"property_description": "המגרש מצוי ברחוב אבינדב בקריית יערים, מועצה מקומית המוגדרת בתמ\"א 35 כ\"ישוב שמור משולב\" ובתמ\"מ 30/1 כ\"ישוב פרברי\". רחוב אבינדב הינו מדרחוב צר ומפותל, מתאפיין בבנייה כפרית של וילות צמודות קרקע חד-משפחתיות, עם חניה בתוך תחום המגרשים, על פי תכנית מי/135 משנת 1972 (להלן: \"תכנית 135\").",
"planning_history": [
"בשנת 1992 אושרה תכנית מי/135/א (להלן: \"תכנית 135/א\"), אשר שינתה מהותית את ייעוד מספר מגרשים ברחוב...",
"ביום 29.6.2017 דחתה ועדת המשנה להתנגדויות של הוועדה המחוזית ירושלים את תכנית מס' 152-0137067..."
],
"request_essence": "התכנית נשוא הערר (152-1257682) עוסקת בתוספת זכויות בנייה למבנה הקיים ברחוב אבינדב 23, וכוללת: הגדלת זכויות בנייה בשיעור של 50%...",
"committee_protocol_quote": "[ציטוט מלא מתוך פרוטוקול הדיון בוועדה המקומית]",
"committee_decision": "ביום 23.7.2025 קיימה הוועדה המקומית דיון בהתנגדויות שהוגשו לתכנית. לאחר שמיעת ההתנגדויות, החליטה הוועדה המקומית פה אחד לדחות את ההתנגדויות ולאשר את התכנית כפי שהופקדה.",
"include_aerial_photo": true,
"surroundings": "[תיאור סביבת המקרקעין — מבנים סמוכים, אופי שכונתי]",
"appeal_filing": "ביום 14.8.2025 הגיש העורר את הערר שבפנינו. ביום 22.10.2025 הגיש מטמון כתב ערר/תשובה בו הצטרף לערר.",
"_comment_claims": "אפשר להשתמש ב-appellant_claims (רשימה אחת) או ב-appellant_claims_sections (כמה עוררים עם כותרות נפרדות)",
"appellant_claims_sections": [
{
"title": "טענות העורר מר קובר",
"claims": [
"העורר טוען כי לוועדה המקומית לא הייתה סמכות לאשר את התכנית...",
"עוד טוען העורר כי חישוב תוספת שטחי הבנייה שגוי..."
]
},
{
"title": "טענות מטמון",
"claims": [
"מטמון מדגיש את העיוות התכנוני ההיסטורי שנוצר בשנת 1992..."
]
}
],
"committee_position": [
"הוועדה המקומית טוענת כי לוועדה מקומית סמכות לדון בתכנית...",
"באשר להחלטת הוועדה המחוזית משנת 2017, טוענת הוועדה המקומית כי..."
],
"applicant_position": [
"מגישי התכנית טוענים כי התכנית אינה מוסיפה יחידות דיור מעבר למותר...",
"במסגרת השלמת הטיעון, הציגו מגישי התכנית תמונה תכנונית רחבה..."
],
"proceedings": [
{ "type": "text", "text": "ביום 27.10.2025 התקיים דיון בפני ועדת הערר, בו נשמעו העורר, מטמון, הוועדה המקומית ומגישי התכנית." },
{ "type": "text", "text": "ביום 30.11.2025 נערך סיור במקום." },
{ "type": "image", "description": "צילומים מהסיור ברחוב אבינדב — מבט על הבניין הקיים" },
{ "type": "text", "text": "ביום 31.12.2025 ניתנה החלטת ביניים..." },
{ "type": "text", "text": "בעקבות החלטת הביניים הוגשו השלמות טיעון מכל הצדדים..." }
],
"skip_plans_section": true,
"_comment_plans": "אם skip_plans_section=false, אפשר להוסיף applicable_plans עם פירוט תכניות",
"secretary": ""
}

View File

@@ -0,0 +1,186 @@
# יסודות דיני תכנון ובניה בישראל
## מדריך עזר למומחה הגישה השיפוטית
---
## מבנה מערכת התכנון והבניה בישראל
### רמות התכנון
**1. רמה ארצית**
- המועצה הארצית לתכנון ובניה
- תכניות מתאר ארציות (תמ"א)
**2. רמה מחוזית**
- ועדות מחוזיות (6 מחוזות)
- תכניות מתאר מחוזיות (תמ"מ)
**3. רמה מקומית**
- ועדות מקומיות (לפי רשויות מקומיות)
- תכניות מפורטות
**4. ועדות ערר**
- ועדות ערר מחוזיות (מטפלות בערעורים על החלטות ועדות מקומיות)
- ועדת הערר הארצית (מטפלת בערעורים על החלטות ועדות מחוזיות)
---
## חוקים ותקנות מרכזיים
### 1. חוק התכנון והבניה, התשכ"ה-1965
**סעיפים חשובים:**
- **סעיף 19** - היטל השבחה
- **סעיף 62** - הוועדה המקומית
- **סעיף 149** - היתר בניה
- **סעיף 150** - תנאים למתן היתר
- **סעיף 151** - היתר בנייה בסטייה מזניחה
- **סעיף 197** - הקלות בניה
- **סעיף 204** - ועדות ערר
- **סעיף 205** - סמכויות ועדת הערר
- **סעיף 228** - עבירות בניה ללא היתר
### 2. חוק המקרקעין, התשכ"ט-1969
**סעיפים חשובים:**
- זכויות קנייניות במקרקעין
- העברת זכויות
### 3. תקנות התכנון והבניה (בקשה להיתר, תנאיו ואגרות), התש"ל-1970
---
## סוגי ערעורים נפוצים
### 1. ערעורים על החלטות בעניין רישוי
- דחיית בקשה להיתר בניה
- מתן היתר בתנאים
- היתר בסטייה מזניחה
- הקלות בניה
### 2. ערעורים על החלטות בעניין היטל השבחה
- חישוב היטל
- שיעור ההשבחה
- פטור מהיטל
- ערעורי שומה
### 3. ערעורים על החלטות בעניין תכניות
- אישור/דחיית תכנית
- תנאים בתכנית
- התנגדויות לתכניות
### 4. ערעורים על צווי הריסה
- צווים מנהליים
- הליכי אכיפה
---
## פסקי דין חשובים בתחום
### בנושא היטל השבחה
- **ע"א 6339/97 עיריית רמת השרון נ' פנחס** - עקרונות יסוד בהיטל השבחה
- **ע"א 2892/07 בן ארי נ' הוועדה המקומית** - חישוב שיעור השבחה
### בנושא רישוי והיתרים
- **בג"ץ 5060/94 ד"ר ניימן נ' יו"ר ועדת הערר** - גבולות שיקול הדעת של ועדות
- **ע"א 1845/04 אושרי נ' הוועדה המקומית** - הקלות בניה
### בנושא שימוש חורג
- **בג"ץ 244/00 עמותת יער חמ"ד נ' ועדת הערר** - שימושים חורגים
### בנושא זכויות קנייניות מול אינטרס ציבורי
- **בג"ץ 6698/95 קעדאן נ' מינהל מקרקעי ישראל** - איזון בין זכויות
- **בג"ץ 2390/96 קרסיק נ' הממשלה** - זכות הקניין
---
## מושגי יסוד
### תכנון
**תכנית מתאר** - תכנית כללית לשטח מסוים, קובעת ייעודי קרקע, צפיפות, זכויות בניה.
**תכנית מפורטת** - תכנית המפרטת פרטי בניה, קווי בניין, גבהים.
**שימוש חורג** - שימוש שונה מהייעוד בתכנית.
**הקלה** - סטייה קלה מתכנית שניתן לאשר ללא שינוי התכנית (סעיף 197).
**סטייה מזניחה** - סטייה קלה מאוד מהיתר שניתן לאשר (סעיף 151).
### רישוי
**היתר בניה** - אישור לבנות על פי תכנית.
**תנאים להיתר** - דרישות שיש לעמוד בהן לפני מתן היתר או במהלך הבניה.
**פקיעת היתר** - תום תוקף היתר אם לא הוחל בבניה.
### היטל השבחה
**השבחה** - עליית ערך מקרקעין כתוצאה מתכנית או היתר.
**היטל השבחה** - תשלום חובה בשיעור של 50% מההשבחה (בדרך כלל).
**מימוש זכויות** - התחלת בנייה או מכירה המחייבת בתשלום היטל.
**פטור מהיטל** - מקרים בהם החוק פוטר מתשלום (למשל: בניית דירת מגורים יחידה).
### הליכים
**ערר** - ערעור על החלטת ועדה מקומית לועדת ערר מחוזית.
**ערעור מינהלי** - ערעור מועדת ערר לבית משפט.
**בקשה מנהלית** - פנייה לביה"מ ללא צורך בערר קודם (במקרים מסוימים).
---
## סמכויות ועדת הערר (סעיף 205)
ועדת ערר רשאית:
1. לאשר את ההחלטה
2. לבטל את ההחלטה
3. להורות על שינוי בהחלטה
4. להחזיר לועדה המקומית לדיון נוסף
ועדת הערר פועלת כערכאה מינהלית וסמכויותיה דומות לאלו של בית משפט.
---
## עקרונות פסיקתיים נפוצים
### 1. שיקול דעת מנהלי
- לועדות תכנון יש שיקול דעת רחב
- בית המשפט (וועדת הערר) יתערב רק אם השיקול לא סביר, שרירותי, או בחוסר סמכות
### 2. האיזון בין זכויות קנייניות לאינטרס ציבורי
- יש לאזן בין זכות הקניין של הפרט לבין האינטרס הציבורי
- שני הערכים חשובים ויש לשקלם
### 3. ההסתמכות על מומחים
- חוות דעת מומחה חשובה אך לא קובעת
- הועדה רשאית לסטות מחוות דעת אם תנמק
### 4. הנמקת החלטות
- כל החלטה חייבת להיות מנומקת
- חוסר נימוק או נימוק לקוני עלול להביא לביטול ההחלטה
### 5. שימת לב להשפעות
- על הועדה לשקול השפעות על הסביבה, שכנים, תשתיות
---
## טיפים למומחה הגישה השיפוטית
כשאתה מנתח החלטות בדיני תכנון ובניה, שים לב:
1. **לאיזה סעיפים בחוק מתייחסים** - אלו המקורות המשפטיים הבסיסיים
2. **אילו פסקי דין מצוטטים** - אלו המקורות הפסיקתיים שהשופט מסתמך עליהם
3. **איך מאזנים בין ערכים מנוגדים** - זכות קניין מול אינטרס ציבורי
4. **רמת ההתערבות** - האם השופט נוטה להתערב או להותיר החלטות בעינן
5. **יחס לחוות דעת מומחים** - האם סומך עליהן או ביקורתי
6. **רמת הנמקה** - האם מפורט או תמציתי
זכור - זהו תחום משפטי טכני שדורש ידע מקצועי. השופטים בועדות ערר הם לרוב עורכי דין או אנשי מקצוע בתחום התכנון.

View File

@@ -0,0 +1,635 @@
#!/usr/bin/env node
/**
* create-decision-structure.js — טיוטת מבנה החלטת ועדת ערר
*
* מייצר קובץ DOCX מעוצב עם כל חלקי ההחלטה (בלוקים א-יב).
* בלוקים א-ט ממולאים בתוכן, בלוק י (דיון) ויא (סיכום) = placeholders.
*
* שימוש:
* node create-decision-structure.js <input.json> [output.docx]
*
* מבוסס על create-legal-doc.js מתוך legal-docx skill.
* כללי RTL: START/END (לא LEFT/RIGHT), bidi+bidirectional+rightToLeft בכל רמה.
*
* v1.0
*/
const fs = require('fs');
const path = require('path');
const {
Document, Packer, Paragraph, TextRun, Header, Footer,
AlignmentType, HeadingLevel, PageNumber, LevelFormat,
Table, TableRow, TableCell, WidthType, BorderStyle,
ShadingType, UnderlineType
} = require(path.join(process.cwd(), 'node_modules', 'docx'));
// ═══════════════════════════════════════════════
// CONFIGURATION
// ═══════════════════════════════════════════════
const FONT = "David";
const FONT_SIZE = 24; // 12pt
const HEADING1_SIZE = 32; // 16pt — "החלטה"
const HEADING2_SIZE = 28; // 14pt — כותרות פרקים
const MARGIN_CM = 2.5;
const MARGIN_DXA = Math.round(MARGIN_CM / 2.54 * 1440); // 1417
const PAGE_WIDTH = 11906; // A4
const PAGE_HEIGHT = 16838;
const CONTENT_WIDTH = PAGE_WIDTH - MARGIN_DXA * 2; // 9072
const noBorders = {
top: { style: BorderStyle.NONE, size: 0, color: "FFFFFF" },
bottom: { style: BorderStyle.NONE, size: 0, color: "FFFFFF" },
left: { style: BorderStyle.NONE, size: 0, color: "FFFFFF" },
right: { style: BorderStyle.NONE, size: 0, color: "FFFFFF" }
};
// ═══════════════════════════════════════════════
// RTL HELPERS — מבוסס על create-legal-doc.js
// ═══════════════════════════════════════════════
const rtlRun = (text, opts = {}) => new TextRun({
text,
font: opts.font || FONT,
size: opts.size || FONT_SIZE,
bold: opts.bold || false,
underline: opts.underline ? { type: UnderlineType.SINGLE } : undefined,
rightToLeft: true,
});
const rtlPara = (children, opts = {}) => new Paragraph({
bidirectional: true,
alignment: opts.alignment || AlignmentType.BOTH,
spacing: opts.spacing || { after: 120, line: 276 }, // 1.15 line spacing = 276 twips
indent: opts.indent,
children: Array.isArray(children) ? children : [children],
...(opts.heading ? { heading: opts.heading } : {}),
});
// כותרת ראשית — "החלטה"
const mainTitle = (text) => rtlPara(
rtlRun(text, { bold: true, size: HEADING1_SIZE }),
{ heading: HeadingLevel.HEADING_1, alignment: AlignmentType.CENTER, spacing: { before: 240, after: 240 } }
);
// כותרת פרק — "תמצית טענות הצדדים", "דיון והכרעה"
const sectionTitle = (text) => rtlPara(
rtlRun(text, { bold: true, size: HEADING2_SIZE, underline: true }),
{ heading: HeadingLevel.HEADING_2, alignment: AlignmentType.CENTER, spacing: { before: 360, after: 240 } }
);
// כותרת משנה — "טענות העוררים"
const subTitle = (text) => rtlPara(
rtlRun(text, { bold: true, size: FONT_SIZE }),
{ alignment: AlignmentType.CENTER, spacing: { before: 240, after: 160 } }
);
// סעיף ממוספר — מספר bold + טקסט רגיל
const numberedPara = (num, text) => rtlPara([
rtlRun(`${num}. `, { bold: true }),
rtlRun(text),
], { spacing: { after: 120, line: 276 } });
// ציטוט (blockquote) — הזחה משני הצדדים
const blockquote = (text) => rtlPara(
rtlRun(text),
{ indent: { left: 567, right: 567 }, spacing: { before: 120, after: 120, line: 276 } }
);
// תיבת תמונה — מסגרת אפורה עם הנחיה
const imageBox = (description) => new Paragraph({
bidirectional: true,
alignment: AlignmentType.CENTER,
spacing: { before: 200, after: 200 },
shading: { type: ShadingType.CLEAR, fill: "F0F0F0" },
children: [
new TextRun({
text: `📷 תמונה: ${description}`,
font: FONT,
size: FONT_SIZE,
rightToLeft: true,
bold: true,
}),
],
});
// Placeholder — טקסט אפור שמסמן מקום
const placeholder = (text) => rtlPara(
new TextRun({
text: `[${text}]`,
font: FONT,
size: FONT_SIZE,
rightToLeft: true,
italics: true,
color: "808080",
}),
{ alignment: AlignmentType.CENTER, spacing: { before: 200, after: 200 } }
);
// רווח
const spacer = (after = 200) => rtlPara(rtlRun(""), { spacing: { after, before: 0 } });
// תא בטבלה
const rtlCell = (children, width, opts = {}) => new TableCell({
borders: noBorders,
width: { size: width, type: WidthType.DXA },
children: Array.isArray(children) ? children : [children],
...(opts.verticalAlign ? { verticalAlign: opts.verticalAlign } : {}),
});
// ═══════════════════════════════════════════════
// BLOCK BUILDERS — בוני הבלוקים
// ═══════════════════════════════════════════════
// בלוק א — כותרת מוסדית (טבלה 2 טורים)
function buildInstitutionalHeader(data) {
const leftCol = CONTENT_WIDTH * 0.5;
const rightCol = CONTENT_WIDTH * 0.5;
// צד ימין — מוסד
const rightCellContent = [
rtlPara(rtlRun("מדינת ישראל", { bold: true }), { alignment: AlignmentType.START, spacing: { after: 0 } }),
rtlPara(rtlRun("ועדת ערר לתכנון ובניה"), { alignment: AlignmentType.START, spacing: { after: 0 } }),
rtlPara(rtlRun("מחוז ירושלים"), { alignment: AlignmentType.START, spacing: { after: 80 } }),
];
// צד שמאל — מספרי תיק
const leftLines = [];
if (data.case_numbers) {
data.case_numbers.forEach(cn => {
leftLines.push(rtlPara([
rtlRun("מס' תיק: "),
rtlRun(cn, { bold: true }),
], { alignment: AlignmentType.START, spacing: { after: 0 } }));
});
}
if (data.plan_number) {
leftLines.push(rtlPara([
rtlRun("מס' תכנית: "),
rtlRun(data.plan_number, { bold: true }),
], { alignment: AlignmentType.START, spacing: { after: 0 } }));
}
if (data.request_number) {
leftLines.push(rtlPara([
rtlRun("מס' בקשה: "),
rtlRun(data.request_number, { bold: true }),
], { alignment: AlignmentType.START, spacing: { after: 0 } }));
}
return new Table({
visuallyRightToLeft: true,
width: { size: CONTENT_WIDTH, type: WidthType.DXA },
columnWidths: [rightCol, leftCol],
rows: [
new TableRow({
children: [
rtlCell(rightCellContent, rightCol),
rtlCell(leftLines.length ? leftLines : [rtlPara(rtlRun(""))], leftCol),
]
})
]
});
}
// בלוק ב — הרכב הוועדה
function buildPanel(data) {
const lines = [];
lines.push(spacer(120));
lines.push(rtlPara([
rtlRun("בפני:", { bold: true }),
], { spacing: { after: 40 } }));
lines.push(rtlPara([
rtlRun("יו\"ר הוועדה: ", { bold: true }),
rtlRun(data.panel?.chair || "עו\"ד דפנה תמיר"),
], { spacing: { after: 40 } }));
if (data.panel?.members) {
lines.push(rtlPara([
rtlRun("חברי הוועדה: ", { bold: true }),
rtlRun(data.panel.members[0] || ""),
], { spacing: { after: 40 } }));
for (let i = 1; i < data.panel.members.length; i++) {
lines.push(rtlPara(rtlRun(data.panel.members[i]), { spacing: { after: 40 } }));
}
}
return lines;
}
// בלוק ג — צדדים
function buildParties(data) {
const lines = [];
lines.push(spacer(120));
// עוררים
if (data.appellants) {
const label = data.appellants.length > 1 ? "העוררים:" : "העורר:";
lines.push(rtlPara(rtlRun(label, { bold: true }), { spacing: { after: 40 } }));
data.appellants.forEach(a => {
lines.push(rtlPara(rtlRun(a.name), { spacing: { after: 20 } }));
if (a.representative) {
lines.push(rtlPara(rtlRun(`ע"י ב"כ ${a.representative}`), { spacing: { after: 20 } }));
}
});
}
// נגד
lines.push(spacer(80));
lines.push(rtlPara(rtlRun("נגד", { bold: true }), {
alignment: AlignmentType.CENTER,
spacing: { before: 80, after: 80 }
}));
// משיבים
if (data.respondents) {
lines.push(rtlPara(rtlRun("המשיבים:", { bold: true }), { spacing: { after: 40 } }));
data.respondents.forEach((r, i) => {
lines.push(rtlPara(rtlRun(`${i + 1}. ${r.name}`), { spacing: { after: 20 } }));
if (r.representative) {
lines.push(rtlPara(rtlRun(`ע"י ב"כ ${r.representative}`), { spacing: { after: 20 } }));
}
});
}
return lines;
}
// בלוק ה — פתיחה
function buildOpening(data) {
const paras = [];
if (data.opening_paragraphs) {
data.opening_paragraphs.forEach((text, i) => {
paras.push(numberedPara(i + 1, text));
});
} else {
paras.push(numberedPara(1, `לפנינו ${data.appeal_description || "[תיאור הערר]"}.`));
}
return paras;
}
// בלוק ו — רקע עובדתי
function buildBackground(data) {
const paras = [];
let num = (data.opening_paragraphs?.length || 1) + 1;
if (data.use_petach_davar !== false) {
paras.push(sectionTitle("פתח דבר"));
}
// מקרקעין
if (data.property_description) {
paras.push(numberedPara(num++, data.property_description));
} else {
paras.push(numberedPara(num++, "[תיאור המקרקעין — מיקום, שטח, שכונה, ייעוד, מאפיינים ייחודיים]"));
}
// היסטוריה תכנונית
if (data.planning_history) {
data.planning_history.forEach(text => {
paras.push(numberedPara(num++, text));
});
} else {
paras.push(numberedPara(num++, "[היסטוריה תכנונית — תכניות קודמות, החלטות קודמות, היתרים]"));
}
// תמונה — מיקום
paras.push(imageBox("תשריט מיקום המגרש מתוך מערכת GIS — לסמן את המגרש"));
// מהות הבקשה
if (data.request_essence) {
if (Array.isArray(data.request_essence)) {
data.request_essence.forEach(text => {
paras.push(numberedPara(num++, text));
});
} else {
paras.push(numberedPara(num++, data.request_essence));
}
} else {
paras.push(numberedPara(num++, "[מהות הבקשה — פירוט מלא של מה שהתבקש]"));
}
// תמונה — תשריט
paras.push(imageBox("תשריט הבקשה / נספח בינוי / תכנית מוצעת"));
// ציטוט מפרוטוקול
if (data.committee_protocol_quote) {
paras.push(numberedPara(num++, "להלן מתוך פרוטוקול הדיון בוועדה המקומית:"));
paras.push(blockquote(data.committee_protocol_quote));
} else {
paras.push(numberedPara(num++, "[ציטוט מלא מפרוטוקול הוועדה המקומית]"));
}
// החלטת הוועדה + תנאים
if (data.committee_decision) {
paras.push(numberedPara(num++, data.committee_decision));
} else {
paras.push(numberedPara(num++, "[החלטת הוועדה המקומית — מה הוחלט, אילו תנאים נקבעו]"));
}
// תמונה אופציונלית — סביבה
if (data.include_aerial_photo !== false) {
paras.push(imageBox("צילום אוויר / מבט על הסביבה עם סימון המגרש"));
}
// סביבת המקרקעין
if (data.surroundings) {
paras.push(numberedPara(num++, data.surroundings));
}
// הגשת הערר
if (data.appeal_filing) {
paras.push(numberedPara(num++, data.appeal_filing));
} else {
paras.push(numberedPara(num++, "[הגשת הערר — תאריך, מי הגיש, הצטרפויות]"));
}
return { paras, nextNum: num };
}
// בלוק ז — טענות הצדדים
function buildClaims(data, startNum) {
const paras = [];
let num = startNum;
paras.push(sectionTitle("תמצית טענות הצדדים"));
// טענות העוררים
if (data.appellant_claims_sections) {
// מספר עוררים עם כותרות נפרדות
data.appellant_claims_sections.forEach(section => {
paras.push(subTitle(section.title));
section.claims.forEach(text => {
paras.push(numberedPara(num++, text));
});
});
} else {
paras.push(subTitle("טענות העוררים"));
if (data.appellant_claims) {
data.appellant_claims.forEach(text => {
paras.push(numberedPara(num++, text));
});
} else {
paras.push(numberedPara(num++, "[טענות העוררים]"));
}
}
// עמדת הוועדה המקומית
paras.push(subTitle("עמדת הוועדה המקומית"));
if (data.committee_position) {
data.committee_position.forEach(text => {
paras.push(numberedPara(num++, text));
});
} else {
paras.push(numberedPara(num++, "[עמדת הוועדה המקומית]"));
}
// עמדת מבקשי ההיתר / מגישי התכנית
const applicantTitle = data.type === "plan"
? "עמדת מגישי התכנית"
: "עמדת מבקשי ההיתר";
paras.push(subTitle(applicantTitle));
if (data.applicant_position) {
data.applicant_position.forEach(text => {
paras.push(numberedPara(num++, text));
});
} else {
paras.push(numberedPara(num++, `[${applicantTitle}]`));
}
return { paras, nextNum: num };
}
// בלוק ח — ההליכים בפני ועדת הערר
function buildProceedings(data, startNum) {
const paras = [];
let num = startNum;
paras.push(sectionTitle("ההליכים בפני ועדת הערר"));
if (data.proceedings) {
data.proceedings.forEach(item => {
if (item.type === "image") {
paras.push(imageBox(item.description));
} else if (item.type === "quote") {
paras.push(numberedPara(num++, item.intro || ""));
paras.push(blockquote(item.text));
} else {
paras.push(numberedPara(num++, item.text));
}
});
} else {
paras.push(numberedPara(num++, "[דיון — תאריך, נוכחים, עיקרי הדברים]"));
paras.push(numberedPara(num++, "[סיור (אם היה) — תאריך, תיאור]"));
paras.push(imageBox("צילומים מהסיור"));
paras.push(numberedPara(num++, "[החלטות ביניים]"));
paras.push(numberedPara(num++, "[השלמות טיעון — כרונולוגי]"));
paras.push(numberedPara(num++, "[חוו\"ד מקצועיות שהתקבלו]"));
paras.push(imageBox("הדמיות / חתכי בינוי מהשלמות טיעון (אם יש)"));
}
return { paras, nextNum: num };
}
// בלוק ט — תכניות חלות (אופציונלי)
function buildPlans(data, startNum) {
if (data.skip_plans_section) return { paras: [], nextNum: startNum };
const paras = [];
let num = startNum;
paras.push(sectionTitle("התכניות החלות על המקרקעין"));
if (data.applicable_plans) {
data.applicable_plans.forEach(item => {
if (item.type === "quote") {
paras.push(numberedPara(num++, item.intro || ""));
paras.push(blockquote(item.text));
} else {
paras.push(numberedPara(num++, item.text));
}
});
} else {
paras.push(numberedPara(num++, "[פירוט התכניות הרלוונטיות עם ציטוט מהוראותיהן]"));
}
return { paras, nextNum: num };
}
// בלוק יב — חתימות
function buildSignatures(data) {
const chairName = data.panel?.chair || "עו\"ד דפנה תמיר";
const secretaryName = data.secretary || "";
const halfWidth = Math.floor(CONTENT_WIDTH / 2);
return [
spacer(400),
rtlPara(rtlRun("ניתנה פה אחד, היום ______________, ______________."), {
spacing: { after: 400 }
}),
new Table({
visuallyRightToLeft: true,
width: { size: CONTENT_WIDTH, type: WidthType.DXA },
columnWidths: [halfWidth, halfWidth],
rows: [
new TableRow({
children: [
rtlCell([
rtlPara(rtlRun("________________________"), { alignment: AlignmentType.CENTER, spacing: { after: 40 } }),
rtlPara(rtlRun(chairName, { bold: true }), { alignment: AlignmentType.CENTER, spacing: { after: 20 } }),
rtlPara(rtlRun("יו\"ר ועדת הערר"), { alignment: AlignmentType.CENTER, spacing: { after: 20 } }),
], halfWidth),
rtlCell([
rtlPara(rtlRun("________________________"), { alignment: AlignmentType.CENTER, spacing: { after: 40 } }),
rtlPara(rtlRun(secretaryName || ""), { alignment: AlignmentType.CENTER, spacing: { after: 20 } }),
rtlPara(rtlRun("מזכירת ועדת הערר"), { alignment: AlignmentType.CENTER, spacing: { after: 20 } }),
], halfWidth),
]
})
]
}),
];
}
// ═══════════════════════════════════════════════
// MAIN — הרכבת המסמך
// ═══════════════════════════════════════════════
function buildDocument(data) {
const content = [];
// בלוק א — כותרת מוסדית
content.push(buildInstitutionalHeader(data));
content.push(spacer(160));
// בלוק ב — הרכב
content.push(...buildPanel(data));
content.push(spacer(80));
// בלוק ג — צדדים
content.push(...buildParties(data));
content.push(spacer(160));
// בלוק ד — כותרת "החלטה"
content.push(mainTitle("החלטה"));
// בלוק ה — פתיחה
content.push(...buildOpening(data));
// בלוק ו — רקע
const bg = buildBackground(data);
content.push(...bg.paras);
// בלוק ז — טענות
const claims = buildClaims(data, bg.nextNum);
content.push(...claims.paras);
// בלוק ח — הליכים
const proc = buildProceedings(data, claims.nextNum);
content.push(...proc.paras);
// בלוק ט — תכניות (אופציונלי)
const plans = buildPlans(data, proc.nextNum);
content.push(...plans.paras);
// בלוק י — דיון והכרעה (placeholder)
content.push(sectionTitle("דיון והכרעה"));
content.push(placeholder("כאן מתחיל פרק הדיון וההכרעה — ייכתב בשלב הבא"));
// בלוק יא — סיכום (placeholder)
content.push(sectionTitle("סיכום"));
content.push(placeholder("ייכתב לאחר השלמת פרק הדיון"));
// בלוק יב — חתימות
content.push(...buildSignatures(data));
return new Document({
styles: {
default: {
document: {
run: { font: FONT, size: FONT_SIZE, rightToLeft: true },
paragraph: { bidirectional: true, alignment: AlignmentType.BOTH }
}
},
paragraphStyles: [
{
id: "Heading1", name: "Heading 1", basedOn: "Normal", next: "Normal",
quickFormat: true,
run: { size: HEADING1_SIZE, bold: true, font: FONT, rightToLeft: true },
paragraph: { spacing: { before: 240, after: 240 }, outlineLevel: 0,
bidirectional: true, alignment: AlignmentType.CENTER }
},
{
id: "Heading2", name: "Heading 2", basedOn: "Normal", next: "Normal",
quickFormat: true,
run: { size: HEADING2_SIZE, bold: true, font: FONT, rightToLeft: true },
paragraph: { spacing: { before: 200, after: 200 }, outlineLevel: 1,
bidirectional: true, alignment: AlignmentType.CENTER }
},
]
},
sections: [{
properties: {
page: {
size: { width: PAGE_WIDTH, height: PAGE_HEIGHT },
margin: { top: MARGIN_DXA, right: MARGIN_DXA, bottom: MARGIN_DXA, left: MARGIN_DXA }
},
bidi: true,
},
footers: {
default: new Footer({
children: [new Paragraph({
bidirectional: true,
alignment: AlignmentType.CENTER,
children: [
rtlRun("עמוד ", { size: 18 }),
new TextRun({ children: [PageNumber.CURRENT], font: FONT, size: 18 }),
rtlRun(" מתוך ", { size: 18 }),
new TextRun({ children: [PageNumber.TOTAL_PAGES], font: FONT, size: 18 }),
]
})]
})
},
children: content
}]
});
}
// ═══════════════════════════════════════════════
// CLI
// ═══════════════════════════════════════════════
async function main() {
const inputFile = process.argv[2];
if (!inputFile) {
console.error('שימוש: node create-decision-structure.js <input.json> [output.docx]');
console.error('');
console.error('קובץ ה-JSON צריך לכלול:');
console.error(' case_numbers, panel, appellants, respondents,');
console.error(' opening_paragraphs, property_description, planning_history,');
console.error(' request_essence, committee_protocol_quote, committee_decision,');
console.error(' appellant_claims, committee_position, applicant_position,');
console.error(' proceedings, applicable_plans');
console.error('');
console.error('ראה: .claude/skills/legal-decision/references/decision-template.json');
process.exit(1);
}
const data = JSON.parse(fs.readFileSync(inputFile, 'utf-8'));
const outputFile = process.argv[3] || `החלטה-ערר-${(data.case_numbers?.[0] || 'draft').replace(/\//g, '-')}-מבנה.docx`;
const doc = buildDocument(data);
const buffer = await Packer.toBuffer(doc);
fs.writeFileSync(outputFile, buffer);
console.log(`${outputFile}`);
console.log(` פונט: ${FONT} ${FONT_SIZE / 2}pt`);
console.log(` שוליים: ${MARGIN_CM} ס`);
console.log(` RTL: bidi + bidirectional + rightToLeft ✓`);
console.log(` Alignment: START/END ✓`);
console.log(` גודל: ${(buffer.length / 1024).toFixed(1)} KB`);
}
main().catch(err => {
console.error('❌ שגיאה:', err.message);
process.exit(1);
});

204
skills/decision/scripts/package-lock.json generated Normal file
View File

@@ -0,0 +1,204 @@
{
"name": "scripts",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"dependencies": {
"docx": "^9.6.1"
}
},
"node_modules/@types/node": {
"version": "25.5.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz",
"integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==",
"license": "MIT",
"dependencies": {
"undici-types": "~7.18.0"
}
},
"node_modules/core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
"license": "MIT"
},
"node_modules/docx": {
"version": "9.6.1",
"resolved": "https://registry.npmjs.org/docx/-/docx-9.6.1.tgz",
"integrity": "sha512-ZJja9/KBUuFC109sCMzovoq2GR2wCG/AuxivjA+OHj/q0TEgJIm3S7yrlUxIy3B+bV8YDj/BiHfWyrRFmyWpDQ==",
"license": "MIT",
"dependencies": {
"@types/node": "^25.2.3",
"hash.js": "^1.1.7",
"jszip": "^3.10.1",
"nanoid": "^5.1.3",
"xml": "^1.0.1",
"xml-js": "^1.6.8"
},
"engines": {
"node": ">=10"
}
},
"node_modules/hash.js": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
"integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
"license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
"minimalistic-assert": "^1.0.1"
}
},
"node_modules/immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
"license": "MIT"
},
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"license": "ISC"
},
"node_modules/isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
"license": "MIT"
},
"node_modules/jszip": {
"version": "3.10.1",
"resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
"integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
"license": "(MIT OR GPL-3.0-or-later)",
"dependencies": {
"lie": "~3.3.0",
"pako": "~1.0.2",
"readable-stream": "~2.3.6",
"setimmediate": "^1.0.5"
}
},
"node_modules/lie": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
"integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
"license": "MIT",
"dependencies": {
"immediate": "~3.0.5"
}
},
"node_modules/minimalistic-assert": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
"integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
"license": "ISC"
},
"node_modules/nanoid": {
"version": "5.1.7",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.7.tgz",
"integrity": "sha512-ua3NDgISf6jdwezAheMOk4mbE1LXjm1DfMUDMuJf4AqxLFK3ccGpgWizwa5YV7Yz9EpXwEaWoRXSb/BnV0t5dQ==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"bin": {
"nanoid": "bin/nanoid.js"
},
"engines": {
"node": "^18 || >=20"
}
},
"node_modules/pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
"license": "(MIT AND Zlib)"
},
"node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"license": "MIT"
},
"node_modules/readable-stream": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"license": "MIT",
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"node_modules/safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"license": "MIT"
},
"node_modules/sax": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz",
"integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==",
"license": "BlueOak-1.0.0",
"engines": {
"node": ">=11.0.0"
}
},
"node_modules/setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
"integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
"license": "MIT"
},
"node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"license": "MIT",
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/undici-types": {
"version": "7.18.2",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz",
"integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==",
"license": "MIT"
},
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"license": "MIT"
},
"node_modules/xml": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz",
"integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==",
"license": "MIT"
},
"node_modules/xml-js": {
"version": "1.6.11",
"resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz",
"integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==",
"license": "MIT",
"dependencies": {
"sax": "^1.2.4"
},
"bin": {
"xml-js": "bin/cli.js"
}
}
}
}

View File

@@ -0,0 +1,5 @@
{
"dependencies": {
"docx": "^9.6.1"
}
}

976
skills/docx/SKILL.md Normal file
View File

@@ -0,0 +1,976 @@
---
name: legal-docx
description: >
יצירת מסמכים משפטיים בעברית בפורמט DOCX עם תמיכה מלאה ב-RTL, עקוב אחר שינויים,
והערות. משתמש בסקיל הבסיסי docx ומוסיף התמחות בתחום המשפטי הישראלי.
טריגרים: "מסמך משפטי", "הסכם", "כתב הגנה", "כתב תביעה", "בקשה", "תצהיר",
"מכתב התראה", "חוזה", "הסכם שירותים", "ייפוי כוח", "פרוטוקול", "החלטה",
"צו", "פסק דין", "כתב טענות", בקשה ליצור מסמך DOCX בעברית, מסמך RTL,
"tracked changes בעברית", "הערות שוליים משפטיות", "עקוב אחר שינויים".
גם מתאים כאשר המשתמש מבקש מסמך Word בעברית עם פונט David/FrankRuehl/Miriam,
שוליים 2.5 ס"מ, או כל מסמך מקצועי בעברית שדורש עיצוב משפטי מדויק.
פיצ'רים: טבלאות RTL, הערות שוליים, תוכן עניינים, היפרלינקים,
לוגו/נייר פירמה, עריכת DOCX קיים, tracked changes, comments,
מרווח שורות, קו תחתי, מספר סקשנים, זיהוי אוטומטי של סוג מסמך.
---
# Legal DOCX v3.0 — מסמכים משפטיים בעברית
סקיל זה מרחיב את סקיל docx הבסיסי עם התמחות במסמכים משפטיים ישראליים.
**תמיד לקרוא קודם** את `/mnt/skills/public/docx/SKILL.md` — הסקיל הזה מניח שאתה מכיר את תהליך העבודה הבסיסי (docx-js, unpack/pack, tracked changes, comments).
---
## 🔴 קריטי: כללי RTL שחייבים לזכור
### הכלל המרכזי: START/END במקום LEFT/RIGHT
**במסמך עברי עם `bidirectional: true`, לעולם אל תשתמש ב-`AlignmentType.LEFT` או `AlignmentType.RIGHT` לפסקאות ומספור!**
| רוצה יישור ל... | ❌ לא להשתמש | ✅ להשתמש |
|-----------------|-------------|----------|
| **ימין** | `LEFT` או `RIGHT` | `AlignmentType.START` |
| **שמאל** | `LEFT` או `RIGHT` | `AlignmentType.END` |
| **מרכז** | — | `AlignmentType.CENTER` |
| **שני צדדים** | — | `AlignmentType.BOTH` |
> **למה?** כש-`bidirectional: true`, Word מתבלבל עם LEFT/RIGHT. `START` = התחלה = ימין ב-RTL, `END` = סוף = שמאל ב-RTL.
### שלוש הגדרות RTL חובה
כל מסמך עברי חייב את **שלושת** ההגדרות הבאות בכל הרמות:
```javascript
// 1. ברמת ה-Section
sections: [{
properties: {
bidi: true // ← חובה!
}
}]
// 2. ברמת כל Paragraph
new Paragraph({
bidirectional: true, // ← חובה!
alignment: AlignmentType.BOTH, // או START/CENTER/END
})
// 3. ברמת כל TextRun
new TextRun({
text: "טקסט בעברית",
rightToLeft: true, // ← חובה!
font: "David",
})
```
**חוסר באחת מהן = יישור שגוי או טקסט הפוך!**
---
## זיהוי סוג מסמך — Document Type Detection
**לפני יצירת מסמך, זהה את סוגו.** לכל סוג יש מבנה שונה:
| סוג מסמך | דוגמאות | Header בית משפט? | מבנה מיוחד |
|----------|---------|------------------|------------|
| **כתב טענות** | תביעה, הגנה, בקשה, ערעור, תצהיר, בר"ע | ✅ כן | טבלת Header עם בית משפט + מספר תיק |
| **מכתב התראה** | התראה, דרישה, מכתב עו"ד | ❌ לא | לוגו/פרטי משרד, "הנדון:", חתימה |
| **הסכם/חוזה** | הסכם שירותים, NDA, חוזה שכירות | ❌ לא | הואילים, צדדים, חתימות בשני טורים |
| **מסמך כללי** | חוות דעת, מזכר, סיכום | ❌ לא | לפי הצורך |
### טריגרים לזיהוי
```
כתב טענות ← "בית משפט", "בית הדין", "תביעה", "הגנה", "בקשה",
"ערעור", "תצהיר", "המבקש", "המשיב", "התובע", "הנתבע", "בר\"ע"
מכתב התראה ← "התראה", "דרישה", "לכבוד", "הנדון:", "נשלח מבלי לפגוע"
הסכם/חוזה ← "הסכם", "חוזה", "בין:", "לבין:", "הואיל", "צד א'", "צד ב'",
"ולראיה באו הצדדים"
```
---
## פונטים ומידות
### פונטים משפטיים
| פונט | שימוש | size (half-points) |
|------|-------|-------------------|
| **David** | ברירת מחדל, גוף טקסט | 24 (12pt) |
| **FrankRuehl** | פורמלי/שמרני | 24 (12pt) |
| **Miriam** | מודרני יותר | 24 (12pt) |
**חשוב:** תמיד להגדיר גם `w:cs` (Complex Script) וגם `w:ascii`/`w:hAnsi`:
```javascript
new TextRun({ text: "...", font: "David", rightToLeft: true })
// docx-js מייצר: <w:rFonts w:ascii="David" w:cs="David" w:eastAsia="David" w:hAnsi="David"/>
```
### מידות ושוליים
```
2.5 ס"מ = 1417 DXA (ברירת מחדל משפטי)
3.0 ס"מ = 1701 DXA
2.0 ס"מ = 1134 DXA
1.0 אינץ' = 1440 DXA
A4 = 11906 × 16838 DXA
רוחב תוכן (A4, שוליים 2.5 ס"מ) = 9072 DXA
רוחב תוכן (A4, שוליים 2.0 ס"מ) = 9638 DXA
```
---
## מספור סעיפים משפטיים
**⚠️ שים לב: `alignment: AlignmentType.START` — לא LEFT ולא RIGHT!**
```javascript
numbering: {
config: [{
reference: "legal-clauses",
levels: [
{
level: 0,
format: LevelFormat.DECIMAL,
text: "%1.",
alignment: AlignmentType.START, // ✅ START — לא RIGHT!
suffix: "tab",
style: { paragraph: { indent: { left: 720, hanging: 360 } } }
},
{
level: 1,
format: LevelFormat.DECIMAL,
text: "%1.%2",
alignment: AlignmentType.START, // ✅ START — לא RIGHT!
suffix: "tab",
style: { paragraph: { indent: { left: 1440, hanging: 500 } } }
},
{
level: 2,
format: LevelFormat.DECIMAL,
text: "%1.%2.%3",
alignment: AlignmentType.START, // ✅ START
suffix: "tab",
style: { paragraph: { indent: { left: 2160, hanging: 640 } } }
}
]
}]
}
```
**שימוש:**
```javascript
new Paragraph({
bidirectional: true,
numbering: { reference: "legal-clauses", level: 0 },
children: [new TextRun({ text: "תוכן הסעיף", font: "David", size: 24, rightToLeft: true })]
})
```
> **הבעיה שנפתרה:** בלי `AlignmentType.START`, המספור מופיע כ-".1" במקום "1."
---
## טבלאות RTL
**⚠️ קריטי: `visuallyRightToLeft: true` — בלי זה העמודות יהיו הפוכות!**
```javascript
const { Table, TableRow, TableCell, BorderStyle, WidthType, ShadingType } = require('docx');
const CONTENT_WIDTH = 9072; // A4 עם שוליים 2.5 ס"מ (11906 - 1417×2)
const border = { style: BorderStyle.SINGLE, size: 1, color: "999999" };
const borders = { top: border, bottom: border, left: border, right: border };
const noBorders = {
top: { style: BorderStyle.NONE, size: 0, color: "FFFFFF" },
bottom: { style: BorderStyle.NONE, size: 0, color: "FFFFFF" },
left: { style: BorderStyle.NONE, size: 0, color: "FFFFFF" },
right: { style: BorderStyle.NONE, size: 0, color: "FFFFFF" }
};
// Helper function לתאים בעברית
const rtlCell = (text, width, opts = {}) => new TableCell({
borders: opts.noBorders ? noBorders : borders,
width: { size: width, type: WidthType.DXA },
margins: { top: 80, bottom: 80, left: 120, right: 120 },
...(opts.shading ? { shading: { fill: opts.shading, type: ShadingType.CLEAR } } : {}),
children: [new Paragraph({
bidirectional: true,
alignment: opts.alignment || AlignmentType.CENTER,
children: [new TextRun({
text, font: "David", size: 24, rightToLeft: true, bold: opts.bold
})]
})]
});
// טבלה עם גבולות
new Table({
visuallyRightToLeft: true, // ✅ קריטי! בלי זה העמודות הפוכות
width: { size: CONTENT_WIDTH, type: WidthType.DXA },
columnWidths: [4536, 2268, 2268], // חייב להסתכם ל-CONTENT_WIDTH
rows: [
new TableRow({ children: [
rtlCell("סוג שירות", 4536, { bold: true, shading: "D5E8F0" }),
rtlCell("תעריף", 2268, { bold: true, shading: "D5E8F0" }),
rtlCell("הערות", 2268, { bold: true, shading: "D5E8F0" }),
]}),
new TableRow({ children: [
rtlCell("ייעוץ משפטי", 4536),
rtlCell("850 ש״ח", 2268),
rtlCell("בתוספת מע״מ", 2268),
]}),
]
})
// טבלה ללא גבולות (לחתימות / header)
new Table({
visuallyRightToLeft: true,
width: { size: CONTENT_WIDTH, type: WidthType.DXA },
columnWidths: [CONTENT_WIDTH / 2, CONTENT_WIDTH / 2],
rows: [
new TableRow({ children: [
rtlCell("חתימה: ________", CONTENT_WIDTH / 2, { noBorders: true, alignment: AlignmentType.CENTER }),
rtlCell("חתימה: ________", CONTENT_WIDTH / 2, { noBorders: true, alignment: AlignmentType.CENTER }),
]})
]
})
```
**כללים:**
- **`visuallyRightToLeft: true`** — חובה! בלי זה העמודות משמאל לימין
- **`WidthType.DXA`** — לא PERCENTAGE (פחות אמין ב-RTL)
- **`columnWidths`** — סכום חייב להיות שווה ל-`CONTENT_WIDTH`
- **`bidirectional: true` + `rightToLeft: true`** — בכל תא
---
## Tracked Changes — עקוב אחר שינויים
### שם מחבר בעברית
```xml
<w:del w:id="10" w:author="עו&quot;ד כהן" w:date="2026-02-06T09:00:00Z">
```
### שינוי ערך (סכום, תאריך, תקופה)
פצל את הטקסט ועטוף רק את הערך שמשתנה:
```xml
<w:r><w:rPr>...RTL PROPS...</w:rPr>
<w:t xml:space="preserve">שכר הטרחה יעמוד על סך של </w:t></w:r>
<w:del w:id="10" w:author="עו&quot;ד כהן" w:date="...">
<w:r><w:rPr>...RTL PROPS...</w:rPr><w:delText>750</w:delText></w:r>
</w:del>
<w:ins w:id="11" w:author="עו&quot;ד כהן" w:date="...">
<w:r><w:rPr>...RTL PROPS...</w:rPr><w:t>850</w:t></w:r>
</w:ins>
<w:r><w:rPr>...RTL PROPS...</w:rPr>
<w:t xml:space="preserve"> ש״ח לשעת עבודה</w:t></w:r>
```
### מחיקת סעיף שלם
סמן גם את ה-paragraph mark כ-deleted:
```xml
<w:p>
<w:pPr>
<w:bidi/>
<w:jc w:val="both"/>
<w:rPr>
<w:del w:id="20" w:author="עו&quot;ד כהן" w:date="..."/>
</w:rPr>
</w:pPr>
<w:del w:id="21" w:author="עו&quot;ד כהן" w:date="...">
<w:r><w:rPr>...RTL PROPS...</w:rPr>
<w:delText>הסעיף שנמחק</w:delText></w:r>
</w:del>
</w:p>
```
### RTL PROPS — בלוק rPr מלא לכל run
```xml
<w:rPr>
<w:rFonts w:ascii="David" w:cs="David" w:eastAsia="David" w:hAnsi="David"/>
<w:sz w:val="24"/>
<w:szCs w:val="24"/>
<w:rtl/>
</w:rPr>
```
### קבלה/דחייה של שינויים
**קבלת Insertion:**
```
לפני: <w:ins w:id="5" w:author="..."><w:r>...<w:t>טקסט חדש</w:t></w:r></w:ins>
אחרי: <w:r>...<w:t>טקסט חדש</w:t></w:r>
→ הסר את תגית <w:ins> ושמור את התוכן הפנימי.
```
**דחיית Insertion:**
```
לפני: <w:ins w:id="5" w:author="..."><w:r>...<w:t>טקסט חדש</w:t></w:r></w:ins>
אחרי: (הסר לחלוטין)
→ מחק את כל בלוק ה-<w:ins> כולל תוכנו.
```
**קבלת מחיקה:**
```
לפני: <w:del w:id="10" w:author="..."><w:r>...<w:delText>טקסט שנמחק</w:delText></w:r></w:del>
אחרי: (הסר לחלוטין)
→ מחק את כל בלוק ה-<w:del> כולל תוכנו — המחיקה מתקבלת.
```
**שחזור טקסט מקורי (דחיית מחיקה):**
```
לפני: <w:del w:id="10" w:author="..."><w:r>...<w:delText>טקסט מקורי</w:delText></w:r></w:del>
אחרי: <w:r>...<w:t>טקסט מקורי</w:t></w:r>
→ הסר <w:del>, החלף <w:delText> ב-<w:t>, הסר <w:del> מ-rPr אם קיים.
```
---
## הערות (Comments)
הערות משמשות בסקירה משפטית להסביר *למה* בוצע שינוי:
```bash
python /mnt/skills/public/docx/scripts/comment.py unpacked/ 0 "הערה בעברית" --author "עו״ד כהן"
```
שימושים נפוצים:
- הסבר לשינוי סכום או תאריך
- דגל על סעיף בעייתי
- הפניה לפסיקה או חקיקה
- שאלה ללקוח / לצד השני
> **הערה:** `comment.py` מטפל אוטומטית ב-Content_Types ו-relationships.
---
## עריכת DOCX קיים (Unpack → Edit → Pack)
### תהליך מאומת
```bash
# 1. פתיחת הקובץ
python /mnt/skills/public/docx/scripts/unpack.py input.docx unpacked/
# 2. עריכת word/document.xml (או קבצי XML אחרים)
# 3. ארגון מחדש
python /mnt/skills/public/docx/scripts/pack.py unpacked/ output.docx --original input.docx
```
### מיקום הוספת תוכן — כלל קריטי
```
⚠️ פסקאות חדשות חייבות להיכנס *לפני* <w:sectPr> האחרון בגוף המסמך.
הוספה *אחרי* sectPr תיכשל בוולידציה.
מבנה תקין:
<w:body>
<w:p>...</w:p> ← פסקאות קיימות
<w:p>...</w:p> ← פסקה חדשה כאן ✅
<w:sectPr>...</w:sectPr> ← תמיד אחרון
</w:body>
```
### דוגמה — הוספת פסקה בעברית
```xml
<w:p>
<w:pPr>
<w:bidi/>
<w:jc w:val="both"/>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:ascii="David" w:cs="David" w:eastAsia="David" w:hAnsi="David"/>
<w:sz w:val="24"/>
<w:szCs w:val="24"/>
<w:rtl/>
</w:rPr>
<w:t>הטקסט החדש</w:t>
</w:r>
</w:p>
```
---
## הערות שוליים (Footnotes)
**השימוש המרכזי:** הפניות לחקיקה ופסיקה.
```javascript
const { FootnoteReferenceRun } = require('docx');
// 1. הגדרה ב-Document:
const doc = new Document({
footnotes: {
1: { children: [new Paragraph({
bidirectional: true, alignment: AlignmentType.START, // ✅ START
children: [new TextRun({
text: "חוק החוזים (חלק כללי), התשל״ג-1973, סעיף 12.",
font: "David", size: 20, rightToLeft: true // 10pt להערות שוליים
})]
})] },
2: { children: [new Paragraph({
bidirectional: true, alignment: AlignmentType.START,
children: [new TextRun({
text: "ע״א 1234/20 כהן נ׳ לוי, פסקה 15 (פורסם בנבו, 1.1.2024).",
font: "David", size: 20, rightToLeft: true
})]
})] },
},
// ...sections
});
// 2. הפניה בגוף הטקסט:
new Paragraph({
bidirectional: true, alignment: AlignmentType.BOTH,
children: [
new TextRun({ text: "חובת תום הלב", font: "David", size: 24, rightToLeft: true }),
new FootnoteReferenceRun(1),
new TextRun({ text: " חלה על כל שלבי המשא ומתן", font: "David", size: 24, rightToLeft: true }),
new FootnoteReferenceRun(2),
new TextRun({ text: ".", font: "David", size: 24, rightToLeft: true }),
]
})
```
### תיקון RTL בהערות שוליים (post-unpack)
docx-js לא מגדיר RTL מלא בהערות שוליים. אחרי unpack, צריך לתקן ב-`word/footnotes.xml`:
```xml
<!-- 1. הוסף pStyle + bidi לכל הערת שוליים: -->
<w:footnote w:id="1">
<w:p>
<w:pPr>
<w:pStyle w:val="FootnoteText"/>
<w:bidi/>
<w:jc w:val="start"/>
</w:pPr>
...
<!-- 2. הוסף rtl ל-footnoteRef run: -->
<w:r>
<w:rPr>
<w:rStyle w:val="FootnoteReference"/>
<w:rtl/>
</w:rPr>
<w:footnoteRef/>
</w:r>
```
---
## מרווח שורות (Line Spacing)
**דרישת בתי המשפט:** בדרך כלל 1.5 שורות.
```javascript
const { LineRuleType } = require('docx');
// LineRuleType.AUTO — הערך הוא ב-1/240 שורה
spacing: { line: 240, lineRule: LineRuleType.AUTO } // 1.0 — צפוף
spacing: { line: 276, lineRule: LineRuleType.AUTO } // 1.15 — ברירת מחדל Word
spacing: { line: 360, lineRule: LineRuleType.AUTO } // 1.5 — נדרש בבתי משפט
spacing: { line: 480, lineRule: LineRuleType.AUTO } // 2.0 — כפול
// שילוב עם before/after:
spacing: { line: 360, lineRule: LineRuleType.AUTO, before: 120, after: 120 }
```
---
## תוכן עניינים (TOC)
**⚠️ חובה: TOC ידני (לא TableOfContents).**
`TableOfContents` של docx-js מייצר שדה שוורד מעדכן ב-F9 ומאבד הגדרות RTL.
```javascript
const { Tab, TabStopType, LeaderType, PageBreak } = require('docx');
// שורת TOC ידנית
const tocEntry = (text, pageNum, opts = {}) => new Paragraph({
bidirectional: true,
spacing: { after: 60, line: 276, lineRule: LineRuleType.AUTO },
...(opts.indent ? { indent: { right: opts.indent } } : {}),
tabStops: [{ type: TabStopType.RIGHT, position: 9026, leader: LeaderType.DOT }],
children: [
new TextRun({
text, font: "David", size: 24, rightToLeft: true,
bold: opts.bold || false,
}),
new TextRun({ children: [new Tab()], font: "David", rightToLeft: true }),
new TextRun({
text: String(pageNum), font: "David", size: 24, rightToLeft: true,
}),
]
});
// שימוש:
new Paragraph({
bidirectional: true, alignment: AlignmentType.CENTER,
spacing: { after: 200 },
children: [new TextRun({
text: "תוכן עניינים", font: "David", size: 32, bold: true, rightToLeft: true
})]
}),
tocEntry("פרק א׳ — הגדרות כלליות", 2, { bold: true }),
tocEntry("1. הגדרות יסוד", 2, { indent: 400 }),
tocEntry("פרק ב׳ — השירותים", 3, { bold: true }),
new Paragraph({ children: [new PageBreak()] }),
```
---
## קו תחתי (Underline)
```javascript
const { UnderlineType } = require('docx');
// קו תחתי רגיל:
new TextRun({
text: "נושא: הסכם שירותים",
font: "David", size: 24, rightToLeft: true,
underline: { type: UnderlineType.SINGLE }
})
// קו תחתי כפול (לכותרות חשובות):
underline: { type: UnderlineType.DOUBLE }
// סוגים שימושיים: SINGLE, DOUBLE, THICK, DOTTED, DASH, WAVE
```
---
## מספר סקשנים (Multiple Sections)
**שימוש:** כותרות שונות לנספחים, עמוד לרוחב לטבלאות, שוליים שונים.
```javascript
const doc = new Document({
sections: [
// סקשן 1 — גוף ההסכם
{
properties: {
page: { size: { width: 11906, height: 16838 },
margin: { top: 1417, right: 1417, bottom: 1417, left: 1417 } },
bidi: true,
},
headers: {
default: new Header({ children: [new Paragraph({
bidirectional: true, alignment: AlignmentType.CENTER,
children: [new TextRun({ text: "הסכם שירותים", font: "David", size: 20, bold: true, rightToLeft: true })]
})] })
},
children: [ /* ... */ ]
},
// סקשן 2 — נספח עם כותרת שונה
{
properties: {
page: { size: { width: 11906, height: 16838 },
margin: { top: 1417, right: 1417, bottom: 1417, left: 1417 } },
bidi: true,
},
headers: {
default: new Header({ children: [new Paragraph({
bidirectional: true, alignment: AlignmentType.START, // ✅ START
children: [new TextRun({ text: "נספח א׳ — לוח תעריפים", font: "David", size: 20, bold: true, rightToLeft: true })]
})] })
},
children: [ /* ... */ ]
}
]
});
```
---
## לוגו/תמונה בכותרת (Letterhead)
```javascript
const { ImageRun } = require('docx');
const logoBuffer = fs.readFileSync('/path/to/logo.png');
headers: {
default: new Header({
children: [
new Paragraph({
alignment: AlignmentType.CENTER,
children: [
new ImageRun({
data: logoBuffer,
transformation: { width: 200, height: 60 }, // pixels
type: "png",
}),
],
}),
new Paragraph({
bidirectional: true, alignment: AlignmentType.CENTER,
children: [new TextRun({
text: "משרד עורכי דין ישראלי ושות׳",
font: "David", size: 20, bold: true, rightToLeft: true
})],
}),
],
}),
}
```
**הערה:** תמונה חייבת להיות קובץ אמיתי — לבקש מהמשתמש אם אין.
---
## היפרלינקים
```javascript
const { ExternalHyperlink, UnderlineType } = require('docx');
new Paragraph({
bidirectional: true,
children: [
new TextRun({ text: "ראה: ", font: "David", size: 24, rightToLeft: true }),
new ExternalHyperlink({
link: "https://www.nevo.co.il/law_html/law01/073_002.htm",
children: [new TextRun({
text: "חוק החוזים באתר נבו",
font: "David", size: 24, rightToLeft: true,
color: "0563C1",
underline: { type: UnderlineType.SINGLE },
})],
}),
]
})
```
**⚠️ אזהרות:**
- **לא להשתמש ב-`style: "Hyperlink"`** — מפריע ל-RTL!
- **לא להוסיף `alignment: AlignmentType.RIGHT`** — `bidirectional: true` מספיק
---
## תבניות מסמכים — Document Templates
### תבנית 1: כתב טענות (בקשה, תביעה, הגנה, ערעור)
```javascript
const { Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell,
AlignmentType, LevelFormat, BorderStyle, WidthType } = require('docx');
const PAGE_WIDTH = 11906;
const MARGINS = { top: 1134, right: 1134, bottom: 1134, left: 1134 };
const CONTENT_WIDTH = PAGE_WIDTH - MARGINS.left - MARGINS.right;
const noBorder = { style: BorderStyle.NONE, size: 0, color: "FFFFFF" };
const noBorders = { top: noBorder, bottom: noBorder, left: noBorder, right: noBorder };
// Header בית משפט — טבלה עם שם בית המשפט (ימין) ומספר תיק (שמאל)
function courtHeader(courtName, caseNumber) {
return new Table({
width: { size: CONTENT_WIDTH, type: WidthType.DXA },
columnWidths: [CONTENT_WIDTH / 2, CONTENT_WIDTH / 2],
visuallyRightToLeft: true,
rows: [
new TableRow({
children: [
new TableCell({
width: { size: CONTENT_WIDTH / 2, type: WidthType.DXA },
borders: noBorders,
children: [new Paragraph({
bidirectional: true, alignment: AlignmentType.START,
children: [new TextRun({ text: courtName, bold: true, font: "David", size: 26, rightToLeft: true })]
})]
}),
new TableCell({
width: { size: CONTENT_WIDTH / 2, type: WidthType.DXA },
borders: noBorders,
children: [new Paragraph({
bidirectional: true, alignment: AlignmentType.END,
children: [new TextRun({ text: caseNumber, bold: true, font: "David", size: 26, rightToLeft: true })]
})]
})
]
})
]
});
}
// כותרת ראשית ממורכזת עם קו תחתון
function mainTitle(text) {
return new Paragraph({
bidirectional: true, alignment: AlignmentType.CENTER,
spacing: { before: 300, after: 300 },
children: [new TextRun({ text, bold: true, font: "David", size: 28, rightToLeft: true, underline: {} })]
});
}
// כותרת משנה מיושרת לימין עם קו תחתון
function subHeading(text) {
return new Paragraph({
bidirectional: true, alignment: AlignmentType.START,
spacing: { before: 240, after: 120 },
children: [new TextRun({ text, bold: true, font: "David", size: 24, rightToLeft: true, underline: {} })]
});
}
// שימוש:
const doc = new Document({
numbering: {
config: [{
reference: "legal-clauses",
levels: [{
level: 0, format: LevelFormat.DECIMAL, text: "%1.",
alignment: AlignmentType.START, suffix: "tab",
style: { paragraph: { indent: { left: 360, hanging: 360 } } }
}]
}]
},
sections: [{
properties: {
page: { size: { width: PAGE_WIDTH, height: 16838 }, margin: MARGINS },
bidi: true
},
children: [
courtHeader("בית המשפט המחוזי בתל אביב", "ת\"א 12345-01-26"),
mainTitle("כתב תביעה"),
// ... פרטי צדדים, סעיפים, חתימה
]
}]
});
```
### תבנית 2: מכתב התראה
```javascript
// מכתב התראה — ללא header בית משפט, עם פרטי משרד
function letterHeader(firmName, address, phone, email) {
return [
new Paragraph({
bidirectional: true, alignment: AlignmentType.START,
children: [new TextRun({ text: firmName, bold: true, font: "David", size: 28, rightToLeft: true })]
}),
new Paragraph({
bidirectional: true, alignment: AlignmentType.START,
children: [new TextRun({ text: address, font: "David", size: 22, rightToLeft: true })]
}),
new Paragraph({
bidirectional: true, alignment: AlignmentType.START,
spacing: { after: 300 },
children: [new TextRun({ text: `טל': ${phone} | ${email}`, font: "David", size: 22, rightToLeft: true })]
}),
];
}
function subjectLine(text) {
return new Paragraph({
bidirectional: true, alignment: AlignmentType.CENTER,
spacing: { before: 200, after: 200 },
children: [
new TextRun({ text: "הנדון: ", bold: true, font: "David", size: 24, rightToLeft: true }),
new TextRun({ text, bold: true, font: "David", size: 24, rightToLeft: true, underline: {} })
]
});
}
// שימוש:
sections: [{
properties: { page: { ... }, bidi: true },
children: [
...letterHeader("משרד עו\"ד כהן ושות'", "רח' הרצל 1, תל אביב", "03-1234567", "office@cohen-law.co.il"),
new Paragraph({
bidirectional: true, alignment: AlignmentType.START,
children: [new TextRun({ text: "תאריך: 10.2.2026", font: "David", size: 24, rightToLeft: true })]
}),
new Paragraph({
bidirectional: true, alignment: AlignmentType.START,
spacing: { before: 200 },
children: [new TextRun({ text: "לכבוד: [שם הנמען]", font: "David", size: 24, rightToLeft: true })]
}),
subjectLine("התראה בטרם נקיטת הליכים משפטיים"),
// ... גוף המכתב
]
}]
```
### תבנית 3: הסכם/חוזה
```javascript
// הסכם — הואילים, צדדים, חתימות בשני טורים
function contractTitle(text) {
return new Paragraph({
bidirectional: true, alignment: AlignmentType.CENTER,
spacing: { after: 300 },
children: [new TextRun({ text, bold: true, font: "David", size: 32, rightToLeft: true })]
});
}
function partyClause(label, name, id, address, alias) {
return new Paragraph({
bidirectional: true, alignment: AlignmentType.BOTH,
spacing: { after: 120 },
children: [
new TextRun({ text: `${label}: `, bold: true, font: "David", size: 24, rightToLeft: true }),
new TextRun({ text: `${name}, ח.פ./ת.ז. ${id}, מ${address} (להלן: "`, font: "David", size: 24, rightToLeft: true }),
new TextRun({ text: alias, bold: true, font: "David", size: 24, rightToLeft: true }),
new TextRun({ text: '")', font: "David", size: 24, rightToLeft: true }),
]
});
}
function signatureTable() {
return new Table({
width: { size: CONTENT_WIDTH, type: WidthType.DXA },
columnWidths: [CONTENT_WIDTH / 2, CONTENT_WIDTH / 2],
visuallyRightToLeft: true,
rows: [
new TableRow({
children: [
new TableCell({
borders: noBorders,
children: [
new Paragraph({ bidirectional: true, alignment: AlignmentType.CENTER,
children: [new TextRun({ text: "_________________", font: "David", size: 24, rightToLeft: true })] }),
new Paragraph({ bidirectional: true, alignment: AlignmentType.CENTER,
children: [new TextRun({ text: "צד א'", font: "David", size: 24, rightToLeft: true })] })
]
}),
new TableCell({
borders: noBorders,
children: [
new Paragraph({ bidirectional: true, alignment: AlignmentType.CENTER,
children: [new TextRun({ text: "_________________", font: "David", size: 24, rightToLeft: true })] }),
new Paragraph({ bidirectional: true, alignment: AlignmentType.CENTER,
children: [new TextRun({ text: "צד ב'", font: "David", size: 24, rightToLeft: true })] })
]
})
]
})
]
});
}
// שימוש:
sections: [{
properties: { page: { ... }, bidi: true },
children: [
contractTitle("הסכם שירותים"),
new Paragraph({
bidirectional: true, alignment: AlignmentType.CENTER,
children: [new TextRun({ text: "נערך ונחתם בתל אביב ביום __________", font: "David", size: 24, rightToLeft: true })]
}),
partyClause("מצד אחד", "[שם]", "[מספר]", "[כתובת]", "המזמין"),
partyClause("מצד שני", "[שם]", "[מספר]", "[כתובת]", "הספק"),
// הואילים...
// סעיפים...
new Paragraph({
bidirectional: true, alignment: AlignmentType.CENTER,
spacing: { before: 400, after: 300 },
children: [new TextRun({ text: "ולראיה באו הצדדים על החתום:", bold: true, font: "David", size: 24, rightToLeft: true })]
}),
signatureTable()
]
}]
```
---
## Quick Reference — טבלת עזר מהיר
### יישור
| רוצה | השתמש ב... | ❌ לא להשתמש |
|------|-----------|-------------|
| ימין | `AlignmentType.START` | `LEFT`, `RIGHT` |
| שמאל | `AlignmentType.END` | `LEFT`, `RIGHT` |
| מרכז | `AlignmentType.CENTER` | — |
| שני צדדים | `AlignmentType.BOTH` | `JUSTIFIED` |
### גדלי טקסט (half-points)
| שימוש | size | נקודות |
|-------|------|--------|
| גוף טקסט | 24 | 12pt |
| כותרת משנה | 26 | 13pt |
| כותרת ראשית | 28-32 | 14-16pt |
| הערות שוליים | 20 | 10pt |
| Header/Footer | 18-20 | 9-10pt |
### מרווחי שורות
| רווח | line value |
|------|-----------|
| 1.0 | 240 |
| 1.15 | 276 |
| 1.5 | 360 |
| 2.0 | 480 |
### Checklist — הגדרות חובה
```
☐ Section: bidi: true
☐ Paragraph: bidirectional: true
☐ TextRun: rightToLeft: true
☐ Numbering: alignment: AlignmentType.START
☐ Table: visuallyRightToLeft: true
☐ Footnotes: alignment: AlignmentType.START
```
---
## 🔧 Troubleshooting
**מספור מופיע הפוך (.1 במקום 1.):**
→ וודא `alignment: AlignmentType.START` במספור (לא RIGHT!)
**טקסט מופיע משמאל לימין:**
→ וודא את שלושת ההגדרות: Section `bidi`, Paragraph `bidirectional`, TextRun `rightToLeft`
**עמודות טבלה הפוכות:**
→ הוסף `visuallyRightToLeft: true` לטבלה
**columnWidths לא מסתכם:**
→ וודא שסכום כל הרוחבים = CONTENT_WIDTH (9072 לשוליים 2.5 ס"מ, חישוב: 11906 - 1417×2)
**המסמך לא נפתח / שגיאה ב-Word:**
→ בדוק שלא הוספת פסקה אחרי `<w:sectPr>` (חייב להיות אחרון ב-body)
→ וודא `npm list docx` >= 8.0.0
**הערות שוליים לא ב-RTL:**
→ אחרי unpack, תקן ידנית ב-word/footnotes.xml (ראה סעיף הערות שוליים)
---
## טעויות נפוצות — Common Pitfalls
| ❌ טעות | ✅ תיקון |
|--------|---------|
| `AlignmentType.RIGHT` במספור | `AlignmentType.START` |
| `AlignmentType.LEFT` ליישור שמאלי | `AlignmentType.END` |
| טבלה בלי `visuallyRightToLeft` | הוסף `visuallyRightToLeft: true` |
| שכחת `bidirectional: true` בפסקה | הוסף לכל פסקה |
| שכחת `rightToLeft: true` ב-TextRun | הוסף לכל TextRun |
| שכחת `bidi: true` ב-Section | הוסף ל-properties |
| הוספת פסקה אחרי `sectPr` | הוסף לפני `sectPr` |
| שימוש ב-`style: "Hyperlink"` | הגדר ידנית `color` + `underline` |
| `columnWidths` לא מסתכם נכון | וודא שהסכום = `CONTENT_WIDTH` |
---
## קבצי עזר
- **`references/document-types.md`** — מבנים מפורטים ל-9 סוגי מסמכים משפטיים
- **`scripts/create-legal-doc.js`** — סקריפט בסיסי עם כל הגדרות ה-RTL המתוקנות
---
## Dependencies
```bash
npm install docx
```
**גרסה מומלצת:** docx >= 8.0.0

View File

@@ -0,0 +1,271 @@
# סוגי מסמכים משפטיים — מבנים ותבניות
## תוכן עניינים
1. [הסכם / חוזה](#הסכם--חוזה)
2. [מכתב התראה](#מכתב-התראה)
3. [כתב תביעה](#כתב-תביעה)
4. [כתב הגנה](#כתב-הגנה)
5. [בקשה לבית משפט](#בקשה-לבית-משפט)
6. [תצהיר](#תצהיר)
7. [ייפוי כוח](#ייפוי-כוח)
8. [פרוטוקול ישיבה](#פרוטוקול-ישיבה)
9. [חוות דעת משפטית](#חוות-דעת-משפטית)
---
## הסכם / חוזה
### מבנה
```
כותרת: "הסכם [סוג]" (מרכז, bold, 16pt)
תאריך ומקום: "נערך ונחתם ב[עיר] ביום [תאריך]"
צדדים:
"מצד אחד: [שם], ח.פ./ת.ז. [מספר], מ[כתובת] (להלן: "[כינוי]")"
"מצד שני: [שם], ח.פ./ת.ז. [מספר], מ[כתובת] (להלן: "[כינוי]")"
הואילים (מוספרים):
"1. והואיל ו[תנאי ראשון];"
"2. והואיל ו[תנאי שני];"
מעבר: "לפיכך הוסכם, הותנה והוצהר בין הצדדים כדלקמן:" (מרכז, bold)
סעיפים ממוספרים: 1., 1.1, 1.2, 2., 2.1...
חתימות: "ולראיה באו הצדדים על החתום:" + שורות חתימה
```
### סעיפים נפוצים
- היקף השירותים / הגדרות
- תמורה ותשלום
- תקופת ההסכם
- סודיות
- קניין רוחני
- אחריות ושיפוי
- סיום ההתקשרות
- שונות (דין חל, סמכות שיפוט, כתובות)
### כותרות heading
- כותרת ראשית: Heading1, center, 16pt
- "בין הצדדים", "הואיל:": Heading2, center, 14pt
- כותרות סעיפים ("1. היקף השירותים"): Heading2, right/justified, 14pt
---
## מכתב התראה
### מבנה
```
Header: לוגו/שם משרד, כתובת, טלפון, פקס, דוא"ל
תאריך: "ב[עיר], [תאריך]"
סימוכין: "סימוכין: [מספר תיק]"
נמען: "לכבוד [שם]\n[כתובת]"
שורת נדון: "הנדון: [נושא]" (bold, underline)
סיווג: "מכתב זה נשלח מבלי לפגוע בזכויות מרשי/תי" (bold)
גוף: פסקאות ללא מספור — תיאור עובדות, עילה, דרישה
סיום: "בכבוד רב," + חתימה
העתק: "העתק: [נמענים]"
```
### טון
- פורמלי ותקיף
- עובדתי ומדויק
- מציין מועד אחרון לתגובה
---
## כתב תביעה
### מבנה
```
Header: "בבית המשפט [סוג] ב[עיר]"
מספר תיק: "ת"א [מספר]"
צדדים:
"התובע: [שם], ת.ז. [מספר]"
"ע"י ב"כ עו"ד [שם], [כתובת]"
"-נגד-"
"הנתבע: [שם], ת.ז. [מספר]"
כותרת: "כתב תביעה" (מרכז, bold, 16pt)
מבוא / הצדדים
עילות (סעיפים ממוספרים):
1. עובדות (בפסקאות ממוספרות)
2. הנזק
3. העילות המשפטיות
הסעדים המבוקשים
חתימה
אימות (תצהיר מצורף)
```
### דגשים
- כל עובדה בסעיף נפרד
- הפניות לסעיפי חוק
- סכום התביעה בסוף
---
## כתב הגנה
### מבנה
```
Header: "בבית המשפט [סוג] ב[עיר]"
מספר תיק: "ת"א [מספר]"
צדדים: (כמו בכתב התביעה, עם "הנתבע/הנתבעת")
כותרת: "כתב הגנה" (מרכז, bold, 16pt)
מבוא
תשובה לכתב התביעה:
- התייחסות סעיף-סעיף ("לסעיף X — מוכחש/מאושר/אין ידיעה")
- טענות הגנה
- טענות מקדמיות (התיישנות, חוסר סמכות, חוסר עילה)
סיכום
חתימה
```
---
## בקשה לבית משפט
### מבנה
```
Header: "בבית המשפט [סוג] ב[עיר]"
מספר תיק
צדדים
כותרת: "בקשה ל[סוג הבקשה]" (מרכז, bold, 16pt)
לדוגמה: "בקשה למתן צו מניעה זמני"
מבוא
הרקע העובדתי (ממוספר)
הנימוקים המשפטיים (ממוספר)
הסעד המבוקש
חתימה
```
---
## תצהיר
### מבנה
```
Header: "בבית המשפט [סוג] ב[עיר]" (אם מוגש לבימ"ש)
כותרת: "תצהיר" / "תצהיר עדות ראשית" (מרכז, bold, 16pt)
פתיחה: "אני, [שם], ת.ז. [מספר], לאחר שהוזהרתי כי עלי לומר את
האמת וכי אהיה צפוי/ה לעונשים הקבועים בחוק אם לא אעשה כן,
מצהיר/ה בזה כדלקמן:"
גוף: סעיפים ממוספרים (עובדות בגוף ראשון)
נספחים: "מצ"ב מסמך... מסומן כנספח [א']"
סיום: "[שם המצהיר/ה]"
אימות: "אישור עורך דין"
"אני, עו"ד [שם], מאשר/ת בזה כי ביום [תאריך] התייצב/ה בפני
[שם], שזיהה/תה עצמו/ה באמצעות ת.ז. [מספר], ולאחר שהזהרתיו/ה
כי עליו/ה להצהיר אמת וכי יהיה/תהיה צפוי/ה לעונשים הקבועים בחוק
אם לא יעשה/תעשה כן, אישר/ה את נכונות הצהרתו/ה וחתם/ה עליה
בפני."
חתימת עו"ד
```
---
## ייפוי כוח
### מבנה
```
כותרת: "ייפוי כוח" / "ייפוי כוח כללי" / "ייפוי כוח מיוחד"
מייפה הכוח: "[שם], ת.ז. [מספר], מ[כתובת]"
מיופה הכוח: "עו"ד [שם], רישיון [מספר]"
ההרשאה: פירוט הפעולות המורשות
- ייפוי כוח כללי: "לייצגני בכל עניין ולפעול בשמי..."
- ייפוי כוח מיוחד: פירוט ספציפי של הפעולה
תוקף: תאריך תחילה וסיום (אם רלוונטי)
חתימה + אימות נוטריוני (אם נדרש)
```
---
## פרוטוקול ישיבה
### מבנה
```
כותרת: "פרוטוקול ישיבת [סוג] מס' [מספר]"
פרטים:
"תאריך: [תאריך]"
"שעה: [שעה]"
"מקום: [מקום]"
"נוכחים: [רשימה]"
"חסרים: [רשימה]"
"מנהל הישיבה: [שם]"
"מזכיר: [שם]"
סדר יום (ממוספר)
דיון (לפי סעיפי סדר היום)
החלטות (ממוספרות, bold)
חתימה: מנהל הישיבה + מזכיר
```
---
## חוות דעת משפטית
### מבנה
```
כותרת: "חוות דעת משפטית" (מרכז, bold, 16pt)
"לכבוד: [שם הלקוח]"
"הנדון: [נושא]"
"סימוכין: [מספר תיק]"
תקציר מנהלים (אופציונלי)
רקע עובדתי
השאלה המשפטית
הדין החל
ניתוח משפטי
מסקנות והמלצות
הסתייגויות: "חוות דעת זו מבוססת על העובדות שנמסרו לי..."
חתימה
```
---
## החלטת ועדת ערר לתכנון ובניה
### מבנה
```
כותרת מוסדית: טבלה ללא גבולות, 2 טורים
ימין: "מדינת ישראל" (bold), "ועדת ערר לתכנון ובניה", "מחוז ירושלים"
שמאל: "מס' תיק:" + מספרים (bold), מספרנו, "מס' בקשה:"/"מס' תכנית:"
הרכב: "בפני:" (bold), יו"ר + חברים
צדדים: "העורר/ים:" + שמות + ב"כ, "-נגד-" (מרכז, bold), "המשיבים:" + שמות + ב"כ
כותרת: "החלטה" (16pt, bold, מרכז)
פתיחה: 1-2 סעיפים ללא כותרת ("לפנינו...")
פתח דבר / רקע: מקרקעין, היסטוריה תכנונית, מהות הבקשה, ציטוט מפרוטוקול, תמונות
תמצית טענות הצדדים: (14pt, bold, קו תחתון, מרכז)
טענות העוררים (12pt, bold, מרכז)
עמדת הוועדה המקומית (12pt, bold, מרכז)
עמדת מבקשי ההיתר / מגישי התכנית (12pt, bold, מרכז)
ההליכים בפני ועדת הערר: (14pt, bold, קו תחתון, מרכז) — דיון, סיור, השלמות טיעון
התכניות החלות על המקרקעין: (אופציונלי, 14pt, bold, קו תחתון, מרכז)
דיון והכרעה: (14pt, bold, קו תחתון, מרכז) — אסה רציפה ללא כותרות משנה
סיכום / סוף דבר: (14pt, bold, קו תחתון, מרכז)
חתימות: טבלה ללא גבולות, 2 טורים (יו"ר + מזכירה)
```
### דגשים
- מספור סעיפים רציף לאורך כל המסמך (לא מתאפס בין חלקים)
- מספר הסעיף bold (run נפרד), הטקסט רגיל
- ציטוטים בהזחה משני הצדדים (~1 ס"מ), פונט זהה לגוף
- תמונות ותשריטים משולבים בטקסט עם הפניה מילולית לפניהם
- "ניתנה פה אחד, [תאריך עברי], [תאריך לועזי]." לפני חתימות
- מספור עמודים: "עמוד X מתוך Y" תחתון מרכזי
- **ראה** `.claude/skills/legal-decision/SKILL.md` סעיפים 11-12 למבנה מלא ותהליך עבודה
---
## עקרונות עיצוב משותפים
### כל מסמך משפטי
- **פונט**: David 12pt (ברירת מחדל), FrankRuehl לפורמלי
- **שוליים**: 2.5 ס"מ (1417 DXA) מכל הצדדים
- **יישור**: Justified (משני צדדים)
- **מרווח שורות**: 1.15 או 1.5 (לפי בית המשפט)
- **מספור עמודים**: תחתון מרכזי
- **כיוון**: RTL מלא (bidi בכל הרמות)
### כתבי בית דין (תביעה, הגנה, בקשה)
- Header עם שם בית המשפט ומספר תיק
- צדדים בפורמט סטנדרטי עם "-נגד-"
- מספור סעיפים רציף (לא מתאפס בכל חלק)
- Footer עם מספר עמוד
### הסכמים חוזיים
- "הואילים" לפני הסעיפים
- "ולראיה באו הצדדים על החתום" לפני חתימות
- חתימות בשני טורים

View File

@@ -0,0 +1,261 @@
#!/usr/bin/env node
/**
* create-legal-doc.js — תבנית בסיסית למסמך משפטי בעברית
*
* שימוש: העתק לתיקיית העבודה, ערוך את CONTENT, הרץ עם node.
*
* הסקריפט כולל את כל הגדרות ה-RTL הנדרשות ב-5 רמות:
* 1. Document defaults (styles)
* 2. Section properties (bidi: true)
* 3. Per-paragraph (bidirectional + alignment)
* 4. Per-run (rightToLeft + font)
* 5. Numbering (alignment: START, not RIGHT!)
*
* שינוי פונט: החלף "David" ב-"FrankRuehl" או "Miriam"
* שינוי שוליים: שנה MARGIN_CM
*
* v3.0 — תיקון באג: AlignmentType.START במקום RIGHT במספור
*/
const fs = require('fs');
const { Document, Packer, Paragraph, TextRun, Header, Footer,
AlignmentType, HeadingLevel, PageNumber, LevelFormat,
Table, TableRow, TableCell, WidthType, BorderStyle,
LineRuleType } = require('docx');
// ═══════════════════════════════════════════════
// CONFIGURATION — שנה כאן
// ═══════════════════════════════════════════════
const FONT = "David";
const FONT_SIZE = 24; // half-points (24 = 12pt)
const HEADING1_SIZE = 32; // 16pt
const HEADING2_SIZE = 28; // 14pt
const MARGIN_CM = 2.5;
const MARGIN_DXA = Math.round(MARGIN_CM / 2.54 * 1440);
const OUTPUT_FILE = "legal-document.docx";
const HEADER_TEXT = ""; // שם המשרד — השאר ריק אם לא צריך
const FOOTER_CONFIDENTIAL = "";
// ═══════════════════════════════════════════════
// HELPERS — פונקציות עזר
// ═══════════════════════════════════════════════
// TextRun עם RTL
const rtlRun = (text, opts = {}) => new TextRun({
text,
...opts,
font: opts.font || FONT,
size: opts.size || FONT_SIZE,
rightToLeft: true, // ← חובה! תמיד אחרון — לא ניתן לדריסה
});
// Paragraph עם RTL
const rtlPara = (children, opts = {}) => new Paragraph({
bidirectional: true, // ← חובה!
alignment: opts.alignment || AlignmentType.BOTH, // ✅ BOTH, לא JUSTIFIED
spacing: opts.spacing,
children: Array.isArray(children) ? children : [children],
...(opts.heading ? { heading: opts.heading } : {}),
...(opts.numbering ? { numbering: opts.numbering } : {}),
});
// כותרת ראשית
const heading1 = (text) => rtlPara(
rtlRun(text, { bold: true, size: HEADING1_SIZE }),
{ heading: HeadingLevel.HEADING_1, alignment: AlignmentType.CENTER }
);
// כותרת משנה
const heading2 = (text) => rtlPara(
rtlRun(text, { bold: true, size: HEADING2_SIZE }),
{ heading: HeadingLevel.HEADING_2, alignment: AlignmentType.START } // ✅ START
);
// רווח
const spacer = (after = 200) => rtlPara(rtlRun(""), { spacing: { after } });
// ═══════════════════════════════════════════════
// CONTENT — ערוך כאן את תוכן המסמך
// ═══════════════════════════════════════════════
const CONTENT = [
// כותרת
heading1("הסכם שירותים משפטיים"),
// תאריך
rtlPara(rtlRun("נערך ונחתם בתל אביב ביום ___________"), { spacing: { after: 200 } }),
// צדדים
heading2("בין הצדדים"),
rtlPara([
rtlRun("מצד אחד: ", { bold: true }),
rtlRun('[שם], ח.פ./ת.ז. [מספר], מ[כתובת] (להלן: "'),
rtlRun("המזמין", { bold: true }),
rtlRun('")'),
], { spacing: { after: 120 } }),
rtlPara([
rtlRun("מצד שני: ", { bold: true }),
rtlRun('[שם], ח.פ./ת.ז. [מספר], מ[כתובת] (להלן: "'),
rtlRun("הספק", { bold: true }),
rtlRun('")'),
], { spacing: { after: 200 } }),
// הואילים
heading2("הואיל:"),
rtlPara(rtlRun("1. והואיל ו[תנאי ראשון];"), { spacing: { after: 120 } }),
rtlPara(rtlRun("2. והואיל ו[תנאי שני];"), { spacing: { after: 120 } }),
rtlPara(rtlRun("3. והואיל והצדדים מעוניינים להסדיר את תנאי ההתקשרות ביניהם;"),
{ spacing: { after: 200 } }),
// מעבר
rtlPara(rtlRun("לפיכך הוסכם, הותנה והוצהר בין הצדדים כדלקמן:", { bold: true }),
{ alignment: AlignmentType.CENTER, spacing: { before: 200, after: 200 } }),
// סעיפים
heading2("1. היקף השירותים"),
rtlPara(rtlRun("1.1 [תוכן הסעיף]"), { spacing: { after: 120 } }),
rtlPara(rtlRun("1.2 [תוכן הסעיף]"), { spacing: { after: 120 } }),
heading2("2. התמורה"),
rtlPara(rtlRun("2.1 [תוכן הסעיף]"), { spacing: { after: 120 } }),
// חתימות
rtlPara(rtlRun("ולראיה באו הצדדים על החתום:", { bold: true }),
{ alignment: AlignmentType.CENTER, spacing: { before: 600, after: 400 } }),
// טבלת חתימות
new Table({
visuallyRightToLeft: true, // ✅ קריטי!
width: { size: 9072, type: WidthType.DXA },
columnWidths: [4536, 4536],
rows: [
new TableRow({
children: [
new TableCell({
borders: {
top: { style: BorderStyle.NONE },
bottom: { style: BorderStyle.NONE },
left: { style: BorderStyle.NONE },
right: { style: BorderStyle.NONE }
},
children: [
rtlPara(rtlRun("________________________"), { alignment: AlignmentType.CENTER }),
rtlPara(rtlRun("המזמין"), { alignment: AlignmentType.CENTER })
]
}),
new TableCell({
borders: {
top: { style: BorderStyle.NONE },
bottom: { style: BorderStyle.NONE },
left: { style: BorderStyle.NONE },
right: { style: BorderStyle.NONE }
},
children: [
rtlPara(rtlRun("________________________"), { alignment: AlignmentType.CENTER }),
rtlPara(rtlRun("הספק"), { alignment: AlignmentType.CENTER })
]
})
]
})
]
})
];
// ═══════════════════════════════════════════════
// DOCUMENT GENERATION — לא לשנות (אלא אם יודע מה עושים)
// ═══════════════════════════════════════════════
const doc = new Document({
// רמה 1: Document defaults
styles: {
default: {
document: {
run: { font: FONT, size: FONT_SIZE, rightToLeft: true },
paragraph: { bidirectional: true, alignment: AlignmentType.BOTH }
}
},
paragraphStyles: [
{
id: "Heading1", name: "Heading 1", basedOn: "Normal", next: "Normal",
quickFormat: true,
run: { size: HEADING1_SIZE, bold: true, font: FONT, rightToLeft: true },
paragraph: { spacing: { before: 240, after: 240 }, outlineLevel: 0,
bidirectional: true, alignment: AlignmentType.CENTER }
},
{
id: "Heading2", name: "Heading 2", basedOn: "Normal", next: "Normal",
quickFormat: true,
run: { size: HEADING2_SIZE, bold: true, font: FONT, rightToLeft: true },
paragraph: { spacing: { before: 200, after: 200 }, outlineLevel: 1,
bidirectional: true, alignment: AlignmentType.START } // ✅ START
},
]
},
// מספור סעיפים
numbering: {
config: [{
reference: "legal-clauses",
levels: [
{
level: 0,
format: LevelFormat.DECIMAL,
text: "%1.",
alignment: AlignmentType.START, // ✅ START — לא RIGHT!
suffix: "tab",
style: { paragraph: { indent: { left: 720, hanging: 360 } } }
},
{
level: 1,
format: LevelFormat.DECIMAL,
text: "%1.%2",
alignment: AlignmentType.START, // ✅ START — לא RIGHT!
suffix: "tab",
style: { paragraph: { indent: { left: 1440, hanging: 500 } } }
},
]
}]
},
sections: [{
// רמה 2: Section properties
properties: {
page: {
size: { width: 11906, height: 16838 }, // A4
margin: { top: MARGIN_DXA, right: MARGIN_DXA, bottom: MARGIN_DXA, left: MARGIN_DXA }
},
bidi: true, // ← חובה!
},
headers: HEADER_TEXT ? {
default: new Header({
children: [rtlPara(rtlRun(HEADER_TEXT, { bold: true, size: 20 }),
{ alignment: AlignmentType.CENTER })]
})
} : undefined,
footers: {
default: new Footer({
children: [new Paragraph({
bidirectional: true,
alignment: AlignmentType.CENTER,
children: [
rtlRun("עמוד ", { size: 18 }),
new TextRun({ children: [PageNumber.CURRENT], font: FONT, size: 18 }),
...(FOOTER_CONFIDENTIAL ? [rtlRun(` | ${FOOTER_CONFIDENTIAL}`, { size: 18 })] : []),
]
})]
})
},
children: CONTENT
}]
});
Packer.toBuffer(doc).then(buffer => {
fs.writeFileSync(OUTPUT_FILE, buffer);
console.log(`${OUTPUT_FILE} created successfully`);
console.log(` Font: ${FONT} ${FONT_SIZE/2}pt`);
console.log(` Margins: ${MARGIN_CM}cm (${MARGIN_DXA} DXA)`);
console.log(` Size: ${(buffer.length / 1024).toFixed(1)} KB`);
console.log(` RTL: bidi + bidirectional + rightToLeft ✓`);
console.log(` Alignment: START/END (not LEFT/RIGHT) ✓`);
});