fix(ui): תרגום עברית לסטטוסי-תיק in_progress + qa_failed
All checks were successful
G12 Leak-Guard / leak-guard (pull_request) Successful in 5s

הבאג: ה-StatusBadge מציג מחרוזת גולמית באנגלית ("in_progress") כשהשרת
פולט סטטוס שאינו במפת-התוויות. CaseStatus ב-web-ui החסיר שני סטטוסים
שהשרת אכן פולט — in_progress (workflow.set_outcome) ו-qa_failed
(app.py human-gate) — ולכן נפלו ל-fallback `?? status` (אנגלית גולמית).

התיקון (יישור frontend↔backend SoT, X6 UI-API contract):
- CaseStatus type: הוספת "in_progress" + "qa_failed".
- status-badge.tsx: 4 מפות Record<CaseStatus> — LABELS (בעבודה / בדיקת
  איכות נכשלה), ICONS (Hammer / AlertTriangle), DESCRIPTIONS, TONE
  (warn / danger).
- status-donut.tsx: GROUP_OF — in_progress→intake, qa_failed→writing.

ללא שינוי-עיצוב ויזואלי (תיקון-תוכן/i18n של רכיב קיים) → חוסה תחת
החריג המפורש בשער-העיצוב ב-web-ui/AGENTS.md.

invariants: מקיים X6 (UI↔API contract — הטיפוס תואם לסטטוסי-השרת);
לא G2 (אין מסלול מקביל), לא G1-symptom (מתקן את מקור-הדריפט בטיפוס).
tsc --noEmit עובר נקי.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-12 06:57:18 +00:00
parent b95b02486b
commit 6fba565fcb
3 changed files with 13 additions and 3 deletions

View File

@@ -3,13 +3,14 @@ import {
FilePlus2, Upload, Loader2, FileCheck, Target,
Lightbulb, Compass, PenLine, SearchCheck, FileText,
FileOutput, CheckCircle2, Award, ShieldCheck, BookOpen,
Microscope, PlayCircle,
Microscope, PlayCircle, Hammer, AlertTriangle,
} from "lucide-react";
import type { CaseStatus } from "@/lib/api/cases";
import type { LucideIcon } from "lucide-react";
const STATUS_LABELS: Record<CaseStatus, string> = {
new: "חדש",
in_progress: "בעבודה",
uploading: "מעלה",
processing: "בעיבוד",
documents_ready: "מסמכים מוכנים",
@@ -22,6 +23,7 @@ const STATUS_LABELS: Record<CaseStatus, string> = {
ready_for_writing: "מוכן לכתיבה",
drafting: "בכתיבה",
qa_review: "בדיקת איכות",
qa_failed: "בדיקת איכות נכשלה",
drafted: "טיוטה",
exported: "יוצא",
reviewed: "נבדק",
@@ -30,6 +32,7 @@ const STATUS_LABELS: Record<CaseStatus, string> = {
const STATUS_ICONS: Record<CaseStatus, LucideIcon> = {
new: FilePlus2,
in_progress: Hammer,
uploading: Upload,
processing: Loader2,
documents_ready: FileCheck,
@@ -42,6 +45,7 @@ const STATUS_ICONS: Record<CaseStatus, LucideIcon> = {
ready_for_writing: PlayCircle,
drafting: PenLine,
qa_review: SearchCheck,
qa_failed: AlertTriangle,
drafted: FileText,
exported: FileOutput,
reviewed: CheckCircle2,
@@ -50,6 +54,7 @@ const STATUS_ICONS: Record<CaseStatus, LucideIcon> = {
const STATUS_DESCRIPTIONS: Record<CaseStatus, string> = {
new: "התיק נוצר וממתין להעלאת מסמכים",
in_progress: "התיק בעבודה",
uploading: "מסמכים בתהליך העלאה לשרת",
processing: "המערכת מעבדת ומנתחת את המסמכים",
documents_ready: "כל המסמכים עובדו ומוכנים לעבודה",
@@ -62,6 +67,7 @@ const STATUS_DESCRIPTIONS: Record<CaseStatus, string> = {
ready_for_writing: "הכל מוכן — ממתין לכותב ההחלטה",
drafting: "טיוטת ההחלטה בתהליך כתיבה",
qa_review: "הטיוטה בבדיקת איכות אוטומטית",
qa_failed: "בדיקת האיכות נכשלה — נדרש תיקון",
drafted: "טיוטה מוכנה לעיון",
exported: "ההחלטה יוצאה לקובץ DOCX",
reviewed: "ההחלטה נבדקה ע\"י היו\"ר",
@@ -76,6 +82,7 @@ const STATUS_DESCRIPTIONS: Record<CaseStatus, string> = {
* done → exported, reviewed, final (success green) */
const STATUS_TONE: Record<CaseStatus, string> = {
new: "bg-rule-soft text-ink-muted border-rule",
in_progress: "bg-warn-bg text-warn border-warn/40",
uploading: "bg-rule-soft text-ink-muted border-rule",
processing: "bg-info-bg text-info border-info/30",
documents_ready: "bg-info-bg text-info border-info/40",
@@ -88,6 +95,7 @@ const STATUS_TONE: Record<CaseStatus, string> = {
ready_for_writing:"bg-gold-wash text-gold-deep border-gold/50",
drafting: "bg-warn-bg text-warn border-warn/40",
qa_review: "bg-warn-bg text-warn border-warn/40",
qa_failed: "bg-danger-bg text-danger border-danger/40",
drafted: "bg-warn-bg text-warn border-warn/50",
exported: "bg-success-bg text-success border-success/40",
reviewed: "bg-success-bg text-success border-success/50",