====== Schnittstelle 1010 – Aprocon-Personalumsätze aus CSV importieren ====== **1010** (''ImpUmsatzAprocon'') liest ''PERSONALUMSAETZE.CSV'', füllt ''SCHNITT_Umsatz'' und übernimmt Tages-, Verkäufer- und Stundenumsätze. Es gibt keine externe ODBC-Verbindung in diesem Pfad. Vor dem Lesen wird die **gesamte** Tabelle ''SCHNITT_Umsatz'' geleert. Die Folgeprozedur ändert ''Umsätze.Ist'' und ''IstNetto'' zunächst ohne ''IstFixed''-Filter. Später werden Stundenwerte ab dem frühesten Staging-Datum erneut gelöscht. Die folgende Neufüllung verlangt ''Kostenstelle'', die 1010 nicht setzt. Prüfe den Bereich vor einem Lauf. ===== Parameter und Eingabedatei ===== ''PFAD'' verlangt eine vorhandene Datei; Dateidialogmuster ''PERSONALUMSAETZE.CSV''. ''FID'' ist eine Nummer mit registriertem Default 0. Bei FID ungleich 0 wird die Filiale als ''Filiale * 100 + FID'' gespeichert. Parser: ''Encoding.Default'', Semikolon, getrimmte Leerzeichen, CSV-Anführungszeichen. Kein ausdrücklicher Header-Skip und keine Mindestfeldzahlprüfung; nur ein leeres erstes Feld wird übersprungen. Die Datei wird nicht archiviert. ^ Position ^ Bedeutung ^ Verarbeitung ^ | 1 | Filiale | Zahl; mit FID-Mapping nach ''SCHNITT_Umsatz.Filiale''. | | 2 | Verkäufer | Nach ''SCHNITT_Umsatz.Verkäufer''. | | 3 | Datum | ''NzDate''; zusammen mit Position 4. | | 4 | Halbstundenwert | Durch 2 geteilt und als Stunden addiert. | | 5 | Netto-Cent | Durch 100 geteilt nach ''PreisNetto''. | | 6 | Brutto-Cent | Durch 100 geteilt nach ''PreisBrutto''. | ===== Datenfluss und SQL ===== ^ Eingang / Ziel ^ Wirkung ^ | Datei → ''SCHNITT_Umsatz'' | TRUNCATE, danach INSERT der fünf Zielspalten je akzeptierter Zeile. | | ''SCHNITT_Umsatz'' + ''UmsKstGr'' → ''Umsätze'' | ''SCHNITT_Umsatz_AproconFile'' setzt/füllt ''IstKassenBon'', ''IstKassenBonNetto'' und überträgt sie nach ''Ist''/''IstNetto''. Nur bestehende Umsatzzeilen. | | ''Personen.ApcID'' → ''UmsatzVK'' | Verkäuferwerte im betroffenen Datums-/Gruppenbereich löschen und mit ''Datum'', ''PersonID'', ''Gruppe'', ''VKWert'', ''VKWertNetto'' neu einfügen. | | Staging → ''UmsätzeIstStunde'' | Zuerst Stundenzeilen löschen und mit Brutto-/Netto-Summen füllen. ''spCalcUmsatzIst'' löscht sie ab Staging-Minimum noch einmal und versucht eine Neufüllung über ''SCHNITT_Umsatz.Kostenstelle''. | | Stunden → ''Tageskurven'' | ''TageskurvenAusStundenUmsatz 100'' schreibt ''TK00'' bis ''TK23'' für vorhandene Kurven. | | ''Umsätze'' + ''UmsKstGr'' | ''spCalcUmsatzIst'' berechnet ''Ist'' und ''Kassierdauer'' von Summengruppen. | **Statischer Code-/Schemawiderspruch:** 1010 schreibt ''Filiale'', aber nicht ''Kostenstelle''. Laut versionierter ''SCHNITT_Umsatz''-DDL bleibt ''Kostenstelle'' NULL. Ohne unbekannten Live-Trigger findet die letzte Stunden-Neufüllung daher keinen passenden Join; die zuvor gefüllten Stundenzeilen bleiben nach dem zweiten DELETE weg. Die Tageskurven wurden bereits davor berechnet. Das ist nicht produktiv getestet. Die Kette hat keine Gesamttransaktion. Ein Fehler nach TRUNCATE oder nach einzelnen Zeilen kann Teilstände lassen. ''spCalcUmsatzIst'' wird mit Untergrenze aus dem Staging und Obergrenze ''GETDATE()'' aufgerufen; nicht alle vorherigen Updates besitzen dieselbe Obergrenze. Keine neue Tagesumsatzzeile wird angelegt. ===== Einstellungen und Prüfstand ===== Keine individuelle fachliche ZW-Einstellung in der Routine. Die gemeinsame Schnittstellenbasis verwendet bedingt Logging, Mail und Meldungsversand; ''MANUELL'', ''SILENT'' und ''MAILTO'' sind Laufparameter. ''SQL_TIMEOUT'' wird im Fachcommand nicht ausdrücklich gesetzt. Technische Feldbeziehungen: Git-Nexus ''pep4desktop/interfaces/by-id/1010.md''. Quellcommit ''f1d82a003b62f2658f06eaa943dc685ab219bdf3'', statisch geprüft am 25.09.2026. **Kein Importlauf, Live-Schema- oder HTTP-Abrufnachweis.** [[schnittstellen:schnittstellen|Zur Schnittstellenübersicht]]