Add ERP enrichment dry run
This commit is contained in:
@@ -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.
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user