feat(claims): אכלוס claims.party_name במקור + backfill — סגירת השדה-המת (#224)
עד כה claims.party_name נשאר ריק והצבירה/הכתיבה גזרו את הפרדת-המשיבים מ-source_document בזמן-ריצה (שדה-מת). עכשיו הוא מאוכלס במקור ונקרא ע"י הצרכנים. - claims_extractor.extract_and_store_claims: מחתים party_name=source_document ל-SPLIT_PARTIES (respondent/permit_applicant); single-voice נשאר ''. אותו כלל SPLIT_PARTIES של הצבירה (G2, import לא-מעגלי). - SCHEMA_V52: backfill idempotent ל-claims קיימים (רק split + party_name ריק). - argument_aggregator + block_writer._build_claims_context: קוראים claims.party_name, עם fallback ל-source_document ל-claims מדור-קודם. התנהגות זהה (party_name==source_document) — אפס-רגרסיה, אך השדה כעת מקור-האמת (G1). py_compile + טעינת-שרשרת-ייבוא נקיים. סוגר את הפתוח האחרון של #224. Invariants: G1 (אכלוס במקור, לא גזירה-בקריאה), G2 (כלל-פיצול יחיד). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -645,7 +645,12 @@ async def _build_claims_context(case_id: UUID) -> str:
|
||||
groups: dict[tuple[str, str], list[dict]] = {}
|
||||
for c in source_claims:
|
||||
role = c.get("party_role", "") or ""
|
||||
brief = (c.get("source_document", "") or "").strip() if role in SPLIT_PARTIES else ""
|
||||
# Prefer the stored party_name (stamped by the extractor, #224); fall
|
||||
# back to source_document for legacy claims predating the stamping.
|
||||
if role in SPLIT_PARTIES:
|
||||
brief = (c.get("party_name") or "").strip() or (c.get("source_document") or "").strip()
|
||||
else:
|
||||
brief = ""
|
||||
groups.setdefault((role, brief), []).append(c)
|
||||
|
||||
def _sort_key(k: tuple[str, str]) -> tuple[int, str]:
|
||||
|
||||
Reference in New Issue
Block a user