fix(akte): falscher Hinweis „Weicht vom eingetragenen Farbschlag ab"
Beim Prod-Nachtest aufgefallen: Bei Schecken meldete die Akte eine Abweichung, obwohl eingetragener und errechneter Farbschlag identisch angezeigt wurden (JackJack: „Saphir Schecke" vs. „Saphir Schecke"). Zwei Ursachen: - Der Vergleich schnitt „Schecke"/„Rex" nur auf der ERRECHNETEN Seite ab, nicht auf der eingetragenen (die den Zusatz über formatVarietyName trägt). Jetzt werden beide Seiten gleich normalisiert. - formatVarietyName hängte den Modifier auch an, wenn der Katalogname ihn schon trägt („Schwarz Schecke" → „Schwarz Schecke Schecke"). Tests: 3 vitest-Fälle zu formatVarietyName, e2e SCHECKE-MISMATCH mit Gegenprobe (Mock-Tier mit echter Abweichung zeigt den Hinweis weiter). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -365,8 +365,13 @@ export function formatVarietyName(baseName: string, genotypeStr: string | null |
|
||||
try {
|
||||
const g = fromDisplayString(genotypeStr)
|
||||
const modifiers: string[] = []
|
||||
if (locusToken(g, 'Sp') === 'Sp') modifiers.push('Schecke')
|
||||
if (locusToken(g, 'Re') === 'Re') modifiers.push('Rex')
|
||||
// Einen Modifier NICHT doppeln, wenn der Katalogname ihn schon traegt: Bestaende mit
|
||||
// Namen wie „Schwarz Schecke" ergaeben sonst „Schwarz Schecke Schecke" — und der
|
||||
// Vergleich mit dem errechneten Farbschlag meldet dann eine Abweichung, die es nicht gibt.
|
||||
const words = baseName.toLowerCase().split(/[\s-]+/)
|
||||
const alreadyNamed = (modifier: string) => words.includes(modifier.toLowerCase())
|
||||
if (locusToken(g, 'Sp') === 'Sp' && !alreadyNamed('Schecke')) modifiers.push('Schecke')
|
||||
if (locusToken(g, 'Re') === 'Re' && !alreadyNamed('Rex')) modifiers.push('Rex')
|
||||
return [baseName, ...modifiers].join(' ')
|
||||
} catch {
|
||||
return baseName
|
||||
|
||||
Reference in New Issue
Block a user