FU-2a: idempotent ingest + write-time normalization + searchable flag (GAP-03/06/13) #12
@@ -1155,7 +1155,7 @@ async def create_case(
|
|||||||
hearing_date, notes, expected_outcome,
|
hearing_date, notes, expected_outcome,
|
||||||
practice_area, appeal_subtype, proceeding_type)
|
practice_area, appeal_subtype, proceeding_type)
|
||||||
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15)""",
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15)""",
|
||||||
case_id, case_number, title,
|
case_id, _canonical_case_number(case_number), title,
|
||||||
json.dumps(appellants or []),
|
json.dumps(appellants or []),
|
||||||
json.dumps(respondents or []),
|
json.dumps(respondents or []),
|
||||||
subject, property_address, permit_number, committee_type,
|
subject, property_address, permit_number, committee_type,
|
||||||
@@ -1211,6 +1211,21 @@ def _normalize_case_number(s: str) -> str:
|
|||||||
return s.strip().replace("/", "-")
|
return s.strip().replace("/", "-")
|
||||||
|
|
||||||
|
|
||||||
|
def _canonical_case_number(s: str) -> str:
|
||||||
|
"""Canonical write-time form per X1 §1: trim · prefix-strip · '/'→'-'.
|
||||||
|
|
||||||
|
Deterministic and format-only — does NOT add or remove a month segment.
|
||||||
|
Used at the write boundary for identifier-keyed corpora (internal
|
||||||
|
committee decisions, active cases). NOT for external precedents, whose
|
||||||
|
canonical identifier is the full citation.
|
||||||
|
"""
|
||||||
|
s = (s or "").strip()
|
||||||
|
m = re.search(r"\d", s)
|
||||||
|
if m:
|
||||||
|
s = s[m.start():]
|
||||||
|
return s.strip().replace("/", "-")
|
||||||
|
|
||||||
|
|
||||||
async def get_case_by_number(case_number: str) -> dict | None:
|
async def get_case_by_number(case_number: str) -> dict | None:
|
||||||
pool = await get_pool()
|
pool = await get_pool()
|
||||||
norm = _normalize_case_number(case_number)
|
norm = _normalize_case_number(case_number)
|
||||||
@@ -2647,6 +2662,7 @@ async def create_internal_committee_decision(
|
|||||||
filed against an existing appeal with the same number).
|
filed against an existing appeal with the same number).
|
||||||
"""
|
"""
|
||||||
pool = await get_pool()
|
pool = await get_pool()
|
||||||
|
case_number = _canonical_case_number(case_number)
|
||||||
tags_json = json.dumps(subject_tags or [], ensure_ascii=False)
|
tags_json = json.dumps(subject_tags or [], ensure_ascii=False)
|
||||||
async with pool.acquire() as conn:
|
async with pool.acquire() as conn:
|
||||||
existing = await conn.fetchrow(
|
existing = await conn.fetchrow(
|
||||||
|
|||||||
Reference in New Issue
Block a user