fix(ui): תרגום עברית לסטטוסי-תיק in_progress + qa_failed
All checks were successful
G12 Leak-Guard / leak-guard (pull_request) Successful in 5s
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:
@@ -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",
|
||||
|
||||
@@ -12,10 +12,10 @@ import { STATUS_LABELS } from "@/components/cases/status-badge";
|
||||
type GroupKey = "intake" | "prep" | "thinking" | "writing" | "done";
|
||||
|
||||
const GROUP_OF: Record<CaseStatus, GroupKey> = {
|
||||
new: "intake", uploading: "intake", processing: "intake",
|
||||
new: "intake", in_progress: "intake", uploading: "intake", processing: "intake",
|
||||
documents_ready: "prep", analyst_verified: "prep", research_complete: "prep", outcome_set: "prep",
|
||||
brainstorming: "thinking", direction_approved: "thinking", analysis_enriched: "thinking", ready_for_writing: "thinking",
|
||||
drafting: "writing", qa_review: "writing", drafted: "writing",
|
||||
drafting: "writing", qa_review: "writing", qa_failed: "writing", drafted: "writing",
|
||||
exported: "done", reviewed: "done", final: "done",
|
||||
};
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ import type { PracticeArea, AppealSubtype } from "@/lib/practice-area";
|
||||
|
||||
export type CaseStatus =
|
||||
| "new"
|
||||
| "in_progress"
|
||||
| "uploading"
|
||||
| "processing"
|
||||
| "documents_ready"
|
||||
@@ -27,6 +28,7 @@ export type CaseStatus =
|
||||
| "ready_for_writing"
|
||||
| "drafting"
|
||||
| "qa_review"
|
||||
| "qa_failed"
|
||||
| "drafted"
|
||||
| "exported"
|
||||
| "reviewed"
|
||||
|
||||
Reference in New Issue
Block a user