# RetrieX Patch 47 - Exact Article Number Shop Search

## Ziel

Behebt den Fehler, dass rein numerische Shop-Suchen wie `suche 100247` ueber die normale Shopware-Volltextsuche laufen und dadurch mit `Shopware Store API returned invalid JSON` als nicht verfuegbare Shopdaten enden koennen.

`100247` ist eine Artikel-/Produktnummer. Solche Suchtexte sollen nicht breit als Volltext gesucht werden, sondern exakt gegen `productNumber` gefiltert werden.

## Aenderungen

- Neue YAML-konfigurierbare Erkennung fuer reine Produktnummer-Suchtexte:
  - `retriex.commerce_query.config.patterns.exact_product_number_search_text`
- `CommerceQueryParser` stellt `extractExactProductNumberSearchText()` bereit.
- `ShopSearchService` nutzt fuer reine Produktnummern einen separaten exakten Suchpfad.
- `ShopwareCriteriaBuilder` baut dafuer ein kleines, rich-text-freies Store-API-Kriterium:
  - kein Volltext-`search`
  - Filter `productNumber = <nummer>`
  - keine Description, keine CustomFields, keine Media-Daten
  - nur Name, Produktnummer, Verfuegbarkeit, Preis und Hersteller

## Erwartetes Verhalten

Prompt:

```text
suche 100247
```

Erwartung:

- Shopquery bleibt `100247`.
- Store API wird mit exaktem `productNumber`-Filter abgefragt.
- Keine breite Volltextsuche fuer die reine Zahl.
- Kein JSON-Fehler durch rich-text-/custom-field-lastige Suchergebnisse.
- Wenn Produktnummer existiert: Produktdaten/Preis/Verfuegbarkeit anzeigen.
- Wenn Produktnummer nicht existiert: sauber `keine passenden Shopdaten`, nicht `Shopdaten nicht verfuegbar`.

## Grenzen

- Der Patch ist bewusst auf reine numerische Produktnummern beschraenkt.
- Alphanumerische Artikelnummern oder gemischte Modellqueries laufen weiterhin durch die bestehende Shopquery-Logik.
- Kein Shopware-Endpoint-Wechsel, keine neue externe Abhaengigkeit, keine neue harte Produktliste.

## Lokale Pruefung

Ausgefuehrt:

```bash
php -l src/Config/CommerceQueryParserConfig.php
php -l src/Commerce/CommerceQueryParser.php
php -l src/Shopware/ShopwareCriteriaBuilder.php
php -l src/Commerce/ShopSearchService.php
```

Zusaetzlich geprueft:

- `config/retriex/commerce.yaml` ist YAML-parsebar.
- Pattern erkennt `100247` und verwirft `100247 clt`, `100`, sowie zu lange Zahlen.
- Exact-ProductNumber-Kriterium JSON-encodiert korrekt.

Nicht lokal ausfuehrbar, weil `vendor/` im ZIP fehlt:

```bash
php bin/console mto:agent:config:validate
```

Bitte nach Einspielen wie gewohnt pruefen:

```bash
bin/console cache:clear
bin/console mto:agent:config:validate
bin/console mto:agent:regression:test
bin/console mto:agent:config:audit-source --details
bin/console mto:agent:config:audit-patterns --details
```
