diff --git a/cmd/websrv/main.go b/cmd/websrv/main.go index d20ceae..594d479 100644 --- a/cmd/websrv/main.go +++ b/cmd/websrv/main.go @@ -6,6 +6,7 @@ import ( "io" "log" "net/http" + "os" "gittea.marcokittel.de/elio/eliotools/datawriter/internal/database" ) @@ -37,13 +38,23 @@ type Context struct { State string `json:"state"` } +var ( + connectionString = "" + port = ":8080" +) + const ( - connectionString = "root:eliogeheim@tcp(127.0.0.1:3306)/elio_test?parseTime=true" + curlhelp = `curl -X POST localhost:8080/api/products -d '{ "products": { "A6053": 2, "B3009": 1200 }, "context": { "country": "EU", "state": "" } }'` ) func main() { + connectionString := os.Getenv("CONNECTIONSTRING") + nps := database.NewProductService(connectionString) + if len(connectionString) == 0 { + fmt.Println("Connectionstring fehlt!. Bsp.: :@tcp(127.0.0.1:3306)/elio?parseTime=true") + return + } //Env Variablen nutzen - dbr := database.NewDatabaseReader(connectionString) http.HandleFunc("/api/products", func(w http.ResponseWriter, r *http.Request) { if r.Method != "POST" { return @@ -54,42 +65,16 @@ func main() { log.Println(err) return } - var foo Container - err = json.Unmarshal(data, &foo) + var payload database.Container + err = json.Unmarshal(data, &payload) if err != nil { - log.Println(err) + log.Printf("Could not parse Json: %s", err) return } - - fmt.Println(foo) - result := []OutgoingProducts{} - for key, item := range foo.Products { - //Checken ob die Felder leer sind / Validitätsprüfung einbauen - products, err := dbr.GetProductByProductIdDeliveryCountryAndState(key, foo.Context.Country, foo.Context.State) - if err != nil { - log.Println(err) - } - if len(products) == 0 { - continue - } - gebrauchteProduktAnzahl := item - op := NewOutgoingProducts() - for _, db_products := range products { - if gebrauchteProduktAnzahl <= 0 { - continue - } - if db_products.Amount >= gebrauchteProduktAnzahl { - newProduct := Product{Delivery: db_products.DeliveryDays, Quantity: gebrauchteProduktAnzahl, Warehouse: db_products.Warehouse} - gebrauchteProduktAnzahl = 0 - op.Products[key] = append(op.Products[key], newProduct) - } else if db_products.Amount < gebrauchteProduktAnzahl { - newProduct := Product{Delivery: db_products.DeliveryDays, Quantity: db_products.Amount, Warehouse: db_products.Warehouse} - gebrauchteProduktAnzahl -= db_products.Amount - op.Products[key] = append(op.Products[key], newProduct) - } - } - result = append(result, *op) - fmt.Println(op) + result, err := nps.FetchData(&payload) + if err != nil { + //Todo Fehlerhandling + log.Println(err) } jsonResult, err := json.Marshal(result) if err != nil { @@ -99,7 +84,7 @@ func main() { w.WriteHeader(http.StatusOK) fmt.Fprintln(w, string(jsonResult)) }) - - log.Fatal(http.ListenAndServe(":8080", nil)) - + log.Printf("Easy Peasy: Die Party startet auf Port %s\n", port) + log.Printf("Probiers mal damit: %s\n", curlhelp) + log.Fatal(http.ListenAndServe(port, nil)) } diff --git a/docker-compose.yml b/docker-compose.yml index 6bd7a65..0a70978 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,3 @@ -version: '3.8' - services: mariadb: image: mariadb:10.6 @@ -11,11 +9,13 @@ services: MYSQL_DATABASE: elio volumes: - mariadb_data:/var/lib/mysql + - ./initdb:/docker-entrypoint-initdb.d + healthcheck: - test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-p eliogeheim"] + test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1","--protocol=socket", "-u", "root", "-peliogeheim"] interval: 5s timeout: 3s retries: 3 volumes: - mariadb_data: # Named Volume für Datenpersistenz + mariadb_data: diff --git a/initdb/init.sql b/initdb/init.sql new file mode 100644 index 0000000..d43e3be --- /dev/null +++ b/initdb/init.sql @@ -0,0 +1,51 @@ +-- init.sql +CREATE DATABASE IF NOT EXISTS elio_test; +CREATE DATABASE IF NOT EXISTS elio; + + +-- -- Haupttabellen erzeugen +-- CREATE TABLE IF NOT EXISTS elio.warehouseproducts ( +-- id INT AUTO_INCREMENT PRIMARY KEY, +-- warehouse char(2) NOT NULL, +-- productid VARCHAR(20) NOT NULL, +-- amount INT DEFAULT 0, +-- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, +-- CONSTRAINT location_product_must_be_one UNIQUE (warehouse, productid) +-- ) ENGINE=InnoDB; + +-- CREATE TABLE IF NOT EXISTS elio.deliverytimes ( +-- id INT AUTO_INCREMENT PRIMARY KEY, +-- fromcountry varchar(4) NOT NULL, +-- tocountry varchar(4) NOT NULL, +-- state varchar(4) NULL, +-- delivery INT DEFAULT 0, +-- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, +-- CONSTRAINT delivery_from_to_country_must_be_one UNIQUE (fromcountry, tocountry) +-- ) ENGINE=InnoDB; + +-- -- Testtabellen erzeugen +-- CREATE TABLE IF NOT EXISTS elio_test.warehouseproducts ( +-- id INT AUTO_INCREMENT PRIMARY KEY, +-- warehouse char(2) NOT NULL, +-- productid VARCHAR(20) NOT NULL, +-- amount INT DEFAULT 0, +-- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, +-- CONSTRAINT location_product_must_be_one UNIQUE (warehouse, productid) +-- ) ENGINE=InnoDB; + +-- CREATE TABLE IF NOT EXISTS elio_test.deliverytimes ( +-- id INT AUTO_INCREMENT PRIMARY KEY, +-- fromcountry varchar(4) NOT NULL, +-- tocountry varchar(4) NOT NULL, +-- state varchar(4) NULL, +-- delivery INT DEFAULT 0, +-- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, +-- CONSTRAINT delivery_from_to_country_must_be_one UNIQUE (fromcountry, tocountry) +-- ) ENGINE=InnoDB; + +-- Userkram +CREATE USER IF NOT EXISTS 'elio'@'%' IDENTIFIED BY 'eliogeheim'; +CREATE USER IF NOT EXISTS 'elio_test'@'%' IDENTIFIED BY 'eliogeheim'; +GRANT ALL PRIVILEGES ON elio.* TO 'elio'@'%'; +GRANT ALL PRIVILEGES ON elio_test.* TO 'elio_test'@'%'; +FLUSH PRIVILEGES; diff --git a/initdb/init_table.sql b/initdb/init_table.sql new file mode 100644 index 0000000..221baba --- /dev/null +++ b/initdb/init_table.sql @@ -0,0 +1,51 @@ +-- init.sql +CREATE DATABASE IF NOT EXISTS elio_test; +CREATE DATABASE IF NOT EXISTS elio; + + +-- Haupttabellen erzeugen +CREATE TABLE IF NOT EXISTS elio.blablabla ( + id INT AUTO_INCREMENT PRIMARY KEY, + warehouse char(2) NOT NULL, + productid VARCHAR(20) NOT NULL, + amount INT DEFAULT 0, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT location_product_must_be_one UNIQUE (warehouse, productid) +) ENGINE=InnoDB; + +CREATE TABLE IF NOT EXISTS elio.deliverytimes ( + id INT AUTO_INCREMENT PRIMARY KEY, + fromcountry varchar(4) NOT NULL, + tocountry varchar(4) NOT NULL, + state varchar(4) NULL, + delivery INT DEFAULT 0, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT delivery_from_to_country_must_be_one UNIQUE (fromcountry, tocountry) +) ENGINE=InnoDB; + +-- Testtabellen erzeugen +CREATE TABLE IF NOT EXISTS elio_test.warehouseproducts ( + id INT AUTO_INCREMENT PRIMARY KEY, + warehouse char(2) NOT NULL, + productid VARCHAR(20) NOT NULL, + amount INT DEFAULT 0, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT location_product_must_be_one UNIQUE (warehouse, productid) +) ENGINE=InnoDB; + +CREATE TABLE IF NOT EXISTS elio_test.deliverytimes ( + id INT AUTO_INCREMENT PRIMARY KEY, + fromcountry varchar(4) NOT NULL, + tocountry varchar(4) NOT NULL, + state varchar(4) NULL, + delivery INT DEFAULT 0, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT delivery_from_to_country_must_be_one UNIQUE (fromcountry, tocountry) +) ENGINE=InnoDB; + +-- Userkram +CREATE USER IF NOT EXISTS 'elio'@'%' IDENTIFIED BY 'eliogeheim'; +CREATE USER IF NOT EXISTS 'elio_test'@'%' IDENTIFIED BY 'eliogeheim'; +GRANT ALL PRIVILEGES ON elio.* TO 'elio'@'%'; +GRANT ALL PRIVILEGES ON elio_test.* TO 'elio_test'@'%'; +FLUSH PRIVILEGES; diff --git a/internal/database/database.go b/internal/database/database.go index a8c5dd8..1eabd85 100644 --- a/internal/database/database.go +++ b/internal/database/database.go @@ -34,7 +34,10 @@ func (d *DatabaseWriter) connectDB(connectionString string) (*sql.DB, error) { if err != nil { return nil, err } - + err = db.Ping() + if err != nil { + return nil, err + } // Verbindungspool konfigurieren db.SetMaxOpenConns(40) db.SetMaxIdleConns(25) diff --git a/internal/database/service.go b/internal/database/service.go new file mode 100644 index 0000000..7f6c7dc --- /dev/null +++ b/internal/database/service.go @@ -0,0 +1,71 @@ +package database + +import "log" + +type ProductService struct { + dbr *DatabaseReader +} +type Container struct { + Products map[string]int `json:"products"` + Context Context `json:"context"` +} + +type Product struct { + Warehouse string `json:"warehouse"` + Quantity int `json:"quantity"` + Delivery int `json:"delivery_time"` +} + +type OutgoingProducts struct { + Products map[string][]Product `json:"products"` +} + +func NewOutgoingProducts() *OutgoingProducts { + op := OutgoingProducts{ + Products: make(map[string][]Product), + } + return &op +} + +type Context struct { + Country string `json:"country"` + State string `json:"state"` +} + +func NewProductService(connectionString string) *ProductService { + dbr := NewDatabaseReader(connectionString) + p := ProductService{dbr: dbr} + return &p +} + +func (p *ProductService) FetchData(payload *Container) ([]OutgoingProducts, error) { + result := []OutgoingProducts{} + for key, item := range payload.Products { + //Checken ob die Felder leer sind / Validitätsprüfung einbauen + products, err := p.dbr.GetProductByProductIdDeliveryCountryAndState(key, payload.Context.Country, payload.Context.State) + if err != nil { + log.Println(err) + } + if len(products) == 0 { + continue + } + gebrauchteProduktAnzahl := item + op := NewOutgoingProducts() + for _, db_products := range products { + if gebrauchteProduktAnzahl <= 0 { + continue + } + if db_products.Amount >= gebrauchteProduktAnzahl { + newProduct := Product{Delivery: db_products.DeliveryDays, Quantity: gebrauchteProduktAnzahl, Warehouse: db_products.Warehouse} + gebrauchteProduktAnzahl = 0 + op.Products[key] = append(op.Products[key], newProduct) + } else if db_products.Amount < gebrauchteProduktAnzahl { + newProduct := Product{Delivery: db_products.DeliveryDays, Quantity: db_products.Amount, Warehouse: db_products.Warehouse} + gebrauchteProduktAnzahl -= db_products.Amount + op.Products[key] = append(op.Products[key], newProduct) + } + } + result = append(result, *op) + } + return result, nil +} diff --git a/starteCsvService b/starteCsvService new file mode 100755 index 0000000..3aafa01 --- /dev/null +++ b/starteCsvService @@ -0,0 +1,2 @@ +#!/bin/sh +CONNECTIONSTRING='root:eliogeheim@tcp(127.0.0.1:3306)/elio?parseTime=true' go run cmd/shell/main.go diff --git a/starteDatenbank b/starteDatenbank new file mode 100755 index 0000000..17b5b5d --- /dev/null +++ b/starteDatenbank @@ -0,0 +1,2 @@ +#!/bin/sh +exec docker-compose up -d diff --git a/starteWebservice b/starteWebservice new file mode 100755 index 0000000..753b2b3 --- /dev/null +++ b/starteWebservice @@ -0,0 +1,2 @@ +#!/bin/sh +CONNECTIONSTRING='elio:eliogeheim@tcp(127.0.0.1:3306)/elio?parseTime=true' go run cmd/websrv/main.go diff --git a/processed/2023-11-09T16:05:10+00:00-DE-delivery.csv b/testdaten/2023-11-09T16:05:10+00:00-DE-delivery.csv similarity index 77% rename from processed/2023-11-09T16:05:10+00:00-DE-delivery.csv rename to testdaten/2023-11-09T16:05:10+00:00-DE-delivery.csv index 75ae447..1b0548c 100644 --- a/processed/2023-11-09T16:05:10+00:00-DE-delivery.csv +++ b/testdaten/2023-11-09T16:05:10+00:00-DE-delivery.csv @@ -1,6 +1,6 @@ country;state;delivery_time -CH;;2 -DE;;2 +CH;;4 +DE;;5 AT;;2 EU;;2 diff --git a/processed/2023-11-09T16:10:10+00:00-CH-delivery.csv b/testdaten/2023-11-09T16:10:10+00:00-AT-delivery.csv similarity index 54% rename from processed/2023-11-09T16:10:10+00:00-CH-delivery.csv rename to testdaten/2023-11-09T16:10:10+00:00-AT-delivery.csv index 6f33883..aa36d80 100644 --- a/processed/2023-11-09T16:10:10+00:00-CH-delivery.csv +++ b/testdaten/2023-11-09T16:10:10+00:00-AT-delivery.csv @@ -1,5 +1,6 @@ country;state;delivery_time -CH;;9 -DE;BW;10 -AT;;11 +CH;;3 +DE;;2 +AT;;1 +EU;;4 diff --git a/testdaten/2023-11-09T16:10:10+00:00-CH-delivery.csv b/testdaten/2023-11-09T16:10:10+00:00-CH-delivery.csv new file mode 100644 index 0000000..1b02144 --- /dev/null +++ b/testdaten/2023-11-09T16:10:10+00:00-CH-delivery.csv @@ -0,0 +1,6 @@ +country;state;delivery_time +CH;;2 +DE;BW;3 +AT;;4 +EU;;2 + diff --git a/testdaten/2023-11-09T16:10:10+00:00-EU-delivery.csv b/testdaten/2023-11-09T16:10:10+00:00-EU-delivery.csv new file mode 100644 index 0000000..1b0548c --- /dev/null +++ b/testdaten/2023-11-09T16:10:10+00:00-EU-delivery.csv @@ -0,0 +1,6 @@ +country;state;delivery_time +CH;;4 +DE;;5 +AT;;2 +EU;;2 + diff --git a/testdaten/2023-11-09T20:20:17+00:00-AT-stock.csv b/testdaten/2023-11-09T20:20:17+00:00-AT-stock.csv new file mode 100644 index 0000000..03a8bff --- /dev/null +++ b/testdaten/2023-11-09T20:20:17+00:00-AT-stock.csv @@ -0,0 +1,1002 @@ +product_id;quantity +B4910;222 +H8311;333 +N2013;444 +G4591;899 +F6848;438 +T9588;815 +J6244;7777 +V8870;312 +M3603;494 +G4434;871 +W6021;180 +J7896;737 +W2442;277 +L5601;459 +O3101;514 +Y9027;25 +P7761;868 +O5294;836 +J1820;286 +Z9358;545 +J1413;455 +M1739;91 +T1050;396 +L8535;649 +L5703;452 +H3185;971 +V7989;334 +A5388;593 +M8664;307 +I1522;838 +T6604;254 +G6595;499 +L5437;728 +V3215;888 +P7358;704 +V3418;302 +X7291;486 +Q1832;557 +Z3879;280 +K7997;89 +S7814;10 +Q3393;409 +J2019;677 +R8965;429 +N7529;690 +N6523;408 +J2656;2 +O7845;927 +B1118;192 +G4347;115 +D8333;159 +M4454;517 +Q4855;140 +Q2287;521 +Q2387;590 +F5384;624 +J8560;107 +L4273;987 +O1743;329 +V6481;525 +J1755;191 +Z9296;457 +E5355;830 +E1535;934 +N2804;285 +T9536;517 +F9098;341 +L9012;187 +N8456;72 +O4610;232 +P9721;316 +P1737;786 +R7350;821 +E8393;200 +T5004;648 +C8051;11 +P4261;757 +M3140;871 +E5148;169 +D5856;428 +N3470;590 +D3289;996 +B1676;943 +Y3897;849 +P6061;843 +L3229;854 +S9299;220 +E7475;415 +J1080;136 +J9968;190 +R6169;66 +G3714;538 +H2240;211 +A3584;509 +X2756;937 +R2796;944 +O1840;711 +Q9784;301 +W4564;399 +O2755;702 +I4599;731 +J1796;21 +I3516;600 +X8648;523 +I9480;650 +R8183;833 +R8083;996 +Q4382;238 +F9657;772 +I7240;943 +Y8187;258 +V2715;101 +Q4604;690 +L5582;270 +G2848;822 +L2408;681 +X1262;579 +T6243;880 +H4594;745 +O6502;607 +O3667;332 +M9505;721 +U2482;30 +N2576;229 +J1086;167 +L2798;875 +Y5913;296 +D3375;731 +U3843;105 +I9990;665 +H9675;882 +A1759;145 +P8086;572 +M2710;879 +J1212;14 +G1158;178 +O3826;208 +R2320;388 +E6902;40 +X4021;648 +N3108;257 +B4759;191 +B8273;10 +S9179;186 +D8530;9 +R6447;379 +L7769;637 +X8695;243 +C8325;28 +O8351;134 +Q8565;641 +U8027;486 +M3675;726 +E6362;649 +Y8872;645 +A2676;765 +N5821;553 +J3806;710 +W2327;922 +I5608;77 +O9948;148 +K3564;745 +J2936;628 +P9684;642 +B3770;694 +J6702;144 +F6954;324 +U1963;643 +R3046;482 +E2756;346 +Q6499;684 +B3919;355 +Q3325;417 +S2245;957 +G8386;393 +S7636;238 +V5810;587 +F2505;806 +F5637;712 +O1118;324 +S8336;494 +C8356;476 +G9069;555 +L7592;294 +F4201;236 +S9091;140 +A1877;596 +B5577;355 +M4437;579 +P9152;234 +I3568;583 +O4030;551 +F7531;48 +H1894;929 +X6697;620 +E3020;776 +M4263;68 +B3284;459 +W9086;734 +Q8284;151 +Z1890;212 +J9052;199 +J9291;982 +T3645;259 +U1367;803 +Q9486;487 +U4124;268 +B3542;92 +H7620;12 +I6468;977 +L6961;862 +Y7708;832 +V6756;762 +X2630;812 +E2410;745 +K2276;917 +G2030;350 +A9132;588 +K1356;45 +O6719;68 +A4873;299 +T2568;499 +L8295;602 +R6650;427 +E7104;73 +V1592;659 +O3785;992 +F7044;34 +Z9049;396 +N1561;487 +S2036;777 +Q9589;81 +T3577;686 +H3525;780 +W4287;357 +L2356;276 +J5086;829 +O8500;673 +N6875;497 +I1334;503 +I7194;673 +K9337;283 +A5401;373 +V4050;574 +T8465;793 +R1694;71 +K5645;131 +H2962;520 +P2800;464 +B2926;934 +G2555;294 +L1449;596 +S2775;695 +K7890;90 +P8388;839 +X8533;855 +A8843;807 +G9312;411 +V1766;761 +H9637;711 +T8695;14 +R1578;822 +G9225;666 +O1576;908 +Y1895;390 +J7571;471 +I2018;266 +S9583;364 +Y7917;126 +X3181;396 +I2388;41 +S3615;443 +Q5889;533 +C9856;823 +J7253;747 +E9939;264 +Q2597;486 +F1987;161 +Y3912;362 +R6888;338 +D2964;751 +M4727;113 +L5454;988 +N1841;671 +V6999;429 +D3897;713 +K7841;368 +U9628;205 +Z9696;792 +N6123;721 +U6303;611 +J3748;640 +A2956;146 +H9489;874 +P7060;620 +E7683;908 +F2213;791 +A5826;737 +N3003;720 +O6390;340 +C3340;44 +O3169;777 +G4645;485 +F1568;95 +N9921;88 +L8007;876 +F6508;172 +R2879;699 +D5569;231 +L1826;184 +P9973;989 +A6824;485 +C2071;390 +C5333;828 +W9183;453 +M6253;877 +W8084;150 +M2506;197 +Y5181;678 +M5902;286 +N6694;633 +F6785;874 +P4102;61 +O7145;680 +X6642;309 +B1726;802 +M3162;959 +Y4377;648 +Q4864;525 +Q5259;645 +W7044;673 +P4740;747 +O1287;193 +F4570;846 +D2193;838 +W1127;754 +I8149;51 +O5299;489 +F6979;489 +H8266;411 +D8839;765 +V7592;568 +F3973;18 +E4344;681 +G6486;469 +O9591;702 +C7815;563 +P6822;562 +I9945;243 +D7862;32 +I3117;723 +O7336;689 +K7359;758 +Q6267;218 +W7867;400 +S8034;155 +J3736;404 +R1223;160 +P5143;647 +P1213;601 +Q5333;371 +C1647;489 +D3337;956 +K2471;115 +I5855;414 +F5237;66 +G8766;768 +F3935;252 +B4197;638 +M3356;374 +K9452;768 +T6711;17 +W4058;128 +P1298;708 +Z5420;272 +W7614;714 +I8555;530 +M2730;2 +Z6231;103 +K8026;590 +N2969;690 +B5131;467 +Q8333;201 +T1118;380 +H1837;321 +W8784;441 +A4421;213 +W5763;923 +T8118;36 +N2431;924 +O4185;334 +E1194;751 +B7469;572 +J9296;849 +E6902;536 +H2132;496 +T6927;365 +Z3666;575 +K4146;513 +W6987;80 +P4111;337 +W7764;748 +B9653;636 +P1117;362 +D7866;984 +N6925;324 +G4714;405 +I6378;268 +T5661;643 +B5302;273 +R1429;695 +E3257;608 +T8031;76 +R4172;801 +Y5542;641 +Q6128;770 +Z3617;915 +F7292;132 +L8560;649 +K4170;645 +Z8090;699 +L4528;764 +K3879;440 +R4156;700 +Y6762;671 +M1684;963 +B3322;796 +J6254;211 +B1769;564 +P5498;675 +B4877;314 +I2009;883 +L3394;265 +C9606;589 +S3903;759 +L8099;300 +E8029;50 +I4063;92 +S1798;84 +B3892;35 +T2019;121 +H9746;753 +H3292;68 +Z9019;867 +X1819;797 +Y1766;68 +O1950;583 +N3052;499 +I3814;205 +P7661;123 +U8273;196 +F6498;289 +C9045;531 +E6374;608 +Y4031;972 +S3098;398 +J6254;201 +R5153;571 +A8165;776 +I6537;707 +I5244;912 +J4456;315 +D2345;782 +P1988;311 +K9051;330 +R1362;167 +Y6984;524 +K6809;698 +E7819;661 +S1010;283 +C5743;167 +F3784;624 +E5422;728 +U4204;722 +F5356;847 +L5795;458 +K9017;578 +J8970;818 +D1014;772 +M8479;272 +J8943;752 +F5871;73 +Q5631;672 +M1405;932 +X7563;221 +X8535;236 +I8517;81 +F6176;552 +S4108;276 +B1546;973 +X4645;185 +B3776;215 +V4408;918 +Y7656;175 +P3535;3 +W1591;815 +P2788;737 +D8036;966 +X5164;418 +A6053;4 +B1084;444 +D3031;455 +T6367;358 +Q2483;625 +A7949;33 +U9219;144 +T7923;425 +J6880;147 +M6166;897 +M7627;198 +D2989;706 +C1597;345 +P2845;837 +I8307;586 +E1714;756 +E2002;227 +Y9818;171 +M5844;425 +N6908;469 +D9175;943 +I8544;327 +I1467;393 +D2873;779 +N7623;507 +A3505;282 +J6366;921 +T5048;23 +H3549;285 +G2638;348 +N6506;654 +V1789;649 +B1710;927 +S3214;119 +Q6527;918 +Z8088;955 +K5581;195 +I9741;992 +H5581;149 +B1015;667 +J2317;445 +J8518;229 +W9895;434 +W4182;386 +M6479;136 +E6378;555 +O8135;714 +H6400;204 +V9727;108 +G4378;257 +J6294;152 +N8279;86 +J9143;734 +Q4485;317 +V1644;814 +C2162;116 +K4670;546 +X9379;175 +Z6808;22 +I8439;66 +K4904;551 +C9522;868 +T4866;17 +Q8910;65 +Q6459;970 +P1779;525 +J3401;669 +T5388;248 +F5451;41 +B8927;426 +V7232;538 +S3738;607 +H2331;808 +M5458;836 +U6455;75 +N7437;70 +B3849;172 +V4490;680 +C3513;686 +R2843;279 +U5868;623 +T6582;869 +M7123;547 +D8531;94 +C9912;542 +L1809;706 +M7096;447 +Z8576;485 +J4737;685 +Y1683;858 +V1706;306 +H7443;425 +B6001;483 +E3047;888 +O3738;432 +K4019;720 +Z6352;891 +K5316;436 +Q6036;927 +L5152;959 +P4288;186 +R4643;530 +D3246;300 +E9210;622 +G5498;21 +B9955;721 +N7903;361 +M2069;996 +P8344;937 +R8651;811 +G1348;50 +Y1708;859 +A4589;398 +A2207;274 +Q3983;676 +V9138;509 +F5330;240 +B9300;865 +D4616;365 +J8153;785 +B5437;107 +S8722;358 +C4768;700 +M2964;309 +C6866;42 +C9854;290 +N4140;704 +L5260;99 +M3041;943 +H2949;909 +C9592;897 +G9280;629 +G8841;905 +A6882;951 +L5680;296 +T5335;23 +J1237;831 +Z5275;670 +M4038;38 +H2926;606 +W5342;267 +R7982;766 +A5435;216 +U3171;111 +P3288;669 +K5964;934 +C3958;971 +Z6355;52 +Y4607;590 +C4394;372 +W2690;338 +O4866;432 +E5120;18 +A6490;747 +Z9979;491 +C9570;134 +V8466;584 +Q1053;496 +Y2861;566 +Y9308;694 +Z3491;825 +G8442;363 +S3600;997 +S5276;479 +P9466;165 +K2596;213 +B8482;951 +S6188;751 +F9125;139 +N9744;767 +K7718;923 +U4070;788 +D3565;43 +R4324;536 +E9093;71 +Q5638;894 +F5566;896 +I9567;909 +C9764;296 +P5705;816 +H9557;289 +G2568;918 +D9331;157 +V4772;473 +B1695;436 +L2685;739 +K3558;77 +D5359;85 +Z7687;833 +G5556;715 +D5226;608 +T7733;119 +G3381;771 +K2477;365 +R7055;351 +E7783;846 +A4003;299 +L8161;92 +A9177;43 +E6899;790 +Z8068;509 +T4084;213 +U7086;524 +G4373;497 +S8531;307 +K6893;321 +I4636;463 +J6616;685 +Q9753;744 +P9938;472 +C5722;745 +F4256;973 +L4736;464 +H5791;739 +M2403;815 +B2279;375 +L5600;178 +B3989;401 +S6691;78 +G2468;233 +K4815;438 +L9479;46 +G5311;824 +J7732;33 +W2215;485 +F4693;935 +E7903;525 +Z2397;145 +D4265;997 +P7343;427 +K7512;699 +M2297;98 +C3267;379 +Q6904;309 +K6613;798 +V8331;412 +L8057;511 +W7848;441 +M3879;933 +T9344;289 +C6248;509 +I8183;651 +J9729;686 +S8644;802 +S4659;549 +L1065;895 +F7552;404 +X2980;45 +N8648;452 +C9050;931 +T9874;211 +U2358;71 +J1750;358 +J6992;983 +K8838;113 +A9388;884 +F9827;923 +D5508;515 +Y2473;281 +P2879;645 +Y6548;129 +F5993;955 +L9220;127 +A5765;379 +Z7397;930 +Q9145;717 +Q1316;971 +K2467;246 +Q7756;674 +R3228;997 +N2414;173 +C3142;368 +X7172;805 +Y7599;710 +F4831;879 +F1383;689 +V2718;541 +G5056;631 +Q9757;318 +W9911;323 +Z6755;890 +P9643;176 +H9178;680 +I1278;515 +A2026;442 +E7049;724 +K6711;598 +T8235;568 +K9720;374 +P6595;778 +Z7071;420 +Z1938;25 +P7630;285 +Z5679;91 +O8450;104 +C4284;484 +X7308;213 +O7865;286 +L3171;437 +C3064;972 +X7396;953 +V8522;614 +Y6624;789 +U2388;653 +K7001;101 +U8314;613 +Y2195;740 +H1174;165 +U7605;797 +Z4079;942 +Z9684;864 +Y1633;921 +W5429;427 +R3595;869 +M4214;689 +X5326;228 +I4796;383 +V5825;258 +J6578;442 +O2647;958 +I8764;258 +S9912;110 +W7983;945 +U6669;298 +L2975;727 +S2427;395 +G3331;544 +N9261;537 +A9129;341 +Z5126;94 +L4945;114 +V8332;561 +C9647;224 +I3911;755 +U9881;192 +P7832;316 +C5037;451 +W6817;724 +K4066;708 +F3257;790 +W4500;515 +G3965;670 +U5434;82 +J8288;221 +B9797;9 +A9572;806 +S9639;575 +S7745;187 +C9284;228 +B9109;512 +W3634;339 +P9658;230 +F8581;81 +K3716;300 +U4537;511 +P9394;739 +N1688;617 +H8364;27 +V3330;655 +P1567;262 +F6461;774 +X3436;356 +S8350;305 +T9121;946 +E6209;376 +T9932;719 +L2561;517 +B3328;426 +W5522;465 +H5845;826 +M6283;369 +S1786;828 +X3686;174 +P1272;535 +T6202;808 +Z9401;715 +V4233;446 +B4772;137 +B6892;5 +X5562;977 +S5456;484 +M6643;306 +M4394;601 +T8765;701 +A9002;581 +I2839;693 +Q1752;826 +V9990;307 +C6760;28 +A6464;809 +C6394;688 +W9808;806 +G7338;452 +V5189;531 +U8308;994 +O1395;987 +B8503;104 +V6794;592 +I2568;146 +Q2313;16 +E6737;287 +B2767;657 +T9390;260 +C1606;746 +M7904;106 +C1755;516 +J9013;362 +M2456;457 +T5906;926 +A6030;457 +R7144;663 +H9577;60 +B1329;336 +D2931;425 +Y5991;701 +M2744;319 +I7755;507 +M8863;325 +L3051;4 +U9296;851 +C9441;230 +E1626;830 +R4984;229 +D5961;622 +X5455;159 +B7564;534 +S3178;700 +R9529;991 +J5552;590 +F5410;789 +H2278;567 +D1481;601 +B6278;427 +C1552;694 +T1062;794 +H6394;832 +B6342;963 +D9301;898 +X4638;792 +J9572;160 +A4840;758 +M5388;554 +A4547;803 +W8132;924 +L4055;490 +I5501;505 +W9225;175 +Z6130;384 +N9534;473 +J7283;777 +I3221;196 +N2712;977 +U7513;304 +W4735;146 +D3662;283 +I8922;68 +M9487;213 +O7968;701 +N5623;181 +T3485;599 +O3454;179 +H1954;884 +P8069;160 +I3819;121 +L7100;675 +K5934;268 +F5842;865 +S2183;403 +C3916;222 +A3802;885 +F5783;440 +D7529;345 +R5285;458 +P7195;187 +C2321;30 +D4711;693 +W8418;245 +N7086;391 +L8373;311 +B6837;966 +O8409;901 +C8370;247 +L4741;567 +S4303;823 +L3040;612 +B7519;177 +T8770;307 +I1929;246 +Z7574;782 +D1577;231 +Z8423;13 +D7035;205 +H6979;511 +K4325;973 +O9794;27 +K1633;964 +Z2231;711 +Z9085;220 +E5022;220 +M8687;777 +R8696;111 +Y8639;88 diff --git a/testdaten/2023-11-09T20:20:17+00:00-DE-stock.csv b/testdaten/2023-11-09T20:20:17+00:00-DE-stock.csv new file mode 100644 index 0000000..60e3862 --- /dev/null +++ b/testdaten/2023-11-09T20:20:17+00:00-DE-stock.csv @@ -0,0 +1,1002 @@ +product_id;quantity +B4910;222 +H8311;333 +N2013;444 +G4591;899 +F6848;438 +T9588;815 +J6244;7777 +V8870;312 +M3603;494 +G4434;871 +W6021;180 +J7896;737 +W2442;277 +L5601;459 +O3101;514 +Y9027;25 +P7761;868 +O5294;836 +J1820;286 +Z9358;545 +J1413;455 +M1739;91 +T1050;396 +L8535;649 +L5703;452 +H3185;971 +V7989;334 +A5388;593 +M8664;307 +I1522;838 +T6604;254 +G6595;499 +L5437;728 +V3215;888 +P7358;704 +V3418;302 +X7291;486 +Q1832;557 +Z3879;280 +K7997;89 +S7814;10 +Q3393;409 +J2019;677 +R8965;429 +N7529;690 +N6523;408 +J2656;2 +O7845;927 +B1118;192 +G4347;115 +D8333;159 +M4454;517 +Q4855;140 +Q2287;521 +Q2387;590 +F5384;624 +J8560;107 +L4273;987 +O1743;329 +V6481;525 +J1755;191 +Z9296;457 +E5355;830 +E1535;934 +N2804;285 +T9536;517 +F9098;341 +L9012;187 +N8456;72 +O4610;232 +P9721;316 +P1737;786 +R7350;821 +E8393;200 +T5004;648 +C8051;11 +P4261;757 +M3140;871 +E5148;169 +D5856;428 +N3470;590 +D3289;996 +B1676;943 +Y3897;849 +P6061;843 +L3229;854 +S9299;220 +E7475;415 +J1080;136 +J9968;190 +R6169;66 +G3714;538 +H2240;211 +A3584;509 +X2756;937 +R2796;944 +O1840;711 +Q9784;301 +W4564;399 +O2755;702 +I4599;731 +J1796;21 +I3516;600 +X8648;523 +I9480;650 +R8183;833 +R8083;996 +Q4382;238 +F9657;772 +I7240;943 +Y8187;258 +V2715;101 +Q4604;690 +L5582;270 +G2848;822 +L2408;681 +X1262;579 +T6243;880 +H4594;745 +O6502;607 +O3667;332 +M9505;721 +U2482;30 +N2576;229 +J1086;167 +L2798;875 +Y5913;296 +D3375;731 +U3843;105 +I9990;665 +H9675;882 +A1759;145 +P8086;572 +M2710;879 +J1212;14 +G1158;178 +O3826;208 +R2320;388 +E6902;40 +X4021;648 +N3108;257 +B4759;191 +B8273;10 +S9179;186 +D8530;9 +R6447;379 +L7769;637 +X8695;243 +C8325;28 +O8351;134 +Q8565;641 +U8027;486 +M3675;726 +E6362;649 +Y8872;645 +A2676;765 +N5821;553 +J3806;710 +W2327;922 +I5608;77 +O9948;148 +K3564;745 +J2936;628 +P9684;642 +B3770;694 +J6702;144 +F6954;324 +U1963;643 +R3046;482 +E2756;346 +Q6499;684 +B3919;355 +Q3325;417 +S2245;957 +G8386;393 +S7636;238 +V5810;587 +F2505;806 +F5637;712 +O1118;324 +S8336;494 +C8356;476 +G9069;555 +L7592;294 +F4201;236 +S9091;140 +A1877;596 +B5577;355 +M4437;579 +P9152;234 +I3568;583 +O4030;551 +F7531;48 +H1894;929 +X6697;620 +E3020;776 +M4263;68 +B3284;459 +W9086;734 +Q8284;151 +Z1890;212 +J9052;199 +J9291;982 +T3645;259 +U1367;803 +Q9486;487 +U4124;268 +B3542;92 +H7620;12 +I6468;977 +L6961;862 +Y7708;832 +V6756;762 +X2630;812 +E2410;745 +K2276;917 +G2030;350 +A9132;588 +K1356;45 +O6719;68 +A4873;299 +T2568;499 +L8295;602 +R6650;427 +E7104;73 +V1592;659 +O3785;992 +F7044;34 +Z9049;396 +N1561;487 +S2036;777 +Q9589;81 +T3577;686 +H3525;780 +W4287;357 +L2356;276 +J5086;829 +O8500;673 +N6875;497 +I1334;503 +I7194;673 +K9337;283 +A5401;373 +V4050;574 +T8465;793 +R1694;71 +K5645;131 +H2962;520 +P2800;464 +B2926;934 +G2555;294 +L1449;596 +S2775;695 +K7890;90 +P8388;839 +X8533;855 +A8843;807 +G9312;411 +V1766;761 +H9637;711 +T8695;14 +R1578;822 +G9225;666 +O1576;908 +Y1895;390 +J7571;471 +I2018;266 +S9583;364 +Y7917;126 +X3181;396 +I2388;41 +S3615;443 +Q5889;533 +C9856;823 +J7253;747 +E9939;264 +Q2597;486 +F1987;161 +Y3912;362 +R6888;338 +D2964;751 +M4727;113 +L5454;988 +N1841;671 +V6999;429 +D3897;713 +K7841;368 +U9628;205 +Z9696;792 +N6123;721 +U6303;611 +J3748;640 +A2956;146 +H9489;874 +P7060;620 +E7683;908 +F2213;791 +A5826;737 +N3003;720 +O6390;340 +C3340;44 +O3169;777 +G4645;485 +F1568;95 +N9921;88 +L8007;876 +F6508;172 +R2879;699 +D5569;231 +L1826;184 +P9973;989 +A6824;485 +C2071;390 +C5333;828 +W9183;453 +M6253;877 +W8084;150 +M2506;197 +Y5181;678 +M5902;286 +N6694;633 +F6785;874 +P4102;61 +O7145;680 +X6642;309 +B1726;802 +M3162;959 +Y4377;648 +Q4864;525 +Q5259;645 +W7044;673 +P4740;747 +O1287;193 +F4570;846 +D2193;838 +W1127;754 +I8149;51 +O5299;489 +F6979;489 +H8266;411 +D8839;765 +V7592;568 +F3973;18 +E4344;681 +G6486;469 +O9591;702 +C7815;563 +P6822;562 +I9945;243 +D7862;32 +I3117;723 +O7336;689 +K7359;758 +Q6267;218 +W7867;400 +S8034;155 +J3736;404 +R1223;160 +P5143;647 +P1213;601 +Q5333;371 +C1647;489 +D3337;956 +K2471;115 +I5855;414 +F5237;66 +G8766;768 +F3935;252 +B4197;638 +M3356;374 +K9452;768 +T6711;17 +W4058;128 +P1298;708 +Z5420;272 +W7614;714 +I8555;530 +M2730;2 +Z6231;103 +K8026;590 +N2969;690 +B5131;467 +Q8333;201 +T1118;380 +H1837;321 +W8784;441 +A4421;213 +W5763;923 +T8118;36 +N2431;924 +O4185;334 +E1194;751 +B7469;572 +J9296;849 +E6902;536 +H2132;496 +T6927;365 +Z3666;575 +K4146;513 +W6987;80 +P4111;337 +W7764;748 +B9653;636 +P1117;362 +D7866;984 +N6925;324 +G4714;405 +I6378;268 +T5661;643 +B5302;273 +R1429;695 +E3257;608 +T8031;76 +R4172;801 +Y5542;641 +Q6128;770 +Z3617;915 +F7292;132 +L8560;649 +K4170;645 +Z8090;699 +L4528;764 +K3879;440 +R4156;700 +Y6762;671 +M1684;963 +B3322;796 +J6254;211 +B1769;564 +P5498;675 +B4877;314 +I2009;883 +L3394;265 +C9606;589 +S3903;759 +L8099;300 +E8029;50 +I4063;92 +S1798;84 +B3892;35 +T2019;121 +H9746;753 +H3292;68 +Z9019;867 +X1819;797 +Y1766;68 +O1950;583 +N3052;499 +I3814;205 +P7661;123 +U8273;196 +F6498;289 +C9045;531 +E6374;608 +Y4031;972 +S3098;398 +J6254;201 +R5153;571 +A8165;776 +I6537;707 +I5244;912 +J4456;315 +D2345;782 +P1988;311 +K9051;330 +R1362;167 +Y6984;524 +K6809;698 +E7819;661 +S1010;283 +C5743;167 +F3784;624 +E5422;728 +U4204;722 +F5356;847 +L5795;458 +K9017;578 +J8970;818 +D1014;772 +M8479;272 +J8943;752 +F5871;73 +Q5631;672 +M1405;932 +X7563;221 +X8535;236 +I8517;81 +F6176;552 +S4108;276 +B1546;973 +X4645;185 +B3776;215 +V4408;918 +Y7656;175 +P3535;3 +W1591;815 +P2788;737 +D8036;966 +X5164;418 +A6053;23 +B1084;444 +D3031;455 +T6367;358 +Q2483;625 +A7949;33 +U9219;144 +T7923;425 +J6880;147 +M6166;897 +M7627;198 +D2989;706 +C1597;345 +P2845;837 +I8307;586 +E1714;756 +E2002;227 +Y9818;171 +M5844;425 +N6908;469 +D9175;943 +I8544;327 +I1467;393 +D2873;779 +N7623;507 +A3505;282 +J6366;921 +T5048;23 +H3549;285 +G2638;348 +N6506;654 +V1789;649 +B1710;927 +S3214;119 +Q6527;918 +Z8088;955 +K5581;195 +I9741;992 +H5581;149 +B1015;667 +J2317;445 +J8518;229 +W9895;434 +W4182;386 +M6479;136 +E6378;555 +O8135;714 +H6400;204 +V9727;108 +G4378;257 +J6294;152 +N8279;86 +J9143;734 +Q4485;317 +V1644;814 +C2162;116 +K4670;546 +X9379;175 +Z6808;22 +I8439;66 +K4904;551 +C9522;868 +T4866;17 +Q8910;65 +Q6459;970 +P1779;525 +J3401;669 +T5388;248 +F5451;41 +B8927;426 +V7232;538 +S3738;607 +H2331;808 +M5458;836 +U6455;75 +N7437;70 +B3849;172 +V4490;680 +C3513;686 +R2843;279 +U5868;623 +T6582;869 +M7123;547 +D8531;94 +C9912;542 +L1809;706 +M7096;447 +Z8576;485 +J4737;685 +Y1683;858 +V1706;306 +H7443;425 +B6001;483 +E3047;888 +O3738;432 +K4019;720 +Z6352;891 +K5316;436 +Q6036;927 +L5152;959 +P4288;186 +R4643;530 +D3246;300 +E9210;622 +G5498;21 +B9955;721 +N7903;361 +M2069;996 +P8344;937 +R8651;811 +G1348;50 +Y1708;859 +A4589;398 +A2207;274 +Q3983;676 +V9138;509 +F5330;240 +B9300;865 +D4616;365 +J8153;785 +B5437;107 +S8722;358 +C4768;700 +M2964;309 +C6866;42 +C9854;290 +N4140;704 +L5260;99 +M3041;943 +H2949;909 +C9592;897 +G9280;629 +G8841;905 +A6882;951 +L5680;296 +T5335;23 +J1237;831 +Z5275;670 +M4038;38 +H2926;606 +W5342;267 +R7982;766 +A5435;216 +U3171;111 +P3288;669 +K5964;934 +C3958;971 +Z6355;52 +Y4607;590 +C4394;372 +W2690;338 +O4866;432 +E5120;18 +A6490;747 +Z9979;491 +C9570;134 +V8466;584 +Q1053;496 +Y2861;566 +Y9308;694 +Z3491;825 +G8442;363 +S3600;997 +S5276;479 +P9466;165 +K2596;213 +B8482;951 +S6188;751 +F9125;139 +N9744;767 +K7718;923 +U4070;788 +D3565;43 +R4324;536 +E9093;71 +Q5638;894 +F5566;896 +I9567;909 +C9764;296 +P5705;816 +H9557;289 +G2568;918 +D9331;157 +V4772;473 +B1695;436 +L2685;739 +K3558;77 +D5359;85 +Z7687;833 +G5556;715 +D5226;608 +T7733;119 +G3381;771 +K2477;365 +R7055;351 +E7783;846 +A4003;299 +L8161;92 +A9177;43 +E6899;790 +Z8068;509 +T4084;213 +U7086;524 +G4373;497 +S8531;307 +K6893;321 +I4636;463 +J6616;685 +Q9753;744 +P9938;472 +C5722;745 +F4256;973 +L4736;464 +H5791;739 +M2403;815 +B2279;375 +L5600;178 +B3989;401 +S6691;78 +G2468;233 +K4815;438 +L9479;46 +G5311;824 +J7732;33 +W2215;485 +F4693;935 +E7903;525 +Z2397;145 +D4265;997 +P7343;427 +K7512;699 +M2297;98 +C3267;379 +Q6904;309 +K6613;798 +V8331;412 +L8057;511 +W7848;441 +M3879;933 +T9344;289 +C6248;509 +I8183;651 +J9729;686 +S8644;802 +S4659;549 +L1065;895 +F7552;404 +X2980;45 +N8648;452 +C9050;931 +T9874;211 +U2358;71 +J1750;358 +J6992;983 +K8838;113 +A9388;884 +F9827;923 +D5508;515 +Y2473;281 +P2879;645 +Y6548;129 +F5993;955 +L9220;127 +A5765;379 +Z7397;930 +Q9145;717 +Q1316;971 +K2467;246 +Q7756;674 +R3228;997 +N2414;173 +C3142;368 +X7172;805 +Y7599;710 +F4831;879 +F1383;689 +V2718;541 +G5056;631 +Q9757;318 +W9911;323 +Z6755;890 +P9643;176 +H9178;680 +I1278;515 +A2026;442 +E7049;724 +K6711;598 +T8235;568 +K9720;374 +P6595;778 +Z7071;420 +Z1938;25 +P7630;285 +Z5679;91 +O8450;104 +C4284;484 +X7308;213 +O7865;286 +L3171;437 +C3064;972 +X7396;953 +V8522;614 +Y6624;789 +U2388;653 +K7001;101 +U8314;613 +Y2195;740 +H1174;165 +U7605;797 +Z4079;942 +Z9684;864 +Y1633;921 +W5429;427 +R3595;869 +M4214;689 +X5326;228 +I4796;383 +V5825;258 +J6578;442 +O2647;958 +I8764;258 +S9912;110 +W7983;945 +U6669;298 +L2975;727 +S2427;395 +G3331;544 +N9261;537 +A9129;341 +Z5126;94 +L4945;114 +V8332;561 +C9647;224 +I3911;755 +U9881;192 +P7832;316 +C5037;451 +W6817;724 +K4066;708 +F3257;790 +W4500;515 +G3965;670 +U5434;82 +J8288;221 +B9797;9 +A9572;806 +S9639;575 +S7745;187 +C9284;228 +B9109;512 +W3634;339 +P9658;230 +F8581;81 +K3716;300 +U4537;511 +P9394;739 +N1688;617 +H8364;27 +V3330;655 +P1567;262 +F6461;774 +X3436;356 +S8350;305 +T9121;946 +E6209;376 +T9932;719 +L2561;517 +B3328;426 +W5522;465 +H5845;826 +M6283;369 +S1786;828 +X3686;174 +P1272;535 +T6202;808 +Z9401;715 +V4233;446 +B4772;137 +B6892;5 +X5562;977 +S5456;484 +M6643;306 +M4394;601 +T8765;701 +A9002;581 +I2839;693 +Q1752;826 +V9990;307 +C6760;28 +A6464;809 +C6394;688 +W9808;806 +G7338;452 +V5189;531 +U8308;994 +O1395;987 +B8503;104 +V6794;592 +I2568;146 +Q2313;16 +E6737;287 +B2767;657 +T9390;260 +C1606;746 +M7904;106 +C1755;516 +J9013;362 +M2456;457 +T5906;926 +A6030;457 +R7144;663 +H9577;60 +B1329;336 +D2931;425 +Y5991;701 +M2744;319 +I7755;507 +M8863;325 +L3051;4 +U9296;851 +C9441;230 +E1626;830 +R4984;229 +D5961;622 +X5455;159 +B7564;534 +S3178;700 +R9529;991 +J5552;590 +F5410;789 +H2278;567 +D1481;601 +B6278;427 +C1552;694 +T1062;794 +H6394;832 +B6342;963 +D9301;898 +X4638;792 +J9572;160 +A4840;758 +M5388;554 +A4547;803 +W8132;924 +L4055;490 +I5501;505 +W9225;175 +Z6130;384 +N9534;473 +J7283;777 +I3221;196 +N2712;977 +U7513;304 +W4735;146 +D3662;283 +I8922;68 +M9487;213 +O7968;701 +N5623;181 +T3485;599 +O3454;179 +H1954;884 +P8069;160 +I3819;121 +L7100;675 +K5934;268 +F5842;865 +S2183;403 +C3916;222 +A3802;885 +F5783;440 +D7529;345 +R5285;458 +P7195;187 +C2321;30 +D4711;693 +W8418;245 +N7086;391 +L8373;311 +B6837;966 +O8409;901 +C8370;247 +L4741;567 +S4303;823 +L3040;612 +B7519;177 +T8770;307 +I1929;246 +Z7574;782 +D1577;231 +Z8423;13 +D7035;205 +H6979;511 +K4325;973 +O9794;27 +K1633;964 +Z2231;711 +Z9085;220 +E5022;220 +M8687;777 +R8696;111 +Y8639;88 diff --git a/processed/2023-11-09T20:20:17+00:00-EU-stock.csv b/testdaten/2023-11-09T20:20:17+00:00-EU-stock.csv similarity index 100% rename from processed/2023-11-09T20:20:17+00:00-EU-stock.csv rename to testdaten/2023-11-09T20:20:17+00:00-EU-stock.csv