Add ERP enrichment dry run

This commit is contained in:
2026-07-29 14:32:15 +02:00
parent d92dc61277
commit caf36a76cb
9 changed files with 930 additions and 1 deletions
+94
View File
@@ -0,0 +1,94 @@
# ERP Enrichment Dry Run
Der ERP Enrichment Dry Run reichert ausschließlich vorhandene RollCalc-Artikel mit ausgewählten ERP-Feldern an. Die RollCalc-Datei definiert die relevante Artikelmenge und Reihenfolge. ERP-Artikel ohne RollCalc-Entsprechung werden ignoriert.
Es handelt sich nicht um einen vollständigen ERP-Import, keinen Merge-Prozess und keinen produktiven RollCalc-Export.
## Öffentliche API
```python
from pathlib import Path
from article_data_manager.enrichment.erp import (
enrich_rollcalc_articles_from_erp,
write_enrichment_outputs,
)
result = enrich_rollcalc_articles_from_erp(
Path("data/source/rollcalc/article-data.json"),
Path("data/source/erp/production-key-data.csv"),
)
write_enrichment_outputs(
result,
Path("data/generated/article-data.erp-enriched-dry-run.json"),
Path("data/reports/erp-enrichment-report.csv"),
)
```
## Übernommene ERP-Felder
| ERP-Feld | Zielfeld | Bedeutung | Einheit |
| --- | --- | --- | --- |
| `ROP_PRODUCT_WIDTH` | `product_width_m` | ERP-Produktbreite | m |
| `ROP_RATE_OF_PRODUCTION` | `line_speed_m_min` | Liniengeschwindigkeit | m/min |
| `SL_MINIMUM_PRODUCTION_QUANTITY` | `minimum_production_quantity` | Mindestproduktionsmenge | ERP-Originaleinheit |
| `WPL_WORKPLACE_TEXT` | `workplace` | geplanter Arbeitsplatz beziehungsweise geplante Anlage | Text |
`ROP_RATE_OF_PRODUCTION` ist die für Rollenwechselbetrachtungen maßgebliche Liniengeschwindigkeit in m/min. `SL_PRODUCTION_SPEED` wird nicht verwendet, weil dessen Einheit artikelabhängig sein kann. `kg_qm` wird nicht übernommen, weil `area_weight` aus QC beziehungsweise aus der bestehenden RollCalc-Datenquelle stammt.
`ROP_PRODUCT_WIDTH` wird als ERP-Produktbreite übernommen, ohne Sonderfälle fachlich zu interpretieren.
## Internes Dry-Run-Format
Die vorhandene RollCalc-Struktur bleibt erhalten und wird um ein separates `erp`-Objekt ergänzt:
```json
{
"nr": "214700",
"name": "Stex H 751 (Tfix 751), 6,00 x 50 m",
"thickness": 6.722,
"area_weight": 0.0,
"core_type": 0.0,
"erp": {
"product_width_m": 6.0,
"line_speed_m_min": 18.5,
"minimum_production_quantity": 5000.0,
"workplace": "Anlage 3"
}
}
```
Das `erp`-Objekt ist auch vorhanden, wenn kein ERP-Treffer existiert. Fehlende, widersprüchliche oder ungültige ERP-Werte erscheinen dort als `null`.
Vor produktiver Verwendung in RollCalc muss dessen Ladeverhalten für das zusätzliche `erp`-Objekt geprüft werden. Langfristig soll ein eigener RollCalc-Export nur die für RollCalc vorgesehenen Felder ausgeben. ERP-Produktionsinformationen müssen nicht zwangsläufig Bestandteil des RollCalc-Exports werden.
## Mehrfachtreffer und Status
ERP-Zeilen werden ausschließlich über `SL_ITEM_NO` der RollCalc-Artikelnummer `nr` zugeordnet. Artikelnummern werden nicht numerisch konvertiert oder umformatiert.
Mehrfachtreffer werden feldweise ausgewertet:
- keine ERP-Zeile: `no_erp_match`
- keine gefüllten Werte: `missing`
- genau ein Wert: `unique`
- mehrere Zeilen mit identischem Wert: `same_value_multiple_rows`
- mehrere unterschiedliche Werte: `conflict`
- nicht interpretierbarer numerischer Wert: `invalid`
Leere Werte zählen nicht als eigener Konfliktwert. Konflikte und ungültige Werte werden berichtet und nicht automatisch aufgelöst.
Artikelstatus:
- `complete`: alle vier Felder haben `unique` oder `same_value_multiple_rows`
- `partial`: mindestens ein Feld ist `missing`, aber kein Feld ist `conflict` oder `invalid`
- `conflict`: mindestens ein Feld ist `conflict` oder `invalid`
- `no_erp_match`: keine ERP-Zeile zur RollCalc-Artikelnummer
## Ausgaben
Standardpfade:
- `data/generated/article-data.erp-enriched-dry-run.json`
- `data/reports/erp-enrichment-report.csv`
Die Quelldateien werden nicht verändert. Produktive Dry-Run-Ergebnisse werden nicht versioniert.
+4
View File
@@ -75,3 +75,7 @@ write_erp_profile_report(Path("data/source/erp/production-key-data.csv"))
```
Der Report wird standardmäßig als `data/reports/erp_profile_report.txt` geschrieben. Der Explorer verändert weder ERP-CSV noch RollCalc-JSON und erzeugt keine `article-data.json`.
## ERP Enrichment Dry Run
Der ERP Enrichment Dry Run ist unter `docs/erp-enrichment.md` dokumentiert. Er ist kein vollständiger ERP-Importer, sondern erzeugt ein internes Dry-Run-Artefakt mit separatem `erp`-Objekt und einen CSV-Report.