Lab21 — Gordijn · Berekeningsregels

Samenvatting van alle regels die de configurator hanteert. Wijzig altijd zowel index.html (UI + JS) als gordijn_configurator.deluge (Zoho-script) wanneer één van deze regels verandert.

Inhoudsopgave

  1. Configuratie-volgorde
  2. Plooi & plooifactoren
  3. Aantal delen
  4. Retourplooi-marge (Lab21-richtlijn)
  5. Zijzomen (alleen kamerhoog)
  6. Snijhoogte (lengte per baan)
  7. Scenario A — Kamerhoog
  8. Scenario B — Banenstof
  9. Voering
  10. Prijsberekening
  11. Stof-afmetingen normalisatie
  12. Waarschuwingen
  13. Loodveter & verzwaaringskoord
  14. Artikel-specificaties (aside)
  15. Filter-uitleg
  16. Architectuur — bestanden
  17. Synchronisatie-regel
  18. Zoho CRM — veld-mapping
  19. Plooi-geschiktheid & vouwgordijn-flag

1. Configuratie-volgorde

  1. Type gordijn — Overgordijn of Inbetween (filter op artikellijst).
  2. Klaarmaten — KlaarBreedte + KlaarHoogte (cm).
  3. Artikel kiezen — uit gefilterde lijst met feasibility-badge.
  4. Kleur — per artikel (5–16 fictieve kleuren via KLEUR_POOLS).
  5. Bevestiging — Plafond op de dag / Wand op de dag / In de dag.
  6. Plooi & verdeling — plooi, aantal delen, vliesband.
  7. Voering — type, kleur, prijs.
  8. Afwerking & toeslagen — verzwaaringskoord, lock, loodveter.
  9. Bediening — laatste stap (Opstrek L/R, Tuimelen L/R, Middenstroom, Koordloos).

2. Plooi & plooifactoren

PlooiFactor
Wave default2.00
Dubbel retour2.50
Enkel retour2.10
Dubbel2.35
Enkel1.80

Volgorde in dropdown: Wave → Dubbel retour → Enkel retour → Dubbel → Enkel.

3. Aantal delen

Geen invloed op effectieve breedte: alle drie dekken de volledige rail. Wel invloed op zijzomen-toeslag (§5) en op de retour-marge (§4).

4. Retourplooi-marge (Lab21-richtlijn)

Bij Enkel retour of Dubbel retour wordt de klaarbreedte kunstmatig aangepast — voor zowel Stel als 1 deel links/rechts:

klaarbreedte ≥ 300 cm  → retourMarge = 10% × klaarbreedte
klaarbreedte <  300 cm  → retourMarge = 30 cm
effectieveBreedte = klaarbreedte + retourMarge

Reden — bij een retour-/zigzag-plooi steekt de stof naar achteren uit; zonder slack worden de plooien plat getrokken bij sluiten en ontstaan kieren bij de zijkanten of in het midden (bij Stel).

Inmeet-tip: rail moet minimaal 7–10 cm van de wand om te voorkomen dat de plooien tegen de muur schuren.

5. Zijzomen (alleen kamerhoog)

Banenstof krijgt geen zijzoomtoeslag in breedte (per baan zit de zijzoom binnen de rolbreedte).

benodigdeStofbreedte (kamerhoog) = effectieveBreedte × plooi + aantalDelen × 24
benodigdeStofbreedte (banenstof) = effectieveBreedte × plooi

6. Snijhoogte (lengte per baan)

rawSnijhoogte = klaarhoogte + vliesband + onderzoom

6a. Vliesband (bovenzoom)

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

6b. Onderzoom

ConditieOnderzoom
Lock = Ja0 cm (afgelockt)
Verzwaaringskoord = Ja2 cm
anders15 cm (gestoomde onderzoom)

6c. Hoofdje (afwerkings-keuze, valt buiten de berekening)

Het hoofdje is het smalle strookje stof bovenop de plooiband. Het is een configurator-keuze in Stap 6 — Plooi & verdeling die de atelier-afwerking documenteert. Beïnvloedt de snijhoogte niet — het komt niet voor in rawSnijhoogte of in het coupageverlies.

Plooi-keuzeToegestane hoofdje-waarden
Wave0 (vastgezet, veld gedeactiveerd)
Enkel retour0 (vastgezet, veld gedeactiveerd)
Dubbel retour0 (vastgezet, veld gedeactiveerd)
Enkel0 of 2,5 mm
Dubbel0 of 2,5 mm

De UI deactiveert het veld automatisch zodra de plooi op een retour- of Wave-keuze staat. Bij plooiwijziging naar Wave/retour wordt een eerder gekozen 2,5 mm teruggezet naar 0.

6d. Patroon-rapport (informatief, valt buiten de berekening)

patroonhoogte is een artikel-eigenschap die het verticale rapport in cm documenteert, maar telt niet mee in rawSnijhoogte. De configurator rondt de snijhoogte niet af op een heel rapport — het atelier beoordeelt patroon-rapport bij verwerking en bestelt zo nodig extra stof.

Patroon-stof kantelt nooit: kantelbaar wordt geforceerd op Nee (zou het patroon 90° draaien). Deze regel hangt aan het Patroon = Patroon veld, niet aan de waarde van patroonhoogte. Bij feasibility en compute() wordt de kantelbaar-fallback dus uitgeschakeld voor patroon-artikelen, ongeacht de rapport-waarde.

7. Scenario A — Kamerhoog

Stof rolt verticaal: hoogte van de rol = hoogte_stof (max ~300 cm), roleinden-richting (originele "breedte_stof") is onbeperkt → opgeslagen als 10000 cm.

7a. Rechtop (default)

Past wanneer rawSnijhoogte ≤ hoogte_stof.

aantalBanen   = 1
totaalMetrage = benodigdeStofbreedte ÷ 100

7b. Gekanteld (alleen als kantelbaar = Ja, niet bij patroon)

Bij rawSnijhoogte > hoogte_stof met kantelbare uni-stof wordt de stof 90° gedraaid; de oorspronkelijke hoogte wordt baan-breedte.

koordVerlies   = (verzwaaringskoord = Ja) ? 2 cm : 0
baanBreedteEff = hoogte_stof − koordVerlies
aantalBanen    = ⌈benodigdeStofbreedte ÷ baanBreedteEff⌉
totaalMetrage  = aantalBanen × rawSnijhoogte ÷ 100

Verzwaaringskoord bij kanteling: koord wordt weggesneden (−2 cm in baan-breedte).

7c. Niet mogelijk

rawSnijhoogte > hoogte_stof én (kantelbaar = Nee óf patroon = Patroon) → artikel als "Niet mogelijk" gemarkeerd.

8. Scenario B — Banenstof

Stof rolt horizontaal: rolbreedte = breedte_stof (typisch 140 cm), lengte (originele "hoogte_stof") onbeperkt → opgeslagen als 10000 cm.

aantalBanen      = ⌈benodigdeStofbreedte ÷ breedte_stof⌉
lengtePerBaan    = rawSnijhoogte
totaalCm         = aantalBanen × lengtePerBaan
totaalMetrage_m  = totaalCm ÷ 100

Geen hoogte-begrenzing, geen kanteling.

9. Voering

Opties: Geen voering / Semi-transparant / Verduisterend. Voering-prijs en -kleur verschijnen alleen wanneer voering ≠ Geen voering.

voeringPrijs/m¹ = (voering_prijs_per_m1 > 0)
                  ? voering_prijs_per_m1
                  : prijs_per_m1 × 0.60       (60%-fallback)
voeringKosten   = totaalMetrage × voeringPrijs/m¹

Voering-kleuren (5 fictief): Wit, Beige, Taupe, Grijs, Antraciet.

10. Prijsberekening

Stofprijs is gebaseerd op verkoopprijs incl. btw, niet op inkoop:

stofPrijs   = totaalMetrage × verkoopPrijs/m¹
totaalPrijs = stofPrijs (+ voeringKosten als van toepassing)

Verkoopprijs/m¹ — bron-prioriteit

  1. Handmatig (verkoopprijs_per_m1 veld) — door Victor ingevuld in productie. Dit veld heeft altijd voorrang.
  2. Auto-formule — alleen voor testartikelen waar verkoopprijs_per_m1 leeg of 0 is:
    verkoopPrijs/m¹ = inkoop × 3, omhoog afgerond naar xx.95
    Voorbeeld auto: inkoop € 12,34 → verkoop € 37,95.

Implementatie: verkoopPrijs95(inkoop) + getVerkoopPrijs(article) in db.js. In de breakdown wordt expliciet vermeld of de prijs handmatig of auto is.

Voering rekent nog op inkoop-basis (custom prijs of 60% fallback van inkoop).

11. Stof-afmetingen normalisatie

Bij elke load wordt via seedAfmetingenPlaceholders():

TypeVeldWaarde
Kamerhoog (Ja)breedte_stof10000 (= onbeperkte rol-lengte)
Banenstof (Nee)hoogte_stof10000 (= onbeperkte rol-lengte)

In de aside (Artikel specificaties) tonen we voor de onbeperkte richting "Niet relevant" in plaats van het getal.

12. Waarschuwingen

MAX_STUK_BREEDTE_CM = 600

als effectieveBreedte > 600 cm → waarschuwing:
  "verdeel het gordijn in 1 deel links + 1 deel rechts"

Hoogte overschreden

13. Loodveter & verzwaaringskoord

14. Artikel-specificaties (aside)

Vaste, alleen-lezen weergave per gekozen artikel:

Inkoopprijs is niet zichtbaar (alleen verkoopprijs incl. btw). Selects in de aside tonen geen dropdown-pijl meer (puur waarde-display).

15. Filter-uitleg (boven artikellijst)

3 actieve filters:

  1. Gordijn type (gekozen in stap 1).
  2. Hoogtegrens voor kamerhoog: klaarhoogte + vliesband + onderzoom ≤ hoogte_stof.
  3. Verzw. (verzwaaringskoord) bepaalt onderzoom: 2 cm of 15 cm; bij Lock = 0.

16. Architectuur — bestanden

BestandRol
index.htmlConfigurator (stappen 1–9, berekening, artikel-aside).
import.htmlCSV/Excel-import + opgeslagen artikelen-overzicht.
db.jsRead-laag op de artikelbron (build-time data/artikelen.json) + localStorage-cache, kleuren-pools, seed-migraties, esc(), verkoopPrijs95().
gordijn_configurator.delugeZoho Creator script — gespiegeld op index.html logica.
start.shLokale server (Python http.server of Node fallback).
berekeningsregels.htmlDeze pagina — samenvatting van alle regels.

Opgeslagen artikelen-tabel (import.html) toont per artikel: Artikelnr, Type, Omschrijving, H stof, B stof (= 10000 voor kamerhoog), Patroon, Patroonhoogte (= 0 bij Uni), Inkoop/m¹, Verkoop/m¹ incl. btw, Krimp%, KH, Licht, Voeren, Voer.prijs, Kantelbaar, D.face, BR, Akoest, Verzw, Samenstelling, Kleuren.

17. Synchronisatie-regel

index.html is leidend voor de business-logica. Bij elke wijziging in:

gordijn_configurator.deluge ook bijwerken in dezelfde commit.

18. Zoho CRM — veld-mapping

De configurator wordt aangesloten op Zoho CRM (module: Products). Onderstaande tabel mapt onze interne veld-keys op de Zoho API-namen en het Zoho-veldtype dat in CRM aangemaakt moet worden. Het master-overzicht staat in db.js (ARTIKEL_FIELDS) en wordt in import.html automatisch getoond bij elke veld-uitleg.

Interne keyLabelZoho API (Products)Zoho veldtype
artikelnummerArtikelnummerProduct_CodeSingle Line
gordijn_typeGordijn typeGordijn_TypePicklist
omschrijvingOmschrijvingProduct_NameSingle Line
hoogte_stofHoogte stof (cm)Hoogte_StofNumber
breedte_stofBreedte stof (cm)Breedte_StofNumber
patroonPatroonPatroonPicklist
patroonhoogtePatroonhoogte (cm)PatroonhoogteDecimal
patroonbreedtePatroonbreedte (cm)PatroonbreedteDecimal
prijs_per_m1Inkoopprijs (€) + EenheidInkoopprijsCurrency
verkoopprijs_per_m1Verkoopprijs incl. btw (€) + EenheidVerkoopprijsCurrency
krimpercentageKrimpercentage (%)KrimpercentagePercent
kamerhoogKamerhoogKamerhoogCheckbox
lichtdoorlatenheidLichtdoorlatenheidLichtdoorlatenheidPicklist
voerenVoeren (default)Voering_DefaultPicklist
voering_prijs_per_m1Voering prijs per m¹Voering_Prijs_M1Currency
kantelbaarKantelbaarKantelbaarCheckbox
doublefaceDoublefaceDoublefaceCheckbox
brandvertragendBrandvertragendBrandvertragendCheckbox
akoestiekAkoestiek klasseAkoestiekPicklist
verzwaaringskoordVerzwaaringskoord (legacy)VerzwaaringskoordCheckbox
geschikt_voor_verzwaringskoordGeschikt met verzwaringskoordGeschikt_Met_VerzwaringskoordCheckbox
eenheidEenheid (default m¹)EenheidPicklist
samenstellingSamenstellingSamenstellingSingle Line
geschikte_plooiGeschikte plooiGeschikte_PlooiMulti-Select Picklist
geschikt_vouwgordijnGeschikt als vouwgordijnenGeschikt_VouwgordijnPicklist
kleurenKleurenlocal-only

Geschikte_Plooi en Geschikt_Vouwgordijn zijn local-only (alleen localStorage); ze hebben geen kolom in de centrale articles-bron.

Zoho Creator (Deluge) form-velden

Het Zoho Creator script gordijn_configurator.deluge verwacht dezelfde API-namen op het input-formulier (input.Inkoopprijs, input.Verkoopprijs, input.Hoogte_Stof, …). Configuratie-keuzes (KlaarBreedte, KlaarHoogte, Plooi, Stuk, Voering, Verzwaringskoord, Band) zijn formulier-velden, geen Products-velden.

19. Plooi-geschiktheid & vouwgordijn-flag

Twee artikel-velden bepalen welke verwerkingen voor een stof zijn toegestaan; ze zijn niet in de metrage- of prijsberekening, maar sturen wel UI-waarschuwingen.

Geschikte plooi

Geschikt als vouwgordijnen

Volgorde plooi-dropdown matcht PLOOI_OPTIES in db.js; deze wordt gedeeld door index.html en de seed-helpers. Synchroon houden met gordijn_configurator.deluge (constanten plooi_*).

↑ Terug naar boven