|
|
8c43a8dc03
|
FEAT-8d-CREATE: docx importer CREATE path for ~194 abgegebene Jungtiere
ImportDocxService gains a three-way match-or-create loop:
Path 1 (ExternalRef 'docx-…'): previously-created docx animals → enrich fill-NULL-only (idempotency)
Path 2 (name+dob): existing main-import animals → enrich fill-NULL-only (as before)
Path 3 (no match): CREATE new Gerbil — abgegebene Jungtiere not in pedigree charts
Status=GivenAway (or Deceased), IsResident=false,
OriginBreeder='Zucht der Kleinen Chaoten', ImportSource='docx',
ExternalRef='docx-{ws}-{normname}-{litterDob}' (stable idempotent key),
Gender/ColorVariety/LitterId/ReceiverContact/GoHomeDate/DateOfDeath all set.
ImportDocxReport gains Created field; contact-creation eagerly saved before gerbil batch.
5 SQLite-backed tests: dry-run counts, create+FK, idempotency, enrich-not-duplicate, Deceased status.
Gate: 163/163 tests, has-pending=No, no schema change.
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
|
2026-06-06 23:13:21 +02:00 |
|
|
|
f74af537e2
|
FEAT-8d: docx-Importer fuer Wurfchronik-Detail (extract_docx.py + ImportDocxService)
tools/import/extract_docx.py (stdlib-Python, kein pip):
Parst 'Wurfchronik der Kleinen Chaoten im Detail.docx' (Word/XML via zipfile).
93 Wuerfe + 227 benannte Tiere aus Tabellen extrahiert.
Felder pro Tier: WS-Code, Wurfgeburtsdatum, Name, Farbschlag, Geschlecht (Stern-
Suffix), Abnehmer, Abgabedatum, Tod-Datum + Ursache, Partnername + DOB.
Sonderwerte (ZT/BLEIBT/FREI/VG:) werden herausgefiltert.
Edge-Cases: Doppel-Datum (16./17.03.2021, 31.05/*01.06.2023), WS ohne Zaehler
(/5), fehlende Leerzeichen vor WS:, mehrere Abnehmer (1.) ... 2.) ...).
Output: output/docx_litters.json + output/docx_animals.json.
tools/import/test_extract_docx.py:
Unit-Tests fuer Regex-Logik + Live-Tests gegen die echte docx (skip wenn fehlt).
28/28 Tests gruen.
GerbilManagerWebAPI/Import/ImportDocxService.cs:
Idempotenter NACHZUG-Loader (fill-NULL-only, nie ueberschreiben):
- WS-Code + Wurfgeburtsdatum -> PairingCode -> Gerbil.LitterId
- Abnehmer -> Contact lookup-or-create -> Gerbil.ReceiverContactId
- Abgabedatum -> Gerbil.GoHomeDate
- Tod-Datum + Ursache -> Gerbil.DateOfDeath + CauseOfDeath
Dry-Run zaehlt geplante Aenderungen, Execute schreibt.
GerbilManagerWebAPI/Endpoints/ImportDocxEndpoints.cs:
POST /import/docx/dry-run + /import/docx/execute (analog ImportEndpoints).
GATE: 157/157 C#, 28/28 Python-docx-Tests, ef has-pending=No.
NACHZUG: laueft NACH dem finalen WIPE+REIMPORT-3 (kein Impact auf aktuellen Pipeline).
|
2026-06-06 22:04:09 +02:00 |
|