feat(precedents): surface auto-detected incoming citations in the "ציטוטים מקושרים" panel
The precedent-detail "ציטוטים מקושרים" panel rendered only MANUAL appeal-chain links (case_law_relations), so it stayed empty even when decisions cite the ruling — the automatic citation graph (precedent_internal_citations) was never surfaced. e.g. עע"מ 317/10 (שפר) has 12 incoming citations in the DB, none shown. Fills the existing panel from the citation graph (data/logic only, no new visual design — gate-exempt per web-ui/AGENTS.md): - citation_extractor.list_citations_to_case_law: return source precedent_level/ court/date too (additive; reuses the one canonical incoming query — G2). - precedent_library.get_precedent: add incoming_citations[], shaped like the RelatedCase row. No parallel resolution path. - web-ui: render incoming citations in the same row style, read-only (no unlink), de-duped against manual links; manual "קשר" linking preserved alongside. Invariants: G2 (single citation-resolution path, reused), G1 (graph self-heals via existing relink_orphan_citations on upload). No schema change. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -404,7 +404,10 @@ async def list_citations_to_case_law(case_law_id: UUID) -> list[dict]:
|
||||
cl.case_number AS source_case_number,
|
||||
cl.case_name AS source_case_name,
|
||||
cl.chair_name AS source_chair_name,
|
||||
cl.district AS source_district
|
||||
cl.district AS source_district,
|
||||
cl.precedent_level AS source_precedent_level,
|
||||
cl.court AS source_court,
|
||||
cl.date AS source_date
|
||||
FROM precedent_internal_citations pic
|
||||
JOIN case_law cl ON cl.id = pic.source_case_law_id
|
||||
WHERE pic.cited_case_law_id = $1
|
||||
|
||||
@@ -411,6 +411,28 @@ async def get_precedent(case_law_id: UUID | str) -> dict | None:
|
||||
return None
|
||||
record["halachot"] = await db.list_halachot(case_law_id=case_law_id, limit=500)
|
||||
record["related_cases"] = await db.get_case_law_relations(case_law_id)
|
||||
# Auto-detected citation graph: which decisions cite THIS ruling (incoming
|
||||
# edges in precedent_internal_citations). Reuses the canonical query (G2) —
|
||||
# no parallel resolution path. Shaped to match the front-end RelatedCase row
|
||||
# so the existing "ציטוטים מקושרים" panel renders them with no visual change.
|
||||
from legal_mcp.services import citation_extractor as _ce
|
||||
raw = await _ce.list_citations_to_case_law(case_law_id)
|
||||
record["incoming_citations"] = [
|
||||
{
|
||||
"id": r["source_case_law_id"],
|
||||
"case_number": r.get("source_case_number") or r.get("cited_case_number") or "",
|
||||
"case_name": r.get("source_case_name") or "",
|
||||
"court": r.get("source_court") or "",
|
||||
"precedent_level": r.get("source_precedent_level") or "",
|
||||
"chair_name": r.get("source_chair_name") or "",
|
||||
"date": (
|
||||
r["source_date"].isoformat()
|
||||
if r.get("source_date") is not None else None
|
||||
),
|
||||
"confidence": r.get("confidence"),
|
||||
}
|
||||
for r in raw
|
||||
]
|
||||
return record
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user