feat(species): auto-classify variety species from its label
Infer the catalog species a free-text variety label names ("Maiz de la
abuela" -> Zea mays) and prefill the category from the species family.
- Pure, testable matcher (domain/species_autoclassify.dart): whole-word,
accent/case-insensitive, Unicode-aware (any script), longest-name-wins,
ambiguous names left unclassified, light plural fold.
- Quick-add and draft naming auto-link the species when the field is empty
(non-destructive; an explicit category is kept).
- Edit sheet offers a one-tap suggestion from the typed name.
Tests: matcher unit, repository integration, SpeciesRepository.classifyLabel,
and an edit-sheet widget test.
This commit is contained in:
parent
0e6ef13d00
commit
b840b83c42
15 changed files with 510 additions and 3 deletions
|
|
@ -224,4 +224,17 @@ void main() {
|
|||
final results = await repo.search('Genus', limit: 5);
|
||||
expect(results.length, 5);
|
||||
});
|
||||
|
||||
test('classifyLabel infers the species named in a free-text label', () async {
|
||||
await repo.seedBundled(_seeds);
|
||||
|
||||
final match = await repo.classifyLabel('Tomate cherry', languageCode: 'es');
|
||||
expect(match, isNotNull);
|
||||
expect(match!.scientificName, 'Solanum lycopersicum');
|
||||
expect(match.family, 'Solanaceae');
|
||||
expect(match.commonName, 'Tomate'); // best name for the locale
|
||||
|
||||
// No species named → no suggestion.
|
||||
expect(await repo.classifyLabel('Girasol gigante'), isNull);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue