From 972935ceb531f5f97fae8e76133149d5ea60890a Mon Sep 17 00:00:00 2001 From: Chaim Date: Mon, 6 Jul 2026 09:35:12 +0000 Subject: [PATCH] =?UTF-8?q?refactor(positions):=20=D7=A7=D7=99=D7=A4=D7=95?= =?UTF-8?q?=D7=9C=20"=D7=A2=D7=9E=D7=93=D7=95=D7=AA=20=D7=95=D7=98=D7=A2?= =?UTF-8?q?=D7=A0=D7=95=D7=AA",=20=D7=90=D7=99=D7=96=D7=95=D7=9F=20=D7=A9?= =?UTF-8?q?=D7=95=D7=A8=D7=94=20=D7=AA=D7=97=D7=AA=D7=95=D7=A0=D7=94,=20?= =?UTF-8?q?=D7=A9=D7=9D-=D7=9B=D7=A8=D7=98=D7=99=D7=A1=20=D7=9E=D7=93?= =?UTF-8?q?=D7=95=D7=99=D7=A7=20(#226)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit לפי הנחיות חיים על טאב "טיעונים ועמדות": - "עמדות וטענות" נעטף באקורדיון single/collapsible סגור-כברירת-מחדל, כמו "טיעונים מאוגדים לפי צד" ו"מה קרה בדיון" — הטאב נפתח כ-3 פסים מקופלים. התיאור עבר לטריגר; הוסר ה-lead הכפול מהרכיב. - שורה תחתונה מאוזנת: "פסיקה מצורפת" ו"ייצוא ועדכון הניתוח" באותו גובה (items-stretch + h-full על שני הכרטיסים). - כותרת הכרטיס "השלמה והעברה" → "ייצוא ועדכון הניתוח" (שם מדויק — הכרטיס מייצא/מעדכן/מוריד את analysis-and-research.md, לא "משלים ומעביר"). - הוסרו שתי שורות-הסטטוס "הרץ למידת-קול" + "הרץ אימות-הלכות" (post-final; קיימות בטאב "טיוטות והערות" — הסרת-כפילות G2). נוקו helpers+import לא-משומשים. עיצוב: מוקאפ 28-case-positions-collapsed-balanced אושר ע"י חיים דרך שער Claude Design (X17). tsc + eslint ירוקים. תואם INV-IA1 (דפוס-אח מאושר). Co-Authored-By: Claude Opus 4.8 (1M context) --- web-ui/src/app/cases/[caseNumber]/page.tsx | 27 +++++-- .../src/components/cases/positions-panel.tsx | 76 +++---------------- 2 files changed, 34 insertions(+), 69 deletions(-) diff --git a/web-ui/src/app/cases/[caseNumber]/page.tsx b/web-ui/src/app/cases/[caseNumber]/page.tsx index 77dc0d9..385f44d 100644 --- a/web-ui/src/app/cases/[caseNumber]/page.tsx +++ b/web-ui/src/app/cases/[caseNumber]/page.tsx @@ -157,11 +157,28 @@ export default function CaseDetailPage({ issues, with the aggregated by-party arguments collapsible below (merged from the deleted /compose editor, mockup 18f). */} - - - - - + {/* עמדות וטענות — collapsed by default (chair preference #226), + mirroring the two accordions below. */} + + + + + + עמדות וטענות + + + סוגיות-המחלוקת ועמדות הצדדים · עורך עמדת-היו״ר מזין את בלוק י׳ + + + + + + + + 0) bits.push(`${v.lessons_proposed} הוצעו לאישור`); - return `✓ הושלם · ${bits.join(" · ")}`; - } - if (v.outcome === "failed") return v.error ? `✗ נכשל — ${v.error}` : "✗ נכשל"; - return "ממתין להרצה"; -} - -function halachaExtractionText(s?: CaseLearningStatus): string { - if (!s?.final_uploaded) return "ממתין להעלאת הסופי"; - const h = s.halacha_extraction; - if (!h.enrolled_in_corpus) - return h.not_enrolled_reason ?? "לא נכנס לקורפוס-הפסיקה"; - switch (h.status) { - case "completed": - return `✓ הושלם · חולצו ${h.halachot_count} · ${h.approved} אושרו · ${h.rejected} נדחו`; - case "processing": - return "רץ עכשיו…"; - case "pending": - case "busy": - return "בתור"; - case "partial": - return `חלקי · חולצו ${h.halachot_count}`; - case "failed": - case "extraction_failed": - return "✗ נכשל"; - case "no_chunks": - return "אין טקסט לחילוץ"; - default: - return "ממתין להרצה"; - } -} - function ProseSection({ title, content }: { title: string; content?: string }) { if (!content?.trim()) return null; return ( @@ -75,7 +32,9 @@ function ProseSection({ title, content }: { title: string; content?: string }) { ); } -// ── "השלמה והעברה" rail card — DOCX export, analysis upload/download (real) ── +// ── "ייצוא ועדכון הניתוח" rail card — round-trips the analysis-and-research.md +// research analysis: export DOCX, upload an updated version, download the raw MD. +// (Post-final learning status lives on the drafts tab, not here — #226.) ────── function FinishRail({ caseNumber, hasAnalysis, @@ -88,7 +47,6 @@ function FinishRail({ const fileRef = useRef(null); const [uploading, setUploading] = useState(false); const [uploadMsg, setUploadMsg] = useState<{ ok: boolean; text: string } | null>(null); - const learning = useCaseLearningStatus(caseNumber); async function handleUpload(file: File) { setUploading(true); @@ -119,9 +77,12 @@ function FinishRail({ } return ( - + -

השלמה והעברה

+

ייצוא ועדכון הניתוח

+

+ פעולות על קובץ ניתוח-המחקר (analysis-and-research.md). +

)} - - {/* stage indicators — informational pointers, not actions */} -
-
- הרץ למידת-קול — {voiceLearningText(learning.data)} -
-
- הרץ אימות-הלכות — {halachaExtractionText(learning.data)} -
-
); @@ -214,10 +165,6 @@ export function PositionsPanel({ caseNumber }: { caseNumber: string }) { return (
-

- סוגיות-המחלוקת ועמדות הצדדים. עורך עמדת-היו״ר נשמר אוטומטית ומזין את בלוק י׳ (דיון והכרעה). -

- {analysis.isPending ? ( @@ -322,9 +269,10 @@ export function PositionsPanel({ caseNumber }: { caseNumber: string }) {
) : null} - {/* case-level פסיקה מצורפת + finish/export gates (INV-IA3: not removed) */} -
- + {/* case-level פסיקה מצורפת + analysis export/update (INV-IA3: not removed). + items-stretch keeps both cards the same height (#226). */} +
+

פסיקה מצורפת