diff --git a/buildtime/database/init.sql b/buildtime/database/init.sql index ea5b0e0a3..17c1d0eff 100644 --- a/buildtime/database/init.sql +++ b/buildtime/database/init.sql @@ -30,7 +30,7 @@ CREATE TABLE IF NOT EXISTS propertyTypes( id BIGINT PRIMARY KEY DEFAULT nextval('global_id_seq'), label TEXT, description TEXT, - propertyGroupId BIGINT + propertyTypeGroupId BIGINT ); -- PropertyTypeGroupTable diff --git a/buildtime/server/examples/household_example/productGroups.json b/buildtime/server/examples/household_example/productGroups.json index b55e3aac3..9fb78fd09 100644 --- a/buildtime/server/examples/household_example/productGroups.json +++ b/buildtime/server/examples/household_example/productGroups.json @@ -1,4 +1,5 @@ -{ +[{ + "id": 1000007, "label": "Simply CPQ", "description": "Product groups for Simply CPQ", "productGroups": [ @@ -7,7 +8,7 @@ "description": "All products", "productGroups": [ { - "label": "HIFI", + "label": "Radio", "description": "All HIFI products", "products": [ { @@ -16,16 +17,16 @@ "label": "RAD-001", "description": "Kompakter UKW‑Radio mit stabilem Metallgehäuse, ideal für das Schlafzimmer oder Büro.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 0 }, - { "property": "Ausgangsimpedanz (Ω)", "value": 75 }, - { "property": "Eingangsimpedanz (Ω)", "value": 10 }, - { "property": "Gewicht (kg)", "value": 2 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "0" }, + { "property": "Ausgangsimpedanz (Ω)", "value": "75" }, + { "property": "Eingangsimpedanz (Ω)", "value": "10" }, + { "property": "Gewicht (kg)", "value": "2" }, { "property": "Abmessungen (mm)", "value": "150x80x30" }, { "property": "Frequenzbereich (Hz‑kHz)", "value": "87‑108" }, - { "property": "Signal‑Rausch‑Verhältnis (dB)", "value": 45 }, + { "property": "Signal‑Rausch‑Verhältnis (dB)", "value": "45" }, { "property": "Anschlüsse", "value": "UKW" }, - { "property": "Preis (USD)", "value": 120 } + { "property": "Preis (USD)", "value": "120" } ] }, { @@ -34,17 +35,17 @@ "label": "RAD-002", "description": "Radio mit digitalem Tuner und DAB‑Empfang, liefert kristallklaren Klang und einfache Programmwahl.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 0 }, - { "property": "Ausgangsimpedanz (Ω)", "value": 75 }, - { "property": "Eingangsimpedanz (Ω)", "value": 10 }, - { "property": "Gewicht (kg)", "value": 2 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "0" }, + { "property": "Ausgangsimpedanz (Ω)", "value": "75" }, + { "property": "Eingangsimpedanz (Ω)", "value": "10" }, + { "property": "Gewicht (kg)", "value": "2" }, { "property": "Abmessungen (mm)", "value": "155x85x32" }, { "property": "Frequenzbereich (Hz‑kHz)", "value": "87‑108" }, - { "property": "Signal‑Rausch‑Verhältnis (dB)", "value": 48 }, + { "property": "Signal‑Rausch‑Verhältnis (dB)", "value": "48" }, { "property": "Anschlüsse", "value": "UKW+DL" }, - { "property": "Preis (USD)", "value": 135 } - ] + { "property": "Preis (USD)", "value": "135" } + ] }, { "externalId": "Radio_RAD-003", @@ -52,16 +53,16 @@ "label": "RAD-003", "description": "Bluetooth‑fähiges Radio, das sich nahtlos mit Smartphones verbindet – Streamen Sie Ihre Lieblingssender.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 0 }, - { "property": "Ausgangsimpedanz (Ω)", "value": 75 }, - { "property": "Eingangsimpedanz (Ω)", "value": 10 }, - { "property": "Gewicht (kg)", "value": 2 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "0" }, + { "property": "Ausgangsimpedanz (Ω)", "value": "75" }, + { "property": "Eingangsimpedanz (Ω)", "value": "10" }, + { "property": "Gewicht (kg)", "value": "2" }, { "property": "Abmessungen (mm)", "value": "158x88x33" }, { "property": "Frequenzbereich (Hz‑kHz)", "value": "87‑108" }, - { "property": "Signal‑Rausch‑Verhältnis (dB)", "value": 46 }, + { "property": "Signal‑Rausch‑Verhältnis (dB)", "value": "46" }, { "property": "Anschlüsse", "value": "UKW+Bluetooth" }, - { "property": "Preis (USD)", "value": 150 } + { "property": "Preis (USD)", "value": "150" } ] }, { @@ -70,16 +71,16 @@ "label": "RAD-004", "description": "Wi‑Fi‑Radio mit App‑Steuerung, lässt sich über das Smartphone konfigurieren.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 0 }, - { "property": "Ausgangsimpedanz (Ω)", "value": 75 }, - { "property": "Eingangsimpedanz (Ω)", "value": 10 }, - { "property": "Gewicht (kg)", "value": 2 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "0" }, + { "property": "Ausgangsimpedanz (Ω)", "value": "75" }, + { "property": "Eingangsimpedanz (Ω)", "value": "10" }, + { "property": "Gewicht (kg)", "value": "2" }, { "property": "Abmessungen (mm)", "value": "160x90x35" }, { "property": "Frequenzbereich (Hz‑kHz)", "value": "87‑108" }, - { "property": "Signal‑Rausch‑Verhältnis (dB)", "value": 47 }, + { "property": "Signal‑Rausch‑Verhältnis (dB)", "value": "47" }, { "property": "Anschlüsse", "value": "UKW+Wi‑Fi" }, - { "property": "Preis (USD)", "value": 165 } + { "property": "Preis (USD)", "value": "165" } ] }, { @@ -87,16 +88,16 @@ "productGroupLabel": "Radio", "label": "RAD-005", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 0 }, - { "property": "Ausgangsimpedanz (Ω)", "value": 75 }, - { "property": "Eingangsimpedanz (Ω)", "value": 10 }, - { "property": "Gewicht (kg)", "value": 2 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "0" }, + { "property": "Ausgangsimpedanz (Ω)", "value": "75" }, + { "property": "Eingangsimpedanz (Ω)", "value": "10" }, + { "property": "Gewicht (kg)", "value": "2" }, { "property": "Abmessungen (mm)", "value": "162x92x36" }, { "property": "Frequenzbereich (Hz‑kHz)", "value": "87‑108" }, - { "property": "Signal‑Rausch‑Verhältnis (dB)", "value": 44 }, + { "property": "Signal‑Rausch‑Verhältnis (dB)", "value": "44" }, { "property": "Anschlüsse", "value": "UKW+DL+Bluetooth" }, - { "property": "Preis (USD)", "value": 180 } + { "property": "Preis (USD)", "value": "180" } ], "description": "Vielseitiger Empfänger mit DAB, DL und Bluetooth – alle gängigen Hörquellen in einem Gerät." }, @@ -105,16 +106,16 @@ "productGroupLabel": "Radio", "label": "RAD-006", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 0 }, - { "property": "Ausgangsimpedanz (Ω)", "value": 75 }, - { "property": "Eingangsimpedanz (Ω)", "value": 10 }, - { "property": "Gewicht (kg)", "value": 2 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "0" }, + { "property": "Ausgangsimpedanz (Ω)", "value": "75" }, + { "property": "Eingangsimpedanz (Ω)", "value": "10" }, + { "property": "Gewicht (kg)", "value": "2" }, { "property": "Abmessungen (mm)", "value": "165x95x38" }, { "property": "Frequenzbereich (Hz‑kHz)", "value": "87‑108" }, - { "property": "Signal‑Rausch‑Verhältnis (dB)", "value": 49 }, + { "property": "Signal‑Rausch‑Verhältnis (dB)", "value": "49" }, { "property": "Anschlüsse", "value": "UKW+Wi‑Fi+DL" }, - { "property": "Preis (USD)", "value": 195 } + { "property": "Preis (USD)", "value": "195" } ], "description": "Kombiniert WLAN‑Streaming, DAB‑Radio und klassische UKW‑Tuner in einem kompakten Gehäuse." }, @@ -123,16 +124,16 @@ "productGroupLabel": "Radio", "label": "RAD-007", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 0 }, - { "property": "Ausgangsimpedanz (Ω)", "value": 75 }, - { "property": "Eingangsimpedanz (Ω)", "value": 10 }, - { "property": "Gewicht (kg)", "value": 2 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "0" }, + { "property": "Ausgangsimpedanz (Ω)", "value": "75" }, + { "property": "Eingangsimpedanz (Ω)", "value": "10" }, + { "property": "Gewicht (kg)", "value": "2" }, { "property": "Abmessungen (mm)", "value": "168x98x40" }, { "property": "Frequenzbereich (Hz‑kHz)", "value": "87‑108" }, - { "property": "Signal‑Rausch‑Verhältnis (dB)", "value": 45 }, + { "property": "Signal‑Rausch‑Verhältnis (dB)", "value": "45" }, { "property": "Anschlüsse", "value": "UKW+Bluetooth+Wi‑Fi" }, - { "property": "Preis (USD)", "value": 210 } + { "property": "Preis (USD)", "value": "210" } ], "description": "Premium‑Radio, das gleichzeitig Bluetooth‑ und Wi‑Fi‑Streams verarbeiten kann." }, @@ -141,16 +142,16 @@ "productGroupLabel": "Radio", "label": "RAD-008", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 0 }, - { "property": "Ausgangsimpedanz (Ω)", "value": 75 }, - { "property": "Eingangsimpedanz (Ω)", "value": 10 }, - { "property": "Gewicht (kg)", "value": 2 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "0" }, + { "property": "Ausgangsimpedanz (Ω)", "value": "75" }, + { "property": "Eingangsimpedanz (Ω)", "value": "10" }, + { "property": "Gewicht (kg)", "value": "2" }, { "property": "Abmessungen (mm)", "value": "170x100x42" }, { "property": "Frequenzbereich (Hz‑kHz)", "value": "87‑108" }, - { "property": "Signal‑Rausch‑Verhältnis (dB)", "value": 47 }, + { "property": "Signal‑Rausch‑Verhältnis (dB)", "value": "47" }, { "property": "Anschlüsse", "value": "UKW+DL+Bluetooth" }, - { "property": "Preis (USD)", "value": 225 } + { "property": "Preis (USD)", "value": "225" } ], "description": "Digital‑ und Analog‑Radio mit hervorragender Signal‑Stabilität und Bluetooth‑Ausgabe." }, @@ -159,16 +160,16 @@ "productGroupLabel": "Radio", "label": "RAD-009", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 0 }, - { "property": "Ausgangsimpedanz (Ω)", "value": 75 }, - { "property": "Eingangsimpedanz (Ω)", "value": 10 }, - { "property": "Gewicht (kg)", "value": 2 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "0" }, + { "property": "Ausgangsimpedanz (Ω)", "value": "75" }, + { "property": "Eingangsimpedanz (Ω)", "value": "10" }, + { "property": "Gewicht (kg)", "value": "2" }, { "property": "Abmessungen (mm)", "value": "172x102x44" }, { "property": "Frequenzbereich (Hz‑kHz)", "value": "87‑108" }, - { "property": "Signal‑Rausch‑Verhältnis (dB)", "value": 46 }, + { "property": "Signal‑Rausch‑Verhältnis (dB)", "value": "46" }, { "property": "Anschlüsse", "value": "UKW+Wi‑Fi+DL" }, - { "property": "Preis (USD)", "value": 240 } + { "property": "Preis (USD)", "value": "240" } ], "description": "Ideal für smarte Haushalte: WLAN‑Stream, DAB‑Radio und klassische UKW‑Begriffe." }, @@ -177,35 +178,39 @@ "productGroupLabel": "Radio", "label": "RAD-010", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 0 }, - { "property": "Ausgangsimpedanz (Ω)", "value": 75 }, - { "property": "Eingangsimpedanz (Ω)", "value": 10 }, - { "property": "Gewicht (kg)", "value": 2 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "0" }, + { "property": "Ausgangsimpedanz (Ω)", "value": "75" }, + { "property": "Eingangsimpedanz (Ω)", "value": "10" }, + { "property": "Gewicht (kg)", "value": "2" }, { "property": "Abmessungen (mm)", "value": "175x105x46" }, { "property": "Frequenzbereich (Hz‑kHz)", "value": "87‑108" }, - { "property": "Signal‑Rausch‑Verhältnis (dB)", "value": 48 }, + { "property": "Signal‑Rausch‑Verhältnis (dB)", "value": "48" }, { "property": "Anschlüsse", "value": "UKW+Bluetooth+DL" }, - { "property": "Preis (USD)", "value": 255 } + { "property": "Preis (USD)", "value": "255" } ], "description": "Hochwertiges All‑In‑One‑Radio mit Komfort‑Steuerung per Fernbedienung." - }, - + }] + }, + { + "label": "Kassette", + "description": "All Kassette products", + "products": [ { "externalId": "Kassette_CAS-001", "productGroupLabel": "Kassette", "label": "CAS-001", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 20 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "20" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "300x200x100" }, - { "property": "Gewicht (kg)", "value": 4 }, + { "property": "Gewicht (kg)", "value": "4" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 130 } + { "property": "Preis (USD)", "value": "130" } ], "description": "Klassisches Cassette‑Deck, kompakt und robust – ideal für Retro‑Fans." }, @@ -214,16 +219,16 @@ "productGroupLabel": "Kassette", "label": "CAS-002", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 20 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "20" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "305x205x105" }, - { "property": "Gewicht (kg)", "value": 4 }, + { "property": "Gewicht (kg)", "value": "4" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+3,5‑mm‑Klinke" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 140 } + { "property": "Preis (USD)", "value": "140" } ], "description": "Erweiterte Anschlussoptionen (RCA + Klinke) für externe Verstärker." }, @@ -232,16 +237,16 @@ "productGroupLabel": "Kassette", "label": "CAS-003", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 22 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "22" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "310x210x110" }, - { "property": "Gewicht (kg)", "value": 4 }, + { "property": "Gewicht (kg)", "value": "4" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+USB" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 150 } + { "property": "Preis (USD)", "value": "150" } ], "description": "Mit USB‑Ausgang, ermöglicht das Digitalisieren von Kassetten auf den PC." }, @@ -250,16 +255,16 @@ "productGroupLabel": "Kassette", "label": "CAS-004", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 22 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "22" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "315x215x115" }, - { "property": "Gewicht (kg)", "value": 4 }, + { "property": "Gewicht (kg)", "value": "4" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+Bluetooth" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 160 } + { "property": "Preis (USD)", "value": "160" } ], "description": "Bluetooth‑Sender integriert – streamen Sie Kassetten direkt zu Ihrem Wi‑Fi‑Lautsprecher." }, @@ -268,16 +273,16 @@ "productGroupLabel": "Kassette", "label": "CAS-005", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 24 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "24" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "320x220x120" }, - { "property": "Gewicht (kg)", "value": 4 }, + { "property": "Gewicht (kg)", "value": "4" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+Wi‑Fi" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 170 } + { "property": "Preis (USD)", "value": "170" } ], "description": "WLAN‑Funktion erlaubt das direkte Hochladen von Aufnahmen in die Cloud." }, @@ -286,16 +291,16 @@ "productGroupLabel": "Kassette", "label": "CAS-006", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 24 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "24" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "325x225x125" }, - { "property": "Gewicht (kg)", "value": 4 }, + { "property": "Gewicht (kg)", "value": "4" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+DL" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 180 } + { "property": "Preis (USD)", "value": "180" } ], "description": "Digitales Line‑Out (DL) gibt eine verlustfreie Audio‑Ausgabe über USB." }, @@ -304,16 +309,16 @@ "productGroupLabel": "Kassette", "label": "CAS-007", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 26 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "26" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "330x230x130" }, - { "property": "Gewicht (kg)", "value": 4 }, + { "property": "Gewicht (kg)", "value": "4" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+Bluetooth+DL" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 190 } + { "property": "Preis (USD)", "value": "190" } ], "description": "Dreifach‑Anschluss (RCA, Bluetooth, DL) – maximale Flexibilität für jeden Nutzer." }, @@ -322,16 +327,16 @@ "productGroupLabel": "Kassette", "label": "CAS-008", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 26 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "26" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "335x235x135" }, - { "property": "Gewicht (kg)", "value": 4 }, + { "property": "Gewicht (kg)", "value": "4" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+Wi‑Fi+DL" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 200 } + { "property": "Preis (USD)", "value": "200" } ], "description": "Kombiniert Wi‑Fi‑Streaming und digitale Ausgabe – perfekt für moderne Hi‑Fi‑Systeme." }, @@ -340,16 +345,16 @@ "productGroupLabel": "Kassette", "label": "CAS-009", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 28 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "28" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "340x240x140" }, - { "property": "Gewicht (kg)", "value": 4 }, + { "property": "Gewicht (kg)", "value": "4" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+Bluetooth+Wi‑Fi" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 210 } + { "property": "Preis (USD)", "value": "210" } ], "description": "Vielseitiges Deck für das digitale Zeitalter – Stream, Bluetooth und klassische Kassetten." }, @@ -358,35 +363,40 @@ "productGroupLabel": "Kassette", "label": "CAS-010", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 28 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "28" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "345x245x145" }, - { "property": "Gewicht (kg)", "value": 4 }, + { "property": "Gewicht (kg)", "value": "4" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+DL+Wi‑Fi" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 220 } + { "property": "Preis (USD)", "value": "220" } ], "description": "Modernes Kassetten‑Deck, das sich nahtlos in ein WLAN‑netzwerk einbinden lässt." - }, - + }] + + }, + { + "label": "Verstärker", + "description": "All Verstärker products", + "products": [ { "externalId": "Verstärker_AMP-001", "productGroupLabel": "Verstärker", "label": "AMP-001", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 50 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "50" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "400x300x120" }, - { "property": "Gewicht (kg)", "value": 6 }, + { "property": "Gewicht (kg)", "value": "6" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+XLR" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 280 } + { "property": "Preis (USD)", "value": "280" } ], "description": "Kompakter Stereo‑Verstärker mit analogen RCA‑ und XLR‑Eingängen, perfekt für Hi‑Fi‑Anfänger." }, @@ -395,16 +405,16 @@ "productGroupLabel": "Verstärker", "label": "AMP-002", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 60 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "60" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "405x305x125" }, - { "property": "Gewicht (kg)", "value": 6 }, + { "property": "Gewicht (kg)", "value": "6" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+XLR+USB" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 300 } + { "property": "Preis (USD)", "value": "300" } ], "description": "Erweiterter Verstärker mit USB‑Audio‑Interface – ideal für digitale Quellen." }, @@ -413,16 +423,16 @@ "productGroupLabel": "Verstärker", "label": "AMP-003", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 70 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "70" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "410x310x130" }, - { "property": "Gewicht (kg)", "value": 6 }, + { "property": "Gewicht (kg)", "value": "6" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+XLR+Bluetooth" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 320 } + { "property": "Preis (USD)", "value": "320" } ], "description": "Bluetooth‑fähiger Verstärker, unterstützt kabelloses Streaming von Smartphones." }, @@ -431,16 +441,16 @@ "productGroupLabel": "Verstärker", "label": "AMP-004", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 80 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "80" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "415x315x135" }, - { "property": "Gewicht (kg)", "value": 6 }, + { "property": "Gewicht (kg)", "value": "6" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+XLR+Wi‑Fi" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 340 } + { "property": "Preis (USD)", "value": "340" } ], "description": "Mit integriertem Wi‑Fi für Netzwerk‑Audio (DLNA, AirPlay)." }, @@ -449,16 +459,16 @@ "productGroupLabel": "Verstärker", "label": "AMP-005", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 90 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "90" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "420x320x140" }, - { "property": "Gewicht (kg)", "value": 6 }, + { "property": "Gewicht (kg)", "value": "6" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+XLR+DL" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 360 } + { "property": "Preis (USD)", "value": "360" } ], "description": "Direkt‑Digital‑Line‑Out (DL) ermöglicht verlustfreie Aufnahmen via USB." }, @@ -467,16 +477,16 @@ "productGroupLabel": "Verstärker", "label": "AMP-006", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 100 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "100" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "425x325x145" }, - { "property": "Gewicht (kg)", "value": 6 }, + { "property": "Gewicht (kg)", "value": "6" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+XLR+Bluetooth+DL" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 380 } + { "property": "Preis (USD)", "value": "380" } ], "description": "All‑In‑One‑Verstärker mit Bluetooth‑, Wi‑Fi‑ und Digital‑Line‑Out." }, @@ -485,16 +495,16 @@ "productGroupLabel": "Verstärker", "label": "AMP-007", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 110 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "110" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "430x330x150" }, - { "property": "Gewicht (kg)", "value": 6 }, + { "property": "Gewicht (kg)", "value": "6" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+XLR+Wi‑Fi+DL" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 400 } + { "property": "Preis (USD)", "value": "400" } ], "description": "Premium‑Verstärker mit WLAN‑Streaming & digitaler Ausgangsbuchse." }, @@ -503,16 +513,16 @@ "productGroupLabel": "Verstärker", "label": "AMP-008", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 120 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "120" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "435x335x155" }, - { "property": "Gewicht (kg)", "value": 6 }, + { "property": "Gewicht (kg)", "value": "6" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+XLR+Bluetooth+Wi‑Fi" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 420 } + { "property": "Preis (USD)", "value": "420" } ], "description": "Voll ausgestattet – Bluetooth, Wi‑Fi und hochwertige XLR‑Eingänge." }, @@ -521,16 +531,16 @@ "productGroupLabel": "Verstärker", "label": "AMP-009", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 130 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "130" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "440x340x160" }, - { "property": "Gewicht (kg)", "value": 6 }, + { "property": "Gewicht (kg)", "value": "6" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+XLR+DL+Wi‑Fi" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 440 } + { "property": "Preis (USD)", "value": "440" } ], "description": "Leistungsstarker Verstärker mit Netzwerk‑ und D/A‑Konverter." }, @@ -539,35 +549,39 @@ "productGroupLabel": "Verstärker", "label": "AMP-010", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 140 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "140" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "445x345x165" }, - { "property": "Gewicht (kg)", "value": 6 }, + { "property": "Gewicht (kg)", "value": "6" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+XLR+Bluetooth+DL+Wi‑Fi" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 460 } + { "property": "Preis (USD)", "value": "460" } ], "description": "Flaggschiff‑Verstärker mit allen gängigen digitalen und analogen Anschlüssen." - }, - + }] + }, + { + "label": "CD_Player", + "description": "All CD_Player products", + "products": [ { "externalId": "CD‑Player_CDP-001", "productGroupLabel": "CD‑Player", "label": "CDP-001", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 0 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "0" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "250x200x90" }, - { "property": "Gewicht (kg)", "value": 3 }, + { "property": "Gewicht (kg)", "value": "3" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+USB" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 210 } + { "property": "Preis (USD)", "value": "210" } ], "description": "Einfacher CD‑Player mit USB‑Eingang für digitale Musikdateien." }, @@ -576,16 +590,16 @@ "productGroupLabel": "CD‑Player", "label": "CDP-002", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 0 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "0" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "255x205x95" }, - { "property": "Gewicht (kg)", "value": 3 }, + { "property": "Gewicht (kg)", "value": "3" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+Bluetooth" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 225 } + { "property": "Preis (USD)", "value": "225" } ], "description": "Bluetooth‑Verbindung zum kabellosen Abspielen auf Lautsprecher." }, @@ -594,16 +608,16 @@ "productGroupLabel": "CD‑Player", "label": "CDP-003", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 0 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "0" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "260x210x100" }, - { "property": "Gewicht (kg)", "value": 3 }, + { "property": "Gewicht (kg)", "value": "3" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+Wi‑Fi" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 240 } + { "property": "Preis (USD)", "value": "240" } ], "description": "Wi‑Fi‑Modul ermöglicht das Streamen über Netzwerk‑Bibliotheken." }, @@ -612,16 +626,16 @@ "productGroupLabel": "CD‑Player", "label": "CDP-004", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 0 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "0" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "265x215x105" }, - { "property": "Gewicht (kg)", "value": 3 }, + { "property": "Gewicht (kg)", "value": "3" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+DL" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 255 } + { "property": "Preis (USD)", "value": "255" } ], "description": "Digital‑Line‑Out für eine verlustfreie Verbindung zu Aufnahmegeräten." }, @@ -630,16 +644,16 @@ "productGroupLabel": "CD‑Player", "label": "CDP-005", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 0 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "0" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "270x220x110" }, - { "property": "Gewicht (kg)", "value": 3 }, + { "property": "Gewicht (kg)", "value": "3" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+Bluetooth+DL" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 270 } + { "property": "Preis (USD)", "value": "270" } ], "description": "Kombination aus Bluetooth‑Streaming und Digital‑Line‑Out." }, @@ -648,16 +662,16 @@ "productGroupLabel": "CD‑Player", "label": "CDP-006", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 0 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "0" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "275x225x115" }, - { "property": "Gewicht (kg)", "value": 3 }, + { "property": "Gewicht (kg)", "value": "3" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+Wi‑Fi+DL" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 285 } + { "property": "Preis (USD)", "value": "285" } ], "description": "Wi‑Fi‑Streaming + Digital‑Ausgang – für Hi‑Fi‑Setups." }, @@ -666,16 +680,16 @@ "productGroupLabel": "CD‑Player", "label": "CDP-007", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 0 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "0" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "280x230x120" }, - { "property": "Gewicht (kg)", "value": 3 }, + { "property": "Gewicht (kg)", "value": "3" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+Bluetooth+Wi‑Fi" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 300 } + { "property": "Preis (USD)", "value": "300" } ], "description": "All‑In‑One‑CD‑Player – Bluetooth, Wi‑Fi und klassische RCA‑Ausgaben." }, @@ -684,16 +698,16 @@ "productGroupLabel": "CD‑Player", "label": "CDP-008", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 0 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "0" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "285x235x125" }, - { "property": "Gewicht (kg)", "value": 3 }, + { "property": "Gewicht (kg)", "value": "3" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+DL+Wi‑Fi" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 315 } + { "property": "Preis (USD)", "value": "315" } ], "description": "Digital‑Line‑Out plus WLAN‑Streaming für die vernetzte Musikanlage." }, @@ -702,16 +716,16 @@ "productGroupLabel": "CD‑Player", "label": "CDP-009", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 0 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "0" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "290x240x130" }, - { "property": "Gewicht (kg)", "value": 3 }, + { "property": "Gewicht (kg)", "value": "3" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+Bluetooth+DL+Wi‑Fi" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 330 } + { "property": "Preis (USD)", "value": "330" } ], "description": "Voll ausgestatteter CD‑Player, bereit für jede digitale Verbindung." }, @@ -720,16 +734,16 @@ "productGroupLabel": "CD‑Player", "label": "CDP-010", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 0 }, - { "property": "Kapazität/Volumen (L)", "value": 0 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "0" }, + { "property": "Kapazität/Volumen (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "295x245x135" }, - { "property": "Gewicht (kg)", "value": 3 }, + { "property": "Gewicht (kg)", "value": "3" }, { "property": "Energieeffizienzklasse", "value": "" }, { "property": "Bedienungsart", "value": "RCA+USB+Bluetooth" }, { "property": "Material Innenraum", "value": "" }, { "property": "Zusatzfunktionen", "value": "" }, - { "property": "Preis (USD)", "value": 345 } + { "property": "Preis (USD)", "value": "345" } ], "description": "USB‑Mediendatenbank, Bluetooth‑Ausgabe – Alles in einem kompakten Gehäuse." } @@ -745,16 +759,16 @@ "label": "WAS-001", "description": "Kompakte Frontlader‑Waschmaschine mit Energiespar‑Quick‑Wash für kleine Haushalte.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 2000 }, - { "property": "Kapazität (kg)", "value": 6 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "2000" }, + { "property": "Kapazität (kg)", "value": "6" }, { "property": "Energieeffizienzklasse", "value": "A++" }, - { "property": "Schleuderdrehzahl (U/min)", "value": 1200 }, + { "property": "Schleuderdrehzahl (U/min)", "value": "1200" }, { "property": "Programms/Features", "value": "Quick‑Wash;Eco‑Mode" }, - { "property": "Wasserverbrauch pro Zyklus (L)", "value": 45 }, + { "property": "Wasserverbrauch pro Zyklus (L)", "value": "45" }, { "property": "Abmessungen (mm)", "value": "600x850x550" }, - { "property": "Gewicht (kg)", "value": 70 }, - { "property": "Preis (USD)", "value": 500 } + { "property": "Gewicht (kg)", "value": "70" }, + { "property": "Preis (USD)", "value": "500" } ] }, { @@ -763,16 +777,16 @@ "label": "WAS-002", "description": "Intelligente Waschmaschine mit Dampffunktion für allergiker‑freundliches Waschen.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 2100 }, - { "property": "Kapazität (kg)", "value": 7 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "2100" }, + { "property": "Kapazität (kg)", "value": "7" }, { "property": "Energieeffizienzklasse", "value": "A+" }, - { "property": "Schleuderdrehzahl (U/min)", "value": 1400 }, + { "property": "Schleuderdrehzahl (U/min)", "value": "1400" }, { "property": "Programms/Features", "value": "Intelli‑Wash;Steam" }, - { "property": "Wasserverbrauch pro Zyklus (L)", "value": 50 }, + { "property": "Wasserverbrauch pro Zyklus (L)", "value": "50" }, { "property": "Abmessungen (mm)", "value": "610x860x560" }, - { "property": "Gewicht (kg)", "value": 75 }, - { "property": "Preis (USD)", "value": 550 } + { "property": "Gewicht (kg)", "value": "75" }, + { "property": "Preis (USD)", "value": "550" } ] }, { @@ -781,16 +795,16 @@ "label": "WAS-003", "description": "App‑Steuerung ermöglicht Zeitvorwahl und Fernüberwachung über das Smartphone.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 2200 }, - { "property": "Kapazität (kg)", "value": 8 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "2200" }, + { "property": "Kapazität (kg)", "value": "8" }, { "property": "Energieeffizienzklasse", "value": "A++" }, - { "property": "Schleuderdrehzahl (U/min)", "value": 1600 }, + { "property": "Schleuderdrehzahl (U/min)", "value": "1600" }, { "property": "Programms/Features", "value": "Smart‑App;Delay‑Start" }, - { "property": "Wasserverbrauch pro Zyklus (L)", "value": 55 }, + { "property": "Wasserverbrauch pro Zyklus (L)", "value": "55" }, { "property": "Abmessungen (mm)", "value": "620x870x570" }, - { "property": "Gewicht (kg)", "value": 80 }, - { "property": "Preis (USD)", "value": 600 } + { "property": "Gewicht (kg)", "value": "80" }, + { "property": "Preis (USD)", "value": "600" } ] }, { @@ -799,16 +813,16 @@ "label": "WAS-004", "description": "Allergy‑Programm reduziert Allergene, Auto‑Dose dosiert Waschmittel automatisch.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 2300 }, - { "property": "Kapazität (kg)", "value": 9 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "2300" }, + { "property": "Kapazität (kg)", "value": "9" }, { "property": "Energieeffizienzklasse", "value": "A+" }, - { "property": "Schleuderdrehzahl (U/min)", "value": 1800 }, + { "property": "Schleuderdrehzahl (U/min)", "value": "1800" }, { "property": "Programms/Features", "value": "Allergy;Auto‑Dose" }, - { "property": "Wasserverbrauch pro Zyklus (L)", "value": 60 }, + { "property": "Wasserverbrauch pro Zyklus (L)", "value": "60" }, { "property": "Abmessungen (mm)", "value": "630x880x580" }, - { "property": "Gewicht (kg)", "value": 85 }, - { "property": "Preis (USD)", "value": 650 } + { "property": "Gewicht (kg)", "value": "85" }, + { "property": "Preis (USD)", "value": "650" } ] }, { @@ -817,16 +831,16 @@ "label": "WAS-005", "description": "Schnell‑Wäsche plus Dampf‑Frisch‑Funktion, besonders leiser Betrieb.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 2400 }, - { "property": "Kapazität (kg)", "value": 10 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "2400" }, + { "property": "Kapazität (kg)", "value": "10" }, { "property": "Energieeffizienzklasse", "value": "A++" }, - { "property": "Schleuderdrehzahl (U/min)", "value": 2000 }, + { "property": "Schleuderdrehzahl (U/min)", "value": "2000" }, { "property": "Programms/Features", "value": "Quick‑Wash+Steam;Eco‑Silence" }, - { "property": "Wasserverbrauch pro Zyklus (L)", "value": 65 }, + { "property": "Wasserverbrauch pro Zyklus (L)", "value": "65" }, { "property": "Abmessungen (mm)", "value": "640x890x590" }, - { "property": "Gewicht (kg)", "value": 90 }, - { "property": "Preis (USD)", "value": 700 } + { "property": "Gewicht (kg)", "value": "90" }, + { "property": "Preis (USD)", "value": "700" } ] }, { @@ -835,16 +849,16 @@ "label": "WAS-006", "description": "WLAN‑Steuerung und Dampffrischer für schnell frische Wäsche.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 2500 }, - { "property": "Kapazität (kg)", "value": 11 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "2500" }, + { "property": "Kapazität (kg)", "value": "11" }, { "property": "Energieeffizienzklasse", "value": "A+" }, - { "property": "Schleuderdrehzahl (U/min)", "value": 2200 }, + { "property": "Schleuderdrehzahl (U/min)", "value": "2200" }, { "property": "Programms/Features", "value": "Wi‑Fi‑Control;Steam‑Refresh" }, - { "property": "Wasserverbrauch pro Zyklus (L)", "value": 70 }, + { "property": "Wasserverbrauch pro Zyklus (L)", "value": "70" }, { "property": "Abmessungen (mm)", "value": "650x900x600" }, - { "property": "Gewicht (kg)", "value": 95 }, - { "property": "Preis (USD)", "value": 750 } + { "property": "Gewicht (kg)", "value": "95" }, + { "property": "Preis (USD)", "value": "750" } ] }, { @@ -853,16 +867,16 @@ "label": "WAS-007", "description": "Wärmepumpentechnologie senkt Energieverbrauch, Auto‑Dose sorgt für optimale Dosierung.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 2600 }, - { "property": "Kapazität (kg)", "value": 12 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "2600" }, + { "property": "Kapazität (kg)", "value": "12" }, { "property": "Energieeffizienzklasse", "value": "A++" }, - { "property": "Schleuderdrehzahl (U/min)", "value": 2400 }, + { "property": "Schleuderdrehzahl (U/min)", "value": "2400" }, { "property": "Programms/Features", "value": "Auto‑Dose;Heat‑Pump" }, - { "property": "Wasserverbrauch pro Zyklus (L)", "value": 75 }, + { "property": "Wasserverbrauch pro Zyklus (L)", "value": "75" }, { "property": "Abmessungen (mm)", "value": "660x910x610" }, - { "property": "Gewicht (kg)", "value": 100 }, - { "property": "Preis (USD)", "value": 800 } + { "property": "Gewicht (kg)", "value": "100" }, + { "property": "Preis (USD)", "value": "800" } ] }, { @@ -871,16 +885,16 @@ "label": "WAS-008", "description": "Intelligenter Sensor erkennt Beladungsmenge und passt Wasserverbrauch an.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 2700 }, - { "property": "Kapazität (kg)", "value": 13 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "2700" }, + { "property": "Kapazität (kg)", "value": "13" }, { "property": "Energieeffizienzklasse", "value": "A+" }, - { "property": "Schleuderdrehzahl (U/min)", "value": 2600 }, + { "property": "Schleuderdrehzahl (U/min)", "value": "2600" }, { "property": "Programms/Features", "value": "Intelli‑Sensor;Quick‑Wash" }, - { "property": "Wasserverbrauch pro Zyklus (L)", "value": 80 }, + { "property": "Wasserverbrauch pro Zyklus (L)", "value": "80" }, { "property": "Abmessungen (mm)", "value": "670x920x620" }, - { "property": "Gewicht (kg)", "value": 105 }, - { "property": "Preis (USD)", "value": 850 } + { "property": "Gewicht (kg)", "value": "105" }, + { "property": "Preis (USD)", "value": "850" } ] }, { @@ -889,16 +903,16 @@ "label": "WAS-009", "description": "Dampf‑Sanitisierung tötet Bakterien; Zeitverzögerer für flexiblen Start.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 2800 }, - { "property": "Kapazität (kg)", "value": 14 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "2800" }, + { "property": "Kapazität (kg)", "value": "14" }, { "property": "Energieeffizienzklasse", "value": "A++" }, - { "property": "Schleuderdrehzahl (U/min)", "value": 2800 }, + { "property": "Schleuderdrehzahl (U/min)", "value": "2800" }, { "property": "Programms/Features", "value": "Steam‑Sanitize;Time‑Delay" }, - { "property": "Wasserverbrauch pro Zyklus (L)", "value": 85 }, + { "property": "Wasserverbrauch pro Zyklus (L)", "value": "85" }, { "property": "Abmessungen (mm)", "value": "680x930x630" }, - { "property": "Gewicht (kg)", "value": 110 }, - { "property": "Preis (USD)", "value": 900 } + { "property": "Gewicht (kg)", "value": "110" }, + { "property": "Preis (USD)", "value": "900" } ] }, { @@ -907,16 +921,16 @@ "label": "WAS-010", "description": "Smart‑Home‑Integration (Alexa, Google Home) + Turbo‑Eco‑Programm für schnelle, sparsame Wäsche.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 2900 }, - { "property": "Kapazität (kg)", "value": 15 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "2900" }, + { "property": "Kapazität (kg)", "value": "15" }, { "property": "Energieeffizienzklasse", "value": "A+" }, - { "property": "Schleuderdrehzahl (U/min)", "value": 3000 }, + { "property": "Schleuderdrehzahl (U/min)", "value": "3000" }, { "property": "Programms/Features", "value": "Smart‑Home;Eco‑Turbo" }, - { "property": "Wasserverbrauch pro Zyklus (L)", "value": 90 }, + { "property": "Wasserverbrauch pro Zyklus (L)", "value": "90" }, { "property": "Abmessungen (mm)", "value": "690x940x640" }, - { "property": "Gewicht (kg)", "value": 115 }, - { "property": "Preis (USD)", "value": 950 } + { "property": "Gewicht (kg)", "value": "115" }, + { "property": "Preis (USD)", "value": "950" } ] }, { @@ -925,16 +939,16 @@ "label": "TRO-001", "description": "Kompakter Wärmepumpentrockner, schont Textilien und spart Energie.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 2100 }, - { "property": "Kapazität (kg)", "value": 6 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "2100" }, + { "property": "Kapazität (kg)", "value": "6" }, { "property": "Energieeffizienzklasse", "value": "A++" }, - { "property": "Schleuderdrehzahl (U/min)", "value": 1200 }, + { "property": "Schleuderdrehzahl (U/min)", "value": "1200" }, { "property": "Programms/Features", "value": "Heat‑Pump;Anti‑Wrinkle" }, - { "property": "Wasserverbrauch pro Zyklus (L)", "value": 0 }, + { "property": "Wasserverbrauch pro Zyklus (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "600x850x550" }, - { "property": "Gewicht (kg)", "value": 70 }, - { "property": "Preis (USD)", "value": 520 } + { "property": "Gewicht (kg)", "value": "70" }, + { "property": "Preis (USD)", "value": "520" } ] }, { @@ -943,16 +957,16 @@ "label": "TRO-002", "description": "Kondensationstrockner mit Dampffrisch‑Programm, reduziert Knittrigkeit um 30 %.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 2200 }, - { "property": "Kapazität (kg)", "value": 7 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "2200" }, + { "property": "Kapazität (kg)", "value": "7" }, { "property": "Energieeffizienzklasse", "value": "A+" }, - { "property": "Schleuderdrehzahl (U/min)", "value": 1400 }, + { "property": "Schleuderdrehzahl (U/min)", "value": "1400" }, { "property": "Programms/Features", "value": "Condensation;SteamRefresh" }, - { "property": "Wasserverbrauch pro Zyklus (L)", "value": 0 }, + { "property": "Wasserverbrauch pro Zyklus (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "610x860x560" }, - { "property": "Gewicht (kg)", "value": 75 }, - { "property": "Preis (USD)", "value": 570 } + { "property": "Gewicht (kg)", "value": "75" }, + { "property": "Preis (USD)", "value": "570" } ] }, { @@ -961,16 +975,16 @@ "label": "TRO-003", "description": "Smart‑App‑Steuerung, schnelles Trocknen für eilige Haushalte.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 2300 }, - { "property": "Kapazität (kg)", "value": 8 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "2300" }, + { "property": "Kapazität (kg)", "value": "8" }, { "property": "Energieeffizienzklasse", "value": "A++" }, - { "property": "Schleuderdrehzahl (U/min)", "value": 1600 }, + { "property": "Schleuderdrehzahl (U/min)", "value": "1600" }, { "property": "Programms/Features", "value": "Smart‑App;Quick‑Dry" }, - { "property": "Wasserverbrauch pro Zyklus (L)", "value": 0 }, + { "property": "Wasserverbrauch pro Zyklus (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "620x870x570" }, - { "property": "Gewicht (kg)", "value": 80 }, - { "property": "Preis (USD)", "value": 620 } + { "property": "Gewicht (kg)", "value": "80" }, + { "property": "Preis (USD)", "value": "620" } ] }, { @@ -979,16 +993,16 @@ "label": "TRO-004", "description": "Feuchtigkeitssensor passt Trockenzeit an, Bambus‑Filter für Geruchsnutzung.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 2400 }, - { "property": "Kapazität (kg)", "value": 9 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "2400" }, + { "property": "Kapazität (kg)", "value": "9" }, { "property": "Energieeffizienzklasse", "value": "A+" }, - { "property": "Schleuderdrehzahl (U/min)", "value": 1800 }, + { "property": "Schleuderdrehzahl (U/min)", "value": "1800" }, { "property": "Programms/Features", "value": "Sensor‑Dry;Bamboo‑Filter" }, - { "property": "Wasserverbrauch pro Zyklus (L)", "value": 0 }, + { "property": "Wasserverbrauch pro Zyklus (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "630x880x580" }, - { "property": "Gewicht (kg)", "value": 85 }, - { "property": "Preis (USD)", "value": 670 } + { "property": "Gewicht (kg)", "value": "85" }, + { "property": "Preis (USD)", "value": "670" } ] }, { @@ -997,16 +1011,16 @@ "label": "TRO-005", "description": "Wärmepumpe + Dampffunktion für schonendes, energieeffizientes Trocknen.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 2500 }, - { "property": "Kapazität (kg)", "value": 10 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "2500" }, + { "property": "Kapazität (kg)", "value": "10" }, { "property": "Energieeffizienzklasse", "value": "A++" }, - { "property": "Schleuderdrehzahl (U/min)", "value": 2000 }, + { "property": "Schleuderdrehzahl (U/min)", "value": "2000" }, { "property": "Programms/Features", "value": "Heat‑Pump+Steam;Eco‑Mode" }, - { "property": "Wasserverbrauch pro Zyklus (L)", "value": 0 }, + { "property": "Wasserverbrauch pro Zyklus (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "640x890x590" }, - { "property": "Gewicht (kg)", "value": 90 }, - { "property": "Preis (USD)", "value": 720 } + { "property": "Gewicht (kg)", "value": "90" }, + { "property": "Preis (USD)", "value": "720" } ] }, { @@ -1015,16 +1029,16 @@ "label": "TRO-006", "description": "WLAN‑Steuerung, automatischer Lint‑Filter‑Reinigungszyklus.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 2600 }, - { "property": "Kapazität (kg)", "value": 11 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "2600" }, + { "property": "Kapazität (kg)", "value": "11" }, { "property": "Energieeffizienzklasse", "value": "A+" }, - { "property": "Schleuderdrehzahl (U/min)", "value": 2200 }, + { "property": "Schleuderdrehzahl (U/min)", "value": "2200" }, { "property": "Programms/Features", "value": "Wi‑Fi‑Control;Auto‑Clean" }, - { "property": "Wasserverbrauch pro Zyklus (L)", "value": 0 }, + { "property": "Wasserverbrauch pro Zyklus (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "650x900x600" }, - { "property": "Gewicht (kg)", "value": 95 }, - { "property": "Preis (USD)", "value": 770 } + { "property": "Gewicht (kg)", "value": "95" }, + { "property": "Preis (USD)", "value": "770" } ] }, { @@ -1033,16 +1047,16 @@ "label": "TRO-007", "description": "Auto‑Sense passt Programme auf Textilart an, schonendes Gentle‑Dry.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 2700 }, - { "property": "Kapazität (kg)", "value": 12 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "2700" }, + { "property": "Kapazität (kg)", "value": "12" }, { "property": "Energieeffizienzklasse", "value": "A++" }, - { "property": "Schleuderdrehzahl (U/min)", "value": 2400 }, + { "property": "Schleuderdrehzahl (U/min)", "value": "2400" }, { "property": "Programms/Features", "value": "Auto‑Sense;Gentle‑Dry" }, - { "property": "Wasserverbrauch pro Zyklus (L)", "value": 0 }, + { "property": "Wasserverbrauch pro Zyklus (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "660x910x610" }, - { "property": "Gewicht (kg)", "value": 100 }, - { "property": "Preis (USD)", "value": 820 } + { "property": "Gewicht (kg)", "value": "100" }, + { "property": "Preis (USD)", "value": "820" } ] }, { @@ -1051,16 +1065,16 @@ "label": "TRO-008", "description": "Schnell‑Trocknen mit antistatischer Entladung für weniger Knittern.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 2800 }, - { "property": "Kapazität (kg)", "value": 13 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "2800" }, + { "property": "Kapazität (kg)", "value": "13" }, { "property": "Energieeffizienzklasse", "value": "A+" }, - { "property": "Schleuderdrehzahl (U/min)", "value": 2600 }, + { "property": "Schleuderdrehzahl (U/min)", "value": "2600" }, { "property": "Programms/Features", "value": "Quick‑Dry;Anti‑Static" }, - { "property": "Wasserverbrauch pro Zyklus (L)", "value": 0 }, + { "property": "Wasserverbrauch pro Zyklus (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "670x920x620" }, - { "property": "Gewicht (kg)", "value": 105 }, - { "property": "Preis (USD)", "value": 870 } + { "property": "Gewicht (kg)", "value": "105" }, + { "property": "Preis (USD)", "value": "870" } ] }, { @@ -1069,16 +1083,16 @@ "label": "TRO-009", "description": "Dampfsanitierung tötet Bakterien, Zeitverzögerung für flexiblen Einsatz.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 220 }, - { "property": "Leistung (W)", "value": 2900 }, - { "property": "Kapazität (kg)", "value": 14 }, + { "property": "Spannungsversorgung (V)", "value": "220" }, + { "property": "Leistung (W)", "value": "2900" }, + { "property": "Kapazität (kg)", "value": "14" }, { "property": "Energieeffizienzklasse", "value": "A++" }, - { "property": "Schleuderdrehzahl (U/min)", "value": 2800 }, + { "property": "Schleuderdrehzahl (U/min)", "value": "2800" }, { "property": "Programms/Features", "value": "Steam‑Sanitize;Time‑Delay" }, - { "property": "Wasserverbrauch pro Zyklus (L)", "value": 0 }, + { "property": "Wasserverbrauch pro Zyklus (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "680x930x630" }, - { "property": "Gewicht (kg)", "value": 110 }, - { "property": "Preis (USD)", "value": 920 } + { "property": "Gewicht (kg)", "value": "110" }, + { "property": "Preis (USD)", "value": "920" } ] }, { @@ -1087,16 +1101,16 @@ "label": "TRO-010", "description": "Smart‑Home‑Kompatibilität, Turbo‑Eco‑Modus für schnelle, energieeffiziente Trocknung.", "properties": [ - { "property": "Spannungsversorgung (V)", "value": 230 }, - { "property": "Leistung (W)", "value": 3000 }, - { "property": "Kapazität (kg)", "value": 15 }, + { "property": "Spannungsversorgung (V)", "value": "230" }, + { "property": "Leistung (W)", "value": "3000" }, + { "property": "Kapazität (kg)", "value": "15" }, { "property": "Energieeffizienzklasse", "value": "A+" }, - { "property": "Schleuderdrehzahl (U/min)", "value": 3000 }, + { "property": "Schleuderdrehzahl (U/min)", "value": "3000" }, { "property": "Programms/Features", "value": "Smart‑Home;Eco‑Turbo" }, - { "property": "Wasserverbrauch pro Zyklus (L)", "value": 0 }, + { "property": "Wasserverbrauch pro Zyklus (L)", "value": "0" }, { "property": "Abmessungen (mm)", "value": "690x940x640" }, - { "property": "Gewicht (kg)", "value": 115 }, - { "property": "Preis (USD)", "value": 970 } + { "property": "Gewicht (kg)", "value": "115" }, + { "property": "Preis (USD)", "value": "970" } ] } ] @@ -1110,4 +1124,4 @@ } ] -} \ No newline at end of file +}] \ No newline at end of file diff --git a/buildtime/server/examples/household_example/propertyTypeGroups.json b/buildtime/server/examples/household_example/propertyTypeGroups.json index c5e38fd64..a458798d4 100644 --- a/buildtime/server/examples/household_example/propertyTypeGroups.json +++ b/buildtime/server/examples/household_example/propertyTypeGroups.json @@ -1,4 +1,4 @@ -{ +[{ "label": "Simply CPQ", "description": "Property Type Group for Simply CPQ", "propertyTypeGroups": [ @@ -60,12 +60,18 @@ "label": "Wasserverbrauch pro Zyklus (L)", "description": "All mechanical properties" }, + { + "label": "Material Innenraum", + "description": "All mechanical properties" + } { + "label": "Kapazität/Volumen (L)", + "description": "All mechanical properties" + }, { "label": "Schleuderdrehzahl (U/min)", "description": "All mechanical properties" } - ], - "propertyTypeGroups": [] + ] }, { "label": "other", @@ -76,12 +82,16 @@ "description": "All other properties" }, { + "label": "Zusatzfunktionen", + "description": "All other properties" + }, { + "label": "Bedienungsart", + "description": "All other properties" + }, { "label": "Energieeffizienzklasse", "description": "All other properties" } - ], - "propertyTypeGroups": [] + ] } ] - -} \ No newline at end of file +}] \ No newline at end of file diff --git a/buildtime/server/models/import.go b/buildtime/server/models/import.go index 678166fe9..be6896b8c 100644 --- a/buildtime/server/models/import.go +++ b/buildtime/server/models/import.go @@ -16,20 +16,21 @@ type ImportPropertyType struct { type ImportProperty struct { ID int `json:"id,omitempty"` - Label string `json:"label"` + Label string `json:"property"` Value string `json:"value"` } type ImportProductGroup struct { - ID int `json:"id,omitempty"` - Label string `json:"label"` - Description string `json:"description"` - SubGroups []ImportProductGroup `json:"subGroups,omitempty"` - Products []ImportProduct `json:"products,omitempty"` + ID int `json:"id,omitempty"` + Label string `json:"label"` + Description string `json:"description"` + ProductGroups []ImportProductGroup `json:"productGroups,omitempty"` + Products []ImportProduct `json:"products,omitempty"` } type ImportProduct struct { ID int `json:"id,omitempty"` + ExternalID string `json:"externalId"` Label string `json:"label"` Description string `json:"description"` ProductGroupLabel string `json:"productGroupLabel,omitempty"` diff --git a/buildtime/server/repositories/importRepository.go b/buildtime/server/repositories/importRepository.go index 0d8a349eb..cbe3460e1 100644 --- a/buildtime/server/repositories/importRepository.go +++ b/buildtime/server/repositories/importRepository.go @@ -21,7 +21,7 @@ func NewImportRepository(db *sql.DB, productGroupRepo *ProductGroupRepository, p } } -func (r *ImportRepository) ImportPropertyTypeGroups(importData []models.ImportPropertyTypeGroup) error { +func (r *ImportRepository) ImportPropertyTypeGroups(importData []models.ImportPropertyTypeGroup, parentGroupId int) error { // Implement the logic to import PropertyTypeGroups into the database // This is a placeholder implementation; you need to write the actual logic for _, data := range importData { @@ -32,29 +32,70 @@ func (r *ImportRepository) ImportPropertyTypeGroups(importData []models.ImportPr if err != nil { return err } - // + // import property types if they exist if err := r.ImportPropertyTypes(data.PropertyTypes, data.ID); err != nil { return err } // update subgroups if they exist if data.PropertyTypeGroups != nil { - return r.ImportPropertyTypeGroups(data.PropertyTypeGroups) + return r.ImportPropertyTypeGroups(data.PropertyTypeGroups, data.ID) } } else { - // Insert new record - _, err := r.db.Exec("INSERT INTO propertytypegroups (label, description) VALUES ($1, $2)", data.Label, data.Description) - if err != nil { + // check if propertyTypegroup with Label exists + var existingID int + err := r.db.QueryRow("SELECT id FROM propertytypegroups WHERE label = $1", data.Label).Scan(&existingID) + if err == sql.ErrNoRows { + // Insert new record + var newID int + err := r.db.QueryRow("INSERT INTO propertytypegroups (label, description, parentGroupId) VALUES ($1, $2, $3) RETURNING id", data.Label, data.Description, parentGroupId).Scan(&newID) + if err != nil { + return err + } + existingID = newID + if data.PropertyTypeGroups != nil { + return r.ImportPropertyTypeGroups(data.PropertyTypeGroups, newID) + } + } else if err != nil { + return err + } else { + // Existing record found, import subgroups + if data.PropertyTypeGroups != nil { + return r.ImportPropertyTypeGroups(data.PropertyTypeGroups, existingID) + } + } + // import property types if they exist + if err := r.ImportPropertyTypes(data.PropertyTypes, existingID); err != nil { return err } - if data.PropertyTypeGroups != nil { - return r.ImportPropertyTypeGroups(data.PropertyTypeGroups) - } + } } return nil } -func (r *ImportRepository) ImportProductGroups(importData []models.ImportProductGroup) error { +func (r *ImportRepository) ImportPropertyTypes(importData []models.ImportPropertyType, groupID int) error { + for _, propertyType := range importData { + if propertyType.ID != 0 { + // Update existing PropertyType + query := "UPDATE propertyTypes SET label = $1, description = $2, propertyTypeGroupId = $3 WHERE id = $4" + _, err := r.db.Exec(query, propertyType.Label, propertyType.Description, groupID, propertyType.ID) + if err != nil { + return err + } + } else { + // Insert new PropertyType + query := "INSERT INTO propertyTypes (label, description, propertyTypeGroupId) VALUES ($1, $2, $3)" + _, err := r.db.Exec(query, propertyType.Label, propertyType.Description, groupID) + if err != nil { + return err + } + } + } + + return nil +} + +func (r *ImportRepository) ImportProductGroups(importData []models.ImportProductGroup, parentGroupId int) error { // Implement the logic to import ProductGroups into the database // Implement the logic to import PropertyTypeGroups into the database // This is a placeholder implementation; you need to write the actual logic @@ -71,50 +112,50 @@ func (r *ImportRepository) ImportProductGroups(importData []models.ImportProduct return err } // update subgroups if they exist - if data.SubGroups != nil { - return r.ImportProductGroups(data.SubGroups) + if data.ProductGroups != nil { + return r.ImportProductGroups(data.ProductGroups, data.ID) } } else { // Insert new record - _, err := r.db.Exec("INSERT INTO productgroups (label, description) VALUES ($1, $2)", data.Label, data.Description) + err := r.db.QueryRow("INSERT INTO productgroups (label, description, parentGroupId) VALUES ($1, $2, $3) RETURNING id", data.Label, data.Description, parentGroupId).Scan(&data.ID) if err != nil { return err } if err := r.ImportProducts(data.Products, data.ID); err != nil { return err } - if data.SubGroups != nil { - return r.ImportProductGroups(data.SubGroups) + if data.ProductGroups != nil { + return r.ImportProductGroups(data.ProductGroups, data.ID) } } } return nil } -func (r *ImportRepository) ImportProducts(importData []models.ImportProduct, groupID int) error { +func (r *ImportRepository) ImportProducts(importData []models.ImportProduct, productGroupID int) error { // Implement the logic to import Products into the database for _, product := range importData { if product.ID != 0 { // Update existing Product - query := "UPDATE products SET label = $1, description = $2, productGroupId = $3 WHERE id = $4" - _, err := r.db.Exec(query, product.Label, product.Description, groupID, product.ID) + query := "UPDATE products SET externalId = $1, label = $2, description = $3, productGroupId = $4 WHERE id = $5" + _, err := r.db.Exec(query, product.ExternalID, product.Label, product.Description, productGroupID, product.ID) if err != nil { return err } if product.Properties != nil { - if err := r.ImportProperties(product.Properties, product.ID, groupID); err != nil { + if err := r.ImportProperties(product.Properties, product.ID, productGroupID); err != nil { return err } } } else { // Insert new Product - query := "INSERT INTO products (label, description, productGroupId) VALUES ($1, $2, $3) RETURNING id" - err := r.db.QueryRow(query, product.Label, product.Description, groupID).Scan(&product.ID) + query := "INSERT INTO products (externalId, label, description, productGroupId) VALUES ($1, $2, $3, $4) RETURNING id" + err := r.db.QueryRow(query, product.ExternalID, product.Label, product.Description, productGroupID).Scan(&product.ID) if err != nil { return err } if product.Properties != nil { - if err := r.ImportProperties(product.Properties, product.ID, groupID); err != nil { + if err := r.ImportProperties(product.Properties, product.ID, productGroupID); err != nil { return err } } @@ -123,98 +164,89 @@ func (r *ImportRepository) ImportProducts(importData []models.ImportProduct, gro return nil } -func (r *ImportRepository) ImportProperties(importData []models.ImportProperty, productID int, groupID int) error { +func (r *ImportRepository) ImportProperties(importData []models.ImportProperty, productID int, productGroupID int) error { for _, property := range importData { - propertyTypeID, err := r.findPropertyTypeID(property.Label) + var propertyType models.ImportPropertyType + var propertyIDs []int + propertyType, err := r.findPropertyType(property.Label) if err != nil { return err } - - propertyID := property.ID - if propertyID != 0 { - if err := r.updateProperty(property, propertyID, productID, groupID, propertyTypeID); err != nil { + if property.ID != 0 { + if err := r.updateProperty(property, property.ID, productID, productGroupID, propertyType); err != nil { return err } } else { - propertyID, err = r.insertProperty(property, productID, groupID, propertyTypeID) + propertyIDs, err = r.insertProperty(property, productID, productGroupID, propertyType) if err != nil { return err } - } - if err := r.upsertValue(propertyID, property.Value); err != nil { - return err } - if err := r.upsertValue(propertyTypeID, property.Value); err != nil { - return err + for _, propertyId := range propertyIDs { + property.ID = propertyId + if err := r.upsertValue(property, property.Value, propertyType.ID); err != nil { + return err + } } } return nil } -func (r *ImportRepository) findPropertyTypeID(label string) (int, error) { - var propertyTypeID int - err := r.db.QueryRow("SELECT id FROM propertyTypes WHERE label = $1", label).Scan(&propertyTypeID) +func (r *ImportRepository) findPropertyType(label string) (models.ImportPropertyType, error) { + var propertyType models.ImportPropertyType + err := r.db.QueryRow("SELECT id, label FROM propertyTypes WHERE label = $1", label).Scan(&propertyType.ID, &propertyType.Label) if err != nil { if err == sql.ErrNoRows { - return 0, nil + return models.ImportPropertyType{}, nil } - return 0, err + return models.ImportPropertyType{}, err } - return propertyTypeID, nil + return propertyType, nil } -func (r *ImportRepository) updateProperty(property models.ImportProperty, propertyID int, productID int, groupID int, propertyTypeID int) error { +func (r *ImportRepository) updateProperty(property models.ImportProperty, propertyID int, productID int, productGroupID int, propertyType models.ImportPropertyType) error { query := "UPDATE properties SET label = $1, description = $2, propertyTypeId = $3, productId = $4, productGroupId = $5 WHERE id = $6" - _, err := r.db.Exec(query, property.Label, property.Label, propertyTypeID, productID, groupID, propertyID) + _, err := r.db.Exec(query, property.Label, propertyType.Label, propertyType.ID, productID, productGroupID, propertyID) return err } -func (r *ImportRepository) insertProperty(property models.ImportProperty, productID int, groupID int, propertyTypeID int) (int, error) { +func (r *ImportRepository) insertProperty(property models.ImportProperty, productID int, productGroupID int, propertyType models.ImportPropertyType) ([]int, error) { query := "INSERT INTO properties (label, description, productId, propertyTypeId, productGroupId) VALUES ($1, $2, $3, $4, $5) RETURNING id" var propertyID int - err := r.db.QueryRow(query, property.Label, property.Label, productID, propertyTypeID, groupID).Scan(&propertyID) + var propertyID2 int + err := r.db.QueryRow(query, property.Label, propertyType.Label, productID, propertyType.ID, productGroupID).Scan(&propertyID) if err != nil { - return 0, err + return nil, err + } + err2 := r.db.QueryRow(query, property.Label, propertyType.Label, 0, propertyType.ID, productGroupID).Scan(&propertyID2) + if err2 != nil { + return nil, err2 } - return propertyID, nil + return []int{propertyID, propertyID2}, nil } -func (r *ImportRepository) upsertValue(propertyID int, value string) error { +func (r *ImportRepository) upsertValue(property models.ImportProperty, value string, propertyTypeId int) error { var existingValueID int - err := r.db.QueryRow("SELECT id FROM values WHERE label = $1 AND propertyId = $2", value, propertyID).Scan(&existingValueID) + err := r.db.QueryRow("SELECT id FROM values WHERE label = $1 AND propertyId = $2", value, property.ID).Scan(&existingValueID) if err != nil { if err != sql.ErrNoRows { return err } - _, err = r.db.Exec("INSERT INTO values (label, description, propertyId) VALUES ($1, $2, $3)", value, "", propertyID) + _, err = r.db.Exec("INSERT INTO values (label, description, propertyId) VALUES ($1, $2, $3)", value, property.Label, property.ID) + // check if value exists for propertyType, if not insert it, if yes update it + query3 := "SELECT id FROM values WHERE label = $1 AND propertyId = $2" + _, err = r.db.Exec(query3, value, propertyTypeId) + if err == sql.ErrNoRows { + _, err = r.db.Exec("INSERT INTO values (label, description, propertyId) VALUES ($1, $2, $3)", value, property.Label, propertyTypeId) + return err + } + return err + } else { + _, err = r.db.Exec("UPDATE values SET label = $1, description = $2 WHERE id = $3", value, property.Label, existingValueID) return err } - _, err = r.db.Exec("UPDATE values SET label = $1, description = $2 WHERE id = $3", value, "", existingValueID) - return err -} - -func (r *ImportRepository) ImportPropertyTypes(importData []models.ImportPropertyType, groupID int) error { - for _, propertyType := range importData { - if propertyType.ID != 0 { - // Update existing PropertyType - query := "UPDATE propertyTypes SET label = $1, description = $2, propertyGroupId = $3 WHERE id = $4" - _, err := r.db.Exec(query, propertyType.Label, propertyType.Description, groupID, propertyType.ID) - if err != nil { - return err - } - } else { - // Insert new PropertyType - query := "INSERT INTO propertyTypes (label, description, propertyGroupId) VALUES ($1, $2, $3)" - _, err := r.db.Exec(query, propertyType.Label, propertyType.Description, groupID) - if err != nil { - return err - } - } - } - - return nil } diff --git a/buildtime/server/services/importService.go b/buildtime/server/services/importService.go index e833d81d9..8b1fa0767 100644 --- a/buildtime/server/services/importService.go +++ b/buildtime/server/services/importService.go @@ -16,11 +16,11 @@ func NewImportService(iRepo *repositories.ImportRepository) *ImportService { } func (is *ImportService) ImportPropertyTypeGroups(importData []models.ImportPropertyTypeGroup) error { - return is.importRepository.ImportPropertyTypeGroups(importData) + return is.importRepository.ImportPropertyTypeGroups(importData, 0) } func (is *ImportService) ImportProductGroups(importData []models.ImportProductGroup) error { - return is.importRepository.ImportProductGroups(importData) + return is.importRepository.ImportProductGroups(importData, 0) } /*