feat(plans): משיכת תב"ע מ-מנהל-התכנון (mavat) — Phase C backend-slice #292

Merged
chaim merged 1 commits from worktree-plan-fetch-mavat into main 2026-06-17 11:14:44 +00:00
Owner

רקע

מילוי מרשם-התכניות (V38) היה ידני בלבד. שלב זה מוסיף משיכה אוטומטית של זהות+תוקף תב"ע מ-מנהל-התכנון (mavat) — המקור הרשמי. הספייק הוכיח ש-mavat חסום ל-curl (F5-ASM) אך נגיש לדפדפן-JS מהשרת, וחושף את י"פ (שתב"ע-עכשיו חסר). זהו ה-backend-slice בלבד — בלי טריגרי-UI עדיין (לסקירה לפני המשך).

מה נכלל

קובץ תפקיד
court_fetch_service/mavat_client.py (חדש) דרייבר Camoufox מול mavat — עוקף F5, search→auto-nav ל-SV4, לוכד GET /rest/api/SV4/1, מפענח planDetails+rsInternet. מלכודת-דרייבר: window.onerror init-script
court_fetch_service/server.py POST /plan-fetch (אותו Bearer/בind כמו /fetch)
services/plans_fetch.py (חדש) צד-קונטיינר — httpx לגשר, מנרמל שדות
tools/plans.py + server.py כלי-MCP plan_fetch (מחזיר מועמד, לא כותב)
web/app.py POST /api/plans/fetch

אימות (חי מול mavat, מקוד ה-PR)

101-1031020 → י"פ 13697, עמ' 8758, 30/07/2025, "תוספת קומות... שמואל הנביא 68"
101-1053933 → י"פ 13836  (אומת ע"י המתכון)
  • py_compile · import · unit-test לפענוח SV4 · e2e חי (yalkut תואם).
  • אין ruff בסביבה; הסתמכות על השלושה לעיל.

הפעלה אחרי מיזוג

הגשר רץ ב-pm2 מהעץ-הראשי — צריך pm2 restart legal-court-fetch-service כדי שיטען את /plan-fetch. /api/plans/fetch בקונטיינר ידרוש deploy. אין טריגר-UI עדיין — שום דבר לא נקרא אוטומטית.

Invariants

  • G2 — מרחיב את גשר-X13 (8771) ואת מרשם-V38; אין שירות/פורט/סוד/מרשם מקבילים.
  • G10 / INV-DM5 — מחזיר מועמד בלבד; שער-יו"ר (review_status) נשמר, שום כתיבה אוטומטית למרשם.
  • INV-AH — כל ערך נושא source_url (עמוד-mavat); שדה שהמקור אינו חושף חוזר ריק, לא מומצא.
  • G12 — ללא מגע-Paperclip.

הצעד הבא (אחרי סקירתך)

טריגרים: כפתור "משוך מ-מנהל-התכנון" ב-PlanForm (דרך שער-עיצוב) + העשרה-אוטומטית ב-plans_extractor.

🤖 Generated with Claude Code

## רקע מילוי מרשם-התכניות (V38) היה ידני בלבד. שלב זה מוסיף **משיכה אוטומטית** של זהות+תוקף תב"ע מ-**מנהל-התכנון (mavat)** — המקור הרשמי. הספייק הוכיח ש-mavat חסום ל-curl (F5-ASM) אך **נגיש לדפדפן-JS מהשרת**, ו**חושף את י"פ** (שתב"ע-עכשיו חסר). זהו ה-**backend-slice בלבד** — בלי טריגרי-UI עדיין (לסקירה לפני המשך). ## מה נכלל | קובץ | תפקיד | |----|----| | `court_fetch_service/mavat_client.py` (חדש) | דרייבר Camoufox מול mavat — עוקף F5, `search→auto-nav` ל-SV4, לוכד `GET /rest/api/SV4/1`, מפענח `planDetails`+`rsInternet`. מלכודת-דרייבר: `window.onerror` init-script | | `court_fetch_service/server.py` | `POST /plan-fetch` (אותו Bearer/בind כמו `/fetch`) | | `services/plans_fetch.py` (חדש) | צד-קונטיינר — httpx לגשר, מנרמל שדות | | `tools/plans.py` + `server.py` | כלי-MCP `plan_fetch` (מחזיר מועמד, לא כותב) | | `web/app.py` | `POST /api/plans/fetch` | ## אימות (חי מול mavat, מקוד ה-PR) ``` 101-1031020 → י"פ 13697, עמ' 8758, 30/07/2025, "תוספת קומות... שמואל הנביא 68" 101-1053933 → י"פ 13836 (אומת ע"י המתכון) ``` - `py_compile` ✅ · import ✅ · unit-test לפענוח SV4 ✅ · **e2e חי** ✅ (yalkut תואם). - אין ruff בסביבה; הסתמכות על השלושה לעיל. ## הפעלה אחרי מיזוג הגשר רץ ב-pm2 מהעץ-הראשי — צריך `pm2 restart legal-court-fetch-service` כדי שיטען את `/plan-fetch`. `/api/plans/fetch` בקונטיינר ידרוש deploy. **אין טריגר-UI עדיין** — שום דבר לא נקרא אוטומטית. ## Invariants - **G2** — מרחיב את גשר-X13 (8771) ואת מרשם-V38; אין שירות/פורט/סוד/מרשם מקבילים. - **G10 / INV-DM5** — מחזיר **מועמד** בלבד; שער-יו"ר (`review_status`) נשמר, שום כתיבה אוטומטית למרשם. - **INV-AH** — כל ערך נושא `source_url` (עמוד-mavat); שדה שהמקור אינו חושף חוזר ריק, לא מומצא. - **G12** — ללא מגע-Paperclip. ## הצעד הבא (אחרי סקירתך) טריגרים: כפתור "משוך מ-מנהל-התכנון" ב-PlanForm (דרך שער-עיצוב) + העשרה-אוטומטית ב-`plans_extractor`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-06-17 11:10:14 +00:00
feat(plans): משיכת תב"ע מ-מנהל-התכנון (mavat) — Phase C backend-slice
All checks were successful
G12 Leak-Guard / leak-guard (pull_request) Successful in 3s
Lint — undefined names / undefined-names (pull_request) Successful in 10s
a55ffd59eb
ליבת-המשיכה למרשם-התכניות (V38): מספר-תכנית → זהות+תוקף מ-mavat דרך
גשר-Camoufox הקיים (G2 — אותו שירות/פורט/סוד כמו X13, בלי חדשים).

- court_fetch_service/mavat_client.py (חדש): דרייבר Camoufox מול mavat —
  עוקף F5-ASM (דפדפן-JS), search→auto-nav ל-SV4, לוכד GET /rest/api/SV4/1,
  מפענח planDetails (E_NAME/AUTH/ENTITY_SUBTYPE/GOALS) + rsInternet
  (פרסום-לאישור→ED_PUBLICATION_FILE=י"פ + DETAILS→תאריך/עמוד). מלכודת-
  דרייבר: init-script window.onerror swallow. reCAPTCHA נשאר דלוק (token).
- court_fetch_service/server.py: POST /plan-fetch (אותו Bearer).
- services/plans_fetch.py (חדש): צד-קונטיינר — httpx לגשר, מנרמל שדות.
- tools/plans.py + server.py: כלי-MCP plan_fetch (מועמד, לא כותב).
- web/app.py: POST /api/plans/fetch (503 גשר-למטה, 404 לא-נמצא).

אומת חי מול mavat: 101-1031020→י"פ 13697 (עמ' 8758, 30/07/2025),
101-1053933→י"פ 13836. מקור-אמת עשיר מתב"ע-עכשיו (שחסר י"פ).

INV-AH: כל ערך נושא source_url; שדה-חסר ריק לא מומצא. G10: מחזיר
מועמד בלבד — שער-יו"ר (review_status) נשמר. G2: מרחיב גשר+מרשם קיימים.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chaim merged commit 4994ae0cba into main 2026-06-17 11:14:44 +00:00
chaim deleted branch worktree-plan-fetch-mavat 2026-06-17 11:14:45 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ezer-mishpati/legal-ai#292