diff --git a/tools/import/extract.py b/tools/import/extract.py index 73bbbc7..0fb36f9 100644 --- a/tools/import/extract.py +++ b/tools/import/extract.py @@ -211,6 +211,7 @@ def extract_stammbaum(path): if not compact and not is_block_dob: continue + name_row = r if compact: name = clean_name(compact.group(1)) dob, death, geno = parse_detail(t) @@ -225,6 +226,7 @@ def extract_stammbaum(path): if (c, rr) in cells and not re.match(r"^\*?\s?\d", cells[(c, rr)]) \ and not gt.looks_like_genotype(cells[(c, rr)]): name = clean_name(cells[(c, rr)]) + name_row = rr used.add((c, rr)) break farbschlag = "" @@ -275,7 +277,7 @@ def extract_stammbaum(path): "sourceFiles": [fname], "_gen": gen_of(c, col_offset), "_col": c, - "_row": r, + "_row": name_row, "_file": fname, "_zucht": norm_zucht(zraw), }) diff --git a/tools/import/merge_and_resolve.py b/tools/import/merge_and_resolve.py index f5a2d13..552b7ca 100644 --- a/tools/import/merge_and_resolve.py +++ b/tools/import/merge_and_resolve.py @@ -882,17 +882,29 @@ def main(): m_dob = parse_date(mother_ref.get("dob")) for p_cand in stammbaum_only_animals: + p_gender = str(p_cand.get("gender") or "").lower().strip() + if p_gender in ["w", "f", "female", "weiblich"]: + continue + p_dob = parse_date(p_cand.get("dob")) + if dob_val and p_dob and p_dob >= dob_val: + continue cand_call_norm = normalize_name(get_call_name(p_cand["name"])) or "unbekannt" cand_name_norm = normalize_name(p_cand["name"]) or "unbekannt" if cand_call_norm == normalize_name(f_name) or cand_name_norm == normalize_name(f_name): - if not f_dob or parse_date(p_cand.get("dob")) == f_dob: + if not f_dob or p_dob == f_dob: f_scoped_id = generate_guid(f"stammbaum-animal-{p_cand['id']}") break for p_cand in stammbaum_only_animals: + p_gender = str(p_cand.get("gender") or "").lower().strip() + if p_gender in ["m", "male", "männlich"]: + continue + p_dob = parse_date(p_cand.get("dob")) + if dob_val and p_dob and p_dob >= dob_val: + continue cand_call_norm = normalize_name(get_call_name(p_cand["name"])) or "unbekannt" cand_name_norm = normalize_name(p_cand["name"]) or "unbekannt" if cand_call_norm == normalize_name(m_name) or cand_name_norm == normalize_name(m_name): - if not m_dob or parse_date(p_cand.get("dob")) == m_dob: + if not m_dob or p_dob == m_dob: m_scoped_id = generate_guid(f"stammbaum-animal-{p_cand['id']}") break diff --git a/tools/import/output/review-report.md b/tools/import/output/review-report.md index 2a08622..7b233f0 100644 --- a/tools/import/output/review-report.md +++ b/tools/import/output/review-report.md @@ -10,9 +10,9 @@ _Automatisch erzeugt von `tools/import/extract.py` — **noch nichts in die Date - in mehreren Dateien gefunden (Dubletten zusammengeführt): 460 - Konflikte zur Klärung: **2** - Mehrdeutige / unvollständige Einträge (ohne Name+Datum): **342** -- Fotos zugeordnet: **418** +- Fotos zugeordnet: **416** - Würfe aus der Wurfchronik: **752** - - Tiere mit Wurf verknüpft: **270** (davon über Geburtsdatum **und** Eltern: 167, nur über Geburtsdatum: 103; mehrdeutig: 17) + - Tiere mit Wurf verknüpft: **271** (davon über Geburtsdatum **und** Eltern: 166, nur über Geburtsdatum: 105; mehrdeutig: 16) - Würfe mit Datenqualitäts-Hinweisen: 113 (+ 138 Zeilen mit abweichendem Spaltenschema) ## Zusammenführungs-Schlüssel