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). */} +
+

פסיקה מצורפת