feat(missing-precedents): עמודת "צוטט ע"י" מציגה provenance לפי discovery_source (#148)
362 רשומות שהובאו מ-cited_only (גרף-הציטוטים) ומיומונים הציגו "—" ב"צוטט ע"י", כי העמודה קראה רק מ-cited_in_case_id (ערר חי) + cited_by_party, וה-provenance נשמר ב-notes בלבד. אושר ע"י חיים דרך שער Claude Design (mockup 09-missing-precedents). - db.list_missing_precedents + get_missing_precedent: שדות-provenance מחושבים (_MP_PROVENANCE_COLS משותף, G2): cited_by_precedents (array_agg מ- precedent_internal_citations עבור cited_only — מי-מצטט את ה-stub) + yomon_number (substring מ-notes עבור digest). discovery_source כבר הוחזר. - web-ui: MissingPrecedent type + תא "צוטט ע"י" מסתעף לפי discovery_source: cited_only→chip "פסיקה בקורפוס" + "מצוטט ע"י: <מספרים>"; digest→chip "יומון" + "מס' X"; manual→SourceChip+צד (כמו היום). טוקני plum/teal ב-globals.css (מה-mockup המאושר). אומת מול ה-DB החי: cited_only→מצטטים (רע"א 1054/21→8047-23,8126-03-25), digest→מס'-יומון (306 רשומות). tsc נקי, eslint נקי, 360 בדיקות mcp עוברות. Invariants: G2 (שדה-provenance יחיד משותף ל-list+detail), G1 (נגזר במקור), INV-IA*/UI (שינוי-עמוד דרך שער Claude Design), G12. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -51,6 +51,11 @@
|
||||
--color-danger-bg: #f5e6e6;
|
||||
--color-info: #4e6a8c;
|
||||
--color-info-bg: #e6ecf3;
|
||||
/* provenance chips for missing-precedents "צוטט ע״י" (#148, approved mockup 09) */
|
||||
--color-plum: #6d5191;
|
||||
--color-plum-bg: #efe9f6;
|
||||
--color-teal: #3f7a7a;
|
||||
--color-teal-bg: #e3efef;
|
||||
|
||||
/* ── Typography ─────────────────────────────────────── */
|
||||
--font-sans: var(--font-heebo), -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
||||
|
||||
@@ -173,12 +173,44 @@ export function MissingPrecedentsTable({ status, q, legalTopic }: Props) {
|
||||
)}
|
||||
</TableCell>
|
||||
<TableCell className="text-sm text-ink">
|
||||
<SourceChip party={mp.cited_by_party} />
|
||||
{mp.cited_by_party_name ? (
|
||||
<div className="text-[0.7rem] text-ink-muted truncate max-w-[160px] mt-1">
|
||||
{mp.cited_by_party_name}
|
||||
</div>
|
||||
) : null}
|
||||
{mp.discovery_source === "cited_only" ? (
|
||||
<>
|
||||
<Badge
|
||||
variant="outline"
|
||||
className="rounded-full whitespace-nowrap bg-plum-bg text-plum border-transparent"
|
||||
>
|
||||
פסיקה בקורפוס
|
||||
</Badge>
|
||||
{mp.cited_by_precedents?.length ? (
|
||||
<div className="text-[0.7rem] text-ink-muted truncate max-w-[180px] mt-1">
|
||||
מצוטט ע״י: {mp.cited_by_precedents.join(", ")}
|
||||
</div>
|
||||
) : null}
|
||||
</>
|
||||
) : mp.discovery_source === "digest" ? (
|
||||
<>
|
||||
<Badge
|
||||
variant="outline"
|
||||
className="rounded-full whitespace-nowrap bg-teal-bg text-teal border-transparent"
|
||||
>
|
||||
יומון
|
||||
</Badge>
|
||||
{mp.yomon_number ? (
|
||||
<div className="text-[0.7rem] text-ink-muted mt-1">
|
||||
מס׳ {mp.yomon_number}
|
||||
</div>
|
||||
) : null}
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<SourceChip party={mp.cited_by_party} />
|
||||
{mp.cited_by_party_name ? (
|
||||
<div className="text-[0.7rem] text-ink-muted truncate max-w-[160px] mt-1">
|
||||
{mp.cited_by_party_name}
|
||||
</div>
|
||||
) : null}
|
||||
</>
|
||||
)}
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
<StatusBadge status={mp.status} />
|
||||
|
||||
@@ -52,6 +52,10 @@ export type MissingPrecedent = {
|
||||
created_at: string;
|
||||
updated_at: string;
|
||||
notes: string | null;
|
||||
// provenance of the gap (#148) — how it surfaced, for the "צוטט ע״י" column.
|
||||
discovery_source: string | null; // manual | cited_only | digest | court_fetch
|
||||
cited_by_precedents: string[] | null; // corpus precedents citing a cited_only stub
|
||||
yomon_number: string | null; // digest gap's source yomon number
|
||||
};
|
||||
|
||||
export type MissingPrecedentListResponse = {
|
||||
|
||||
Reference in New Issue
Block a user