Lab21 — Gardine · Berechnungsregeln

Zusammenfassung aller Regeln, die der Konfigurator anwendet. Aktualisieren Sie bei jeder Änderung einer dieser Regeln stets sowohl index.html (UI + JS) als auch gordijn_configurator.deluge (Zoho-Skript).

Inhaltsverzeichnis

  1. Konfigurations-Reihenfolge
  2. Falte & Faltenfaktoren
  3. Anzahl Teile
  4. Rücklauffalten-Zugabe (Lab21-Richtlinie)
  5. Seitensäume (nur raumhoch)
  6. Schnitthöhe (Länge pro Bahn)
  7. Szenario A — Raumhoch
  8. Szenario B — Bahnenware
  9. Futter
  10. Preisberechnung
  11. Stoff-Maße Normalisierung
  12. Warnungen
  13. Bleiband & Beschwerungskordel
  14. Artikel-Spezifikationen (Aside)
  15. Filter-Erklärung
  16. Architektur — Dateien
  17. Synchronisations-Regel
  18. Zoho CRM — Feld-Mapping
  19. Falten-Eignung & Raffrollo-Flag

1. Konfigurations-Reihenfolge

  1. Gardinen-Typ — Dekoschal oder Inbetween (Filter auf der Artikelliste).
  2. Fertigmaße — FertigBreite + FertigHöhe (cm).
  3. Artikel wählen — aus der gefilterten Liste mit Machbarkeits-Badge.
  4. Farbe — pro Artikel (5–16 fiktive Farben über KLEUR_POOLS).
  5. Befestigung — Deckenmontage auf der Wand / Wandmontage auf der Wand / Laibungsmontage (in der Laibung).
  6. Falte & Aufteilung — Falte, Anzahl Teile, Faltenband.
  7. Futter — Typ, Farbe, Preis.
  8. Verarbeitung & Zuschläge — Beschwerungskordel, Lock, Bleiband.
  9. Bedienung — letzter Schritt (Aufzug L/R, Wende L/R, Mittelzug, Schnurlos).

2. Falte & Faltenfaktoren

FalteFaktor
Wave default2.00
Doppelter Rücklauf2.50
Einfacher Rücklauf2.10
Doppelfalte2.35
Einfachfalte1.80

Reihenfolge im Dropdown: Wave → Doppelter Rücklauf → Einfacher Rücklauf → Doppelfalte → Einfachfalte.

3. Anzahl Teile

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).

4. Rücklauffalten-Zugabe (Lab21-Richtlinie)

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.

5. Seitensäume (nur raumhoch)

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

6. Schnitthöhe (Länge pro Bahn)

rawSchnitthöhe = fertigHöhe + faltenband + untersaum

6a. Faltenband (Obersaum)

Auswahl: 8 / 10 / 12 / 15 cm. Default 10 cm.

6b. Untersaum

BedingungUntersaum
Lock = Ja0 cm (umlocked)
Beschwerungskordel = Ja2 cm
sonst15 cm (gedämpfter Untersaum)

6c. Köpfchen (Verarbeitungs-Wahl, außerhalb der Berechnung)

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.

FaltenwahlErlaubte Köpfchen-Werte
Wave0 (fest, Feld deaktiviert)
Einfacher Rücklauf0 (fest, Feld deaktiviert)
Doppelter Rücklauf0 (fest, Feld deaktiviert)
Einfachfalte0 oder 2,5 mm
Doppelfalte0 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.

6d. Muster-Rapport (informativ, außerhalb der Berechnung)

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.

7. Szenario A — Raumhoch

Stoff rollt vertikal: Rollenhöhe = hoogte_stof (max ~300 cm), die Rollenlängsrichtung (ursprünglich „breedte_stof") ist unbeschränkt → gespeichert als 10000 cm.

7a. Aufrecht (Default)

Passt, wenn rawSchnitthöhe ≤ hoogte_stof.

anzahlBahnen   = 1
gesamtMeter    = benötigteStoffbreite ÷ 100

7b. Gekippt (nur wenn kippbar = Ja, nicht bei Muster)

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).

7c. Nicht möglich

rawSchnitthöhe > hoogte_stof und (kippbar = Nein oder Muster = Muster) → Artikel wird als „Nicht möglich" markiert.

8. Szenario B — Bahnenware

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.

9. Futter

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.

10. Preisberechnung

Der Stoffpreis basiert auf dem Verkaufspreis inkl. MwSt., nicht auf dem Einkaufspreis:

stoffPreis  = gesamtMeter × verkaufPreis/m¹
gesamtPreis = stoffPreis (+ futterKosten falls zutreffend)

Verkaufspreis/m¹ — Quellen-Priorität

  1. Manuell (verkoopprijs_per_m1-Feld) — von Victor in der Produktion eingetragen. Dieses Feld hat immer Vorrang.
  2. Auto-Formel — nur für Testartikel, bei denen verkoopprijs_per_m1 leer oder 0 ist:
    verkaufPreis/m¹ = einkauf × 3, aufgerundet auf xx.95
    Auto-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).

11. Stoff-Maße Normalisierung

Bei jedem Laden wird über seedAfmetingenPlaceholders():

TypFeldWert
Raumhoch (Ja)breedte_stof10000 (= unbeschränkte Rollenlänge)
Bahnenware (Nein)hoogte_stof10000 (= unbeschränkte Rollenlänge)

Im Aside (Artikel-Spezifikationen) zeigen wir für die unbeschränkte Richtung „Nicht relevant" anstelle der Zahl.

12. Warnungen

MAX_STUK_BREEDTE_CM = 600

wenn effektiveBreite > 600 cm → Warnung:
  „Gardine in 1 Teil links + 1 Teil rechts aufteilen"

Höhe überschritten

13. Bleiband & Beschwerungskordel

14. Artikel-Spezifikationen (Aside)

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).

15. Filter-Erklärung (über Artikelliste)

3 aktive Filter:

  1. Gardinentyp (in Schritt 1 gewählt).
  2. Höhengrenze für raumhoch: klaarhoogte + vliesband + onderzoom ≤ hoogte_stof.
  3. Besch. (Beschwerungskordel) bestimmt den Untersaum: 2 cm oder 15 cm; bei Lock = 0.

16. Architektur — Dateien

DateiRolle
index.htmlKonfigurator (Schritte 1–9, Berechnung, Artikel-Aside).
import.htmlCSV-/Excel-Import + Übersicht gespeicherter Artikel.
db.jsLese-Schicht auf der Artikelquelle (Build-Zeit data/artikelen.json) + localStorage-Cache, Farbpools, Seed-Migrationen, esc(), verkoopPrijs95().
gordijn_configurator.delugeZoho Creator Skript — gespiegelt auf index.html Logik.
start.shLokaler Server (Python http.server oder Node-Fallback).
berekeningsregels.htmlDiese 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.

17. Synchronisations-Regel

index.html ist führend für die Business-Logik. Bei jeder Änderung in:

gordijn_configurator.deluge ebenfalls im selben Commit aktualisieren.

18. Zoho CRM — Feld-Mapping

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 KeyLabelZoho API (Products)Zoho-Feldtyp
artikelnummerArtikelnummerProduct_CodeSingle Line
gordijn_typeGardinentypGordijn_TypePicklist
omschrijvingBeschreibungProduct_NameSingle Line
hoogte_stofStoffhöhe (cm)Hoogte_StofNumber
breedte_stofStoffbreite (cm)Breedte_StofNumber
patroonMusterPatroonPicklist
patroonhoogteMusterhöhe (cm)PatroonhoogteDecimal
patroonbreedteMusterbreite (cm)PatroonbreedteDecimal
prijs_per_m1Einkaufspreis (€) + EinheitInkoopprijsCurrency
verkoopprijs_per_m1Verkaufspreis inkl. MwSt. (€) + EinheitVerkoopprijsCurrency
krimpercentageSchrumpfprozentsatz (%)KrimpercentagePercent
kamerhoogRaumhochKamerhoogCheckbox
lichtdoorlatenheidLichtdurchlässigkeitLichtdoorlatenheidPicklist
voerenFutter (default)Voering_DefaultPicklist
voering_prijs_per_m1Futterpreis pro m¹Voering_Prijs_M1Currency
kantelbaarKippbarKantelbaarCheckbox
doublefaceDoublefaceDoublefaceCheckbox
brandvertragendSchwer entflammbarBrandvertragendCheckbox
akoestiekAkustikklasseAkoestiekPicklist
verzwaaringskoordBeschwerungskordel (legacy)VerzwaaringskoordCheckbox
geschikt_voor_verzwaringskoordGeeignet mit BeschwerungskordelGeschikt_Met_VerzwaringskoordCheckbox
eenheidEinheit (default m¹)EenheidPicklist
samenstellingZusammensetzungSamenstellingSingle Line
geschikte_plooiGeeignete FalteGeschikte_PlooiMulti-Select Picklist
geschikt_vouwgordijnGeeignet als RaffrolloGeschikt_VouwgordijnPicklist
kleurenFarbenlocal-only

Geschikte_Plooi und Geschikt_Vouwgordijn sind local-only (nur localStorage); sie haben keine Spalte in der zentralen articles-Quelle.

Zoho Creator (Deluge) Formularfelder

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.

19. Falten-Eignung & Raffrollo-Flag

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.

Geeignete Falte

Geeignet als Raffrollo

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_*).

↑ Nach oben