feat(missing-precedents): חיפוש-טקסט לפי מראה-מקום בדף פסיקה-חסרה
All checks were successful
G12 Leak-Guard / leak-guard (pull_request) Successful in 5s

הבעיה: בדף /missing-precedents לא ניתן היה לאתר פסיקה חסרה לפי מספר ההחלטה
החסרה עצמה (למשל 85074). השדה היחיד לחיפוש-תיק עשה get_case_by_number על
מספר ה-ערר שבו צוטטה הפסיקה — ולכן הקלדת מספר-הפסיקה החזירה רשימה ריקה,
למרות שהרשומה קיימת (ערר (ת"א 85074-04-25) ... status=open).

התיקון (הרחבת השדה הקיים, ללא עמוד/שדה חדש — בהנחיית חיים):
- db.list_missing_precedents: פרמטר q חדש — ILIKE על mp.citation +
  mp.case_name + cited-in c.case_number (אינדקס-פרמטר יחיד, additive;
  שאר הקוראים לא נוגעים).
- GET /api/missing-precedents: פרמטר q; case_id/case_number נשארים
  מסננים-מדויקים לקוראים תכנותיים.
- web-ui: התווית "תיק (מספר ערר)" → "מספר תיק", placeholder
  "85074 או 1017-03-26"; השדה שולח q (חיפוש חופשי) במקום case_number.
  Debounce 350ms נשמר.

api:types לא חודש: ה-hook בונה את ה-querystring ידנית וה-response לא
השתנה; חידוש מול prod (שעוד לא נפרס) רק היה מושך drift לא-קשור.

בדיקות: tsc --noEmit נקי, eslint נקי על הקבצים שהשתנו, py_compile נקי.

Invariants: G2 (הרחבת היכולת הקיימת, לא מסלול-חיפוש מקביל), INV-IA1
(שער/דף יחיד לפסיקה-חסרה — בלי עמוד חדש), §6 (ללא בליעת-שגיאות).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-12 07:58:29 +00:00
parent 5272ded4f7
commit b49cde7c24
5 changed files with 40 additions and 16 deletions

View File

@@ -91,6 +91,9 @@ export type MissingPrecedentFilters = {
caseNumber?: string;
caseId?: string;
legalTopic?: string;
/** Free-text term — matched across the gap's מראה-מקום, case name, and
* cited-in appeal number (find a gap by the missing decision's number). */
q?: string;
limit?: number;
};
@@ -110,6 +113,7 @@ export function useMissingPrecedents(filters: MissingPrecedentFilters = {}) {
if (filters.caseNumber) p.set("case_number", filters.caseNumber);
if (filters.caseId) p.set("case_id", filters.caseId);
if (filters.legalTopic) p.set("legal_topic", filters.legalTopic);
if (filters.q) p.set("q", filters.q);
if (filters.limit) p.set("limit", String(filters.limit));
const qs = p.toString();
return apiRequest<MissingPrecedentListResponse>(