feat(import): neue Stammbäume (12 Charts) + litterChildren.add + EMF-Fotos überspringen
Die Züchterin hat 24 neue/aktualisierte Stammbaum-xlsx geliefert (Ordner
"neuestammbäume"); sie liegen jetzt im kanonischen Quellverzeichnis
Sttammbäume (12 neue Charts, 7 aktualisierte, 3 identisch, das inhaltsgleiche
"Picus Son (2)" ausgelassen). Prod ist per Upload-Ingest aktualisiert:
2372 -> 2451 Tiere, 916 -> 965 Würfe, 432 -> 507 Fotos, 2198 -> 2275 Tiere
mit Geburtsdatum. Overrides/verified-Zeilen, manuelle Tiere und Tickets
haben den Ingest unverändert überlebt.
Zwei Datenfehler, die die neuen Charts aufgedeckt haben — datengetrieben und
re-ingest-stabil gefixt statt an der globalen Heuristik zu drehen:
- litterChildren kennt jetzt `add` [Name | {name, dob}] als Gegenstück zu
`keep`: hängt ein Jungtier an DIESEN Wurf und entfernt den alten Wurf, wenn
er dadurch kinderlos UND virtuell ist. Nötig, weil "Pukas Kids" Akanes
Eltern komplett UNTER ihren Block setzt (N80 Roni = Vater, N81 Fumi =
Mutter) — _reconstruct_parents griff eine Zeile zu hoch, paarte Irish
Coffee (Bonapartes Mutter) mit Roni und riss Akane aus dem Z21-Wurf in
einen Phantom-Wurf, der in der Wurfchronik auftauchte (Ticket 88389f8e).
- Merle: durch das neue Geburtsdatum (18.06.2023) mergt der addAnimals-Stub
in den Chart-Datensatz und verliert dabei sein isResident -> expliziter
resolutions-Override (Ticket 36a3fcde/a8f11ac0, Züchterin: Zuchttier).
Außerdem: Excel legt neben Fotos teils EMF/WMF-Vektorvorschauen ab, die
Browser nicht darstellen können (kaputte Bildkachel in der Tier-Akte) ->
extract._attach_photos überspringt .emf/.wmf (5 Fotos betroffen).
Regressionstests für alle drei Punkte; alle Python-Suites grün.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -616,9 +616,28 @@ if _os.path.exists(_resolved):
|
||||
# ── New ticket-triage fixes (non-genetics import cluster) ─────────────────
|
||||
# Akane: Roni is the FATHER (gender flipped male), mother = Fumi (stub).
|
||||
_check_parents("Akane (wrong-parents)", "Akane", "Roni", "Fumi")
|
||||
# Match on the call-name: since the new Stammbäume (2026-08-18) Roni carries the full
|
||||
# clan name „Roni von den Kleinen Chaoten“ — and a substring _find("Roni") would hit
|
||||
# „Vroni of little Jumpers“ first.
|
||||
_roni = next((g for g in _d["gerbils"]
|
||||
if g["Name"] == "Roni" and g.get("DateOfBirth") == "2022-01-27"), None)
|
||||
if g["Name"].startswith("Roni") and g.get("DateOfBirth") == "2022-01-27"), None)
|
||||
check("Roni: gender flipped to male", _roni is not None and _roni.get("Gender") == "male")
|
||||
# litterChildren.add (neue Stammbäume 2026-08-18): Akane bleibt im Z21-Wurf (Roni × Fumi);
|
||||
# der Phantom-Wurf „Irish Coffee × Roni“ aus der Chart-Positions-Heuristik ist entfernt.
|
||||
_akane = next((g for g in _d["gerbils"]
|
||||
if g["Name"].startswith("Akane") and g.get("DateOfBirth") == "2023-01-21"), None)
|
||||
_akane_litter = _L.get(_akane.get("LitterId")) if _akane else None
|
||||
check("Akane: im Z21-Wurf (nicht im Chart-Phantom-Wurf)",
|
||||
_akane_litter is not None and _akane_litter.get("Name") == "Z21-Wurf")
|
||||
check("kein Phantom-Wurf 'Irish Coffee × Roni' vom 21.01.2023",
|
||||
not any((l.get("Date") == "2023-01-21" and "Irish Coffee" in (l.get("Name") or ""))
|
||||
for l in _d["litters"]))
|
||||
# Merle (Ticket 36a3fcde/a8f11ac0): DOB aus „Stammbaum von Pukas Kids“, Zuchttier per Override.
|
||||
_merle = next((g for g in _d["gerbils"] if g["Name"] == "Merle"), None)
|
||||
check("Merle: DOB 18.06.2023 aus dem neuen Stammbaum",
|
||||
_merle is not None and _merle.get("DateOfBirth") == "2023-06-18")
|
||||
check("Merle: Zuchttier (isResident-Override)",
|
||||
_merle is not None and _merle.get("IsResident") is True)
|
||||
# Fumi: materialised stub that is the (Wurfchronik) MOTHER of T21/Z21/22 →
|
||||
# under the isResident-Sweep (Ticket 381f7e51) a parent of her OWN litters is
|
||||
# resident. (No isResident override in conflict-decisions, so the sweep decides.)
|
||||
|
||||
Reference in New Issue
Block a user