KLEUR_POOLS).| Falte | Faktor |
|---|---|
| Wave default | 2.00 |
| Doppelter Rücklauf | 2.50 |
| Einfacher Rücklauf | 2.10 |
| Doppelfalte | 2.35 |
| Einfachfalte | 1.80 |
Reihenfolge im Dropdown: Wave → Doppelter Rücklauf → Einfacher Rücklauf → Doppelfalte → Einfachfalte.
Kein Einfluss auf die effektive Breite: alle drei decken die volle Schiene ab. Beeinflusst jedoch den Seitensaum-Zuschlag (§5) und die Rücklauf-Zugabe (§4).
Bei Einfachem Rücklauf oder Doppeltem Rücklauf wird die Fertigbreite künstlich angepasst — sowohl für Paar als auch für 1 Teil links/rechts:
fertigBreite ≥ 300 cm → rücklaufZugabe = 10% × fertigBreite fertigBreite < 300 cm → rücklaufZugabe = 30 cm effektiveBreite = fertigBreite + rücklaufZugabe
Grund — bei einer Rücklauf-/Zickzack-Falte steht der Stoff nach hinten heraus; ohne Spielraum werden die Falten beim Schließen flach gezogen und es entstehen Lücken an den Seiten oder in der Mitte (beim Paar).
Aufmaß-Tipp: die Schiene muss mindestens 7–10 cm von der Wand entfernt sein, damit die Falten nicht an der Wand scheuern.
Bahnenware erhält in der Breite keinen Seitensaum-Zuschlag (pro Bahn liegt der Seitensaum innerhalb der Rollenbreite).
benötigteStoffbreite (raumhoch) = effektiveBreite × falte + anzahlTeile × 24 benötigteStoffbreite (bahnenware) = effektiveBreite × falte
rawSchnitthöhe = fertigHöhe + faltenband + untersaum
Auswahl: 8 / 10 / 12 / 15 cm. Default 10 cm.
| Bedingung | Untersaum |
|---|---|
| Lock = Ja | 0 cm (umlocked) |
| Beschwerungskordel = Ja | 2 cm |
| sonst | 15 cm (gedämpfter Untersaum) |
Das Köpfchen (Niederländisch: hoofdje) ist der schmale Stoffstreifen oberhalb des Faltenbands. Es ist eine Konfigurator-Wahl in Schritt 6 — Falte & Aufteilung, die die Atelier-Verarbeitung dokumentiert. Beeinflusst die Schnitthöhe nicht — es taucht weder in rawSchnitthöhe noch im Verschnittverlust auf.
| Faltenwahl | Erlaubte Köpfchen-Werte |
|---|---|
| Wave | 0 (fest, Feld deaktiviert) |
| Einfacher Rücklauf | 0 (fest, Feld deaktiviert) |
| Doppelter Rücklauf | 0 (fest, Feld deaktiviert) |
| Einfachfalte | 0 oder 2,5 mm |
| Doppelfalte | 0 oder 2,5 mm |
Die UI deaktiviert das Feld automatisch, sobald die Falte auf eine Rücklauf- oder Wave-Wahl gesetzt wird. Bei einem Faltenwechsel zu Wave/Rücklauf wird ein zuvor gewählter Wert von 2,5 mm auf 0 zurückgesetzt.
patroonhoogte ist eine Artikel-Eigenschaft, die den vertikalen Rapport in cm dokumentiert, fließt aber nicht in rawSchnitthöhe ein. Der Konfigurator rundet die Schnitthöhe nicht auf einen vollen Rapport — das Atelier beurteilt den Rapport bei der Verarbeitung und bestellt bei Bedarf zusätzlichen Stoff.
Musterstoff wird nie gekippt: kippbar wird auf Nein erzwungen (würde das Muster um 90° drehen). Diese Regel hängt am Feld Muster = Muster, nicht am Wert von patroonhoogte. Bei Feasibility und compute() wird daher der Kippbar-Fallback für Muster-Artikel deaktiviert, unabhängig vom Rapport-Wert.
Stoff rollt vertikal: Rollenhöhe = hoogte_stof (max ~300 cm), die Rollenlängsrichtung (ursprünglich „breedte_stof") ist unbeschränkt → gespeichert als 10000 cm.
Passt, wenn rawSchnitthöhe ≤ hoogte_stof.
anzahlBahnen = 1 gesamtMeter = benötigteStoffbreite ÷ 100
Bei rawSchnitthöhe > hoogte_stof mit kippbarem Uni-Stoff wird der Stoff um 90° gedreht; die ursprüngliche Höhe wird zur Bahnbreite.
kordelVerlust = (beschwerungskordel = Ja) ? 2 cm : 0 bahnBreiteEff = hoogte_stof − kordelVerlust anzahlBahnen = ⌈benötigteStoffbreite ÷ bahnBreiteEff⌉ gesamtMeter = anzahlBahnen × rawSchnitthöhe ÷ 100
Beschwerungskordel beim Kippen: die Kordel wird abgeschnitten (−2 cm in der Bahnbreite).
rawSchnitthöhe > hoogte_stof und (kippbar = Nein oder Muster = Muster) → Artikel wird als „Nicht möglich" markiert.
Stoff rollt horizontal: Rollenbreite = breedte_stof (typisch 140 cm), Länge (ursprünglich „hoogte_stof") unbeschränkt → gespeichert als 10000 cm.
anzahlBahnen = ⌈benötigteStoffbreite ÷ breedte_stof⌉ längePerBahn = rawSchnitthöhe gesamtCm = anzahlBahnen × längePerBahn gesamtMeter_m = gesamtCm ÷ 100
Keine Höhenbeschränkung, kein Kippen.
Optionen: Kein Futter / Halbtransparent / Verdunkelnd. Futterpreis und -farbe erscheinen nur, wenn Futter ≠ Kein Futter.
futterPreis/m¹ = (voering_prijs_per_m1 > 0)
? voering_prijs_per_m1
: prijs_per_m1 × 0.60 (60%-Fallback)
futterKosten = gesamtMeter × futterPreis/m¹
Futter-Farben (5 fiktiv): Weiß, Beige, Taupe, Grau, Anthrazit.
Der Stoffpreis basiert auf dem Verkaufspreis inkl. MwSt., nicht auf dem Einkaufspreis:
stoffPreis = gesamtMeter × verkaufPreis/m¹ gesamtPreis = stoffPreis (+ futterKosten falls zutreffend)
verkoopprijs_per_m1-Feld) — von Victor in der Produktion eingetragen. Dieses Feld hat immer Vorrang.verkoopprijs_per_m1 leer oder 0 ist:
verkaufPreis/m¹ = einkauf × 3, aufgerundet auf xx.95Auto-Beispiel: Einkauf € 12,34 → Verkauf € 37,95.
Implementierung: verkoopPrijs95(inkoop) + getVerkoopPrijs(article) in db.js. In der Aufschlüsselung wird ausdrücklich angegeben, ob der Preis manuell oder auto ist.
Futter rechnet weiterhin auf Einkaufsbasis (kundenspezifischer Preis oder 60%-Fallback vom Einkauf).
Bei jedem Laden wird über seedAfmetingenPlaceholders():
| Typ | Feld | Wert |
|---|---|---|
| Raumhoch (Ja) | breedte_stof | 10000 (= unbeschränkte Rollenlänge) |
| Bahnenware (Nein) | hoogte_stof | 10000 (= unbeschränkte Rollenlänge) |
Im Aside (Artikel-Spezifikationen) zeigen wir für die unbeschränkte Richtung „Nicht relevant" anstelle der Zahl.
wenn effektiveBreite > 600 cm → Warnung: „Gardine in 1 Teil links + 1 Teil rechts aufteilen"
Feste, schreibgeschützte Anzeige pro gewähltem Artikel:
Der Einkaufspreis ist nicht sichtbar (nur Verkaufspreis inkl. MwSt.). Selects im Aside zeigen keinen Dropdown-Pfeil mehr (reine Wertanzeige).
3 aktive Filter:
klaarhoogte + vliesband + onderzoom ≤ hoogte_stof.| Datei | Rolle |
|---|---|
index.html | Konfigurator (Schritte 1–9, Berechnung, Artikel-Aside). |
import.html | CSV-/Excel-Import + Übersicht gespeicherter Artikel. |
db.js | Lese-Schicht auf der Artikelquelle (Build-Zeit data/artikelen.json) + localStorage-Cache, Farbpools, Seed-Migrationen, esc(), verkoopPrijs95(). |
gordijn_configurator.deluge | Zoho Creator Skript — gespiegelt auf index.html Logik. |
start.sh | Lokaler Server (Python http.server oder Node-Fallback). |
berekeningsregels.html | Diese Seite — Zusammenfassung aller Regeln. |
Tabelle gespeicherter Artikel (import.html) zeigt pro Artikel: Artikelnr., Typ, Beschreibung, Stoff-H, Stoff-B (= 10000 bei raumhoch), Muster, Musterhöhe (= 0 bei Uni), Einkauf/m¹, Verkauf/m¹ inkl. MwSt., Schrumpf%, RH, Licht, Futtern, Futter-Preis, Kippbar, D.face, BR, Akust., Besch., Zusammensetzung, Farben.
index.html ist führend für die Business-Logik. Bei jeder Änderung in:
→ gordijn_configurator.deluge ebenfalls im selben Commit aktualisieren.
Der Konfigurator wird an Zoho CRM angebunden (Modul: Products). Die folgende Tabelle mappt unsere internen Feld-Keys auf die Zoho-API-Namen und den Zoho-Feldtyp, der in CRM angelegt werden muss. Die Master-Übersicht steht in db.js (ARTIKEL_FIELDS) und wird in import.html automatisch bei jeder Feld-Erklärung angezeigt.
| Interner Key | Label | Zoho API (Products) | Zoho-Feldtyp |
|---|---|---|---|
artikelnummer | Artikelnummer | Product_Code | Single Line |
gordijn_type | Gardinentyp | Gordijn_Type | Picklist |
omschrijving | Beschreibung | Product_Name | Single Line |
hoogte_stof | Stoffhöhe (cm) | Hoogte_Stof | Number |
breedte_stof | Stoffbreite (cm) | Breedte_Stof | Number |
patroon | Muster | Patroon | Picklist |
patroonhoogte | Musterhöhe (cm) | Patroonhoogte | Decimal |
patroonbreedte | Musterbreite (cm) | Patroonbreedte | Decimal |
prijs_per_m1 | Einkaufspreis (€) + Einheit | Inkoopprijs | Currency |
verkoopprijs_per_m1 | Verkaufspreis inkl. MwSt. (€) + Einheit | Verkoopprijs | Currency |
krimpercentage | Schrumpfprozentsatz (%) | Krimpercentage | Percent |
kamerhoog | Raumhoch | Kamerhoog | Checkbox |
lichtdoorlatenheid | Lichtdurchlässigkeit | Lichtdoorlatenheid | Picklist |
voeren | Futter (default) | Voering_Default | Picklist |
voering_prijs_per_m1 | Futterpreis pro m¹ | Voering_Prijs_M1 | Currency |
kantelbaar | Kippbar | Kantelbaar | Checkbox |
doubleface | Doubleface | Doubleface | Checkbox |
brandvertragend | Schwer entflammbar | Brandvertragend | Checkbox |
akoestiek | Akustikklasse | Akoestiek | Picklist |
verzwaaringskoord | Beschwerungskordel (legacy) | Verzwaaringskoord | Checkbox |
geschikt_voor_verzwaringskoord | Geeignet mit Beschwerungskordel | Geschikt_Met_Verzwaringskoord | Checkbox |
eenheid | Einheit (default m¹) | Eenheid | Picklist |
samenstelling | Zusammensetzung | Samenstelling | Single Line |
geschikte_plooi | Geeignete Falte | Geschikte_Plooi | Multi-Select Picklist |
geschikt_vouwgordijn | Geeignet als Raffrollo | Geschikt_Vouwgordijn | Picklist |
kleuren | Farben | local-only | — |
Geschikte_Plooi und Geschikt_Vouwgordijn sind local-only (nur localStorage); sie haben keine Spalte in der zentralen articles-Quelle.
Das Zoho Creator Skript gordijn_configurator.deluge erwartet dieselben API-Namen auf dem Eingabeformular (input.Inkoopprijs, input.Verkoopprijs, input.Hoogte_Stof, …). Konfigurations-Entscheidungen (KlaarBreedte, KlaarHoogte, Plooi, Stuk, Voering, Verzwaringskoord, Band) sind Formularfelder, keine Products-Felder.
Zwei Artikelfelder bestimmen, welche Verarbeitungsoptionen für einen Stoff erlaubt sind; sie fließen nicht in die Metrage- oder Preisberechnung ein, steuern aber UI-Warnungen.
geschikte_plooi — Multi-Select Picklist mit den Werten aus dem Dropdown Falte: Wave, Doppelter Rücklauf, Einfacher Rücklauf, Doppelfalte, Einfachfalte."Wave, Einfachfalte, Doppelfalte").geschikt_vouwgordijn — Picklist mit Werten Ja, Nein, Ja (ungefüttert).Die Reihenfolge des Falten-Dropdowns entspricht PLOOI_OPTIES in db.js; dies wird von index.html und den Seed-Helpern gemeinsam genutzt. Synchron halten mit gordijn_configurator.deluge (Konstanten plooi_*).