feat(normalizer): add row parser to persons_tree
This commit is contained in:
@@ -128,3 +128,48 @@ def _resolve_one(raw: str, index: dict[str, list[str]]) -> tuple[str | None, str
|
||||
if len(hits) == 0:
|
||||
return None, "not_found"
|
||||
return None, "ambiguous"
|
||||
|
||||
|
||||
def _parse_row(row_num: int, fields: dict) -> dict:
|
||||
"""Produce one person record from a header-mapped row dict.
|
||||
|
||||
Internal keys prefixed with '_' are stripped before JSON output in main().
|
||||
"""
|
||||
def s(key: str) -> str:
|
||||
return (fields.get(key) or "").strip()
|
||||
|
||||
birth_raw = s("birth_date")
|
||||
death_raw = s("death_date")
|
||||
|
||||
birth_year = _parse_year(birth_raw)
|
||||
death_year = _parse_year(death_raw)
|
||||
|
||||
notes_parts = []
|
||||
if birth_raw and birth_year is None:
|
||||
notes_parts.append(f"[Geburtsdatum: {birth_raw}]")
|
||||
if death_raw and death_year is None:
|
||||
notes_parts.append(f"[Todesdatum: {death_raw}]")
|
||||
bemerkung = s("notes")
|
||||
if bemerkung:
|
||||
notes_parts.append(bemerkung)
|
||||
|
||||
maiden = s("maiden_name") or None
|
||||
spouse = s("spouse") or None
|
||||
bemerkung_out = bemerkung or None
|
||||
|
||||
return {
|
||||
"rowId": f"row_{row_num:03d}",
|
||||
"firstName": s("first_name"),
|
||||
"lastName": s("last_name"),
|
||||
"maidenName": maiden,
|
||||
"alias": None,
|
||||
"notes": " ".join(notes_parts) or None,
|
||||
"birthYear": birth_year,
|
||||
"deathYear": death_year,
|
||||
"birthPlace": s("birth_place") or None,
|
||||
"deathPlace": s("death_place") or None,
|
||||
"generation": _parse_generation(s("generation")),
|
||||
"familyMember": True,
|
||||
"_spouse_raw": spouse,
|
||||
"_bemerkung_raw": bemerkung_out,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user