FEAT-8b: spreadsheet import tooling (stages 1-2) + review report

tools/import/ (Python, zero-dep migration tooling, not product code):
- xlsx_util.py: dependency-free .xlsx reader (shared strings, cells, drawing anchors)
- genotype.py: notation -> frozen 8-locus mapping + verbatim rawGenotype + unmappedTokens; '-' -> '?'
- extract.py: 10 Stammbaum charts + Wurfchronik -> animals.json/litters.json + anchor-mapped photos;
  dedup on normalise(name)+DOB -> German review-report.md (no DB load)

Run: 889 raw -> 587 unique animals, 24 conflicts, 310 ambiguous, 123 photos, 752 litters.
Output gitignored except review-report.md. Re-runnable per file (Wurfchronik Teil2+).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-06 00:40:54 +02:00
parent 016b5a1521
commit 1b776cd994
6 changed files with 1058 additions and 0 deletions

7
tools/import/.gitignore vendored Normal file
View File

@@ -0,0 +1,7 @@
# Generated extraction artifacts — large/binary, regenerated by extract.py.
# Per FEAT-8b: ignore the output dir EXCEPT the human-review report.
output/*
!output/review-report.md
__pycache__/
*.pyc