Zápis konfigurace bezpečnostních dveří do ERP — struktura exportu, generování kusovníku (BOM) a 7-krokový postup od konfigurace po expedici.
Každá dokončená konfigurace se uloží do tabulky quotes jako JSONB snímek. Tento záznam obsahuje kompletní popis dveří včetně cenového rozpadu a zákaznických údajů. Slouží jako kanonický zdroj dat pro export do libovolného ERP systému.
{
"id": 42,
"status": "submitted",
// Zákaznické údaje
"customerName": "Jan Novák",
"customerEmail": "jan@example.com",
"customerPhone": "+420 777 123 456",
"customerNote": "Prosím montáž v pondělí",
// Kompletní konfigurace dveří (JSONB snímek)
"configuration": {
"doorModel": {
"id": 5, "slug": "sd-102-f", "name": "SD 102 F",
"securityClass": 3, "fireRating": "EI 30"
},
"doorSize": {
"id": 2, "label": "197 × 90",
"widthCm": 90, "heightCm": 197, "price": 24900
},
"isAtypicalSize": false,
"frame": {
"id": 3, "slug": "sf2a-ocel",
"name": "SF2A ocelová", "price": 4200
},
"innerSurface": {
"id": 15, "slug": "laminate-dub",
"name": "Laminát dub", "category": "laminate", "price": 1200
},
"outerSurface": {
"id": 15, "slug": "laminate-dub",
"name": "Laminát dub", "category": "laminate", "price": 0
},
"hardware": {
"id": 8, "slug": "rn1-nerez",
"name": "RN1 nerez", "price": 2900
},
"cylinder": {
"id": 1, "slug": "evva-eps", "name": "EVVA EPS",
"length": "31/36", "pinCount": 5, "price": 1850
},
"cylinderExtras": [
{ "id": 2, "name": "Náhradní klíč EVVA EPS", "price": 350 }
],
"accessories": [
{ "id": 12, "slug": "electronic-peephole-veiu-s31",
"name": "Elektronické kukátko VEIU S31", "price": 7100 }
],
"installations": [
{ "id": 5, "slug": "peephole-setup",
"name": "Zapojení a oživení elektronického kukátka Veiu", "price": 1190 },
{ "id": 1, "slug": "professional-install",
"name": "Odborná montáž", "price": 6500 }
],
"surcharges": []
},
// Cenový rozpad (snímek v okamžiku odeslání)
"priceBreakdown": {
"basePrice": 24900,
"framePrice": 4200,
"innerSurfacePrice": 1200,
"outerSurfacePrice": 0,
"hardwarePrice": 2900,
"cylinderPrice": 1850,
"cylinderExtrasPrice": 350,
"accessoriesPrice": 7100,
"installationsPrice": 7690,
"surchargesPrice": 0,
"totalPrice": 50190
},
"totalPrice": 50190,
"createdAt": "2026-03-03T10:30:00Z"
}
Celá konfigurace je uložena jako JSONB v PostgreSQL. Ceny jsou zafixovány v momentě objednávky — i když se ceník později změní, historická poptávka zůstává neměnná. Z JSONB snímku lze kdykoli rekonstruovat kompletní kusovník (BOM) pro výrobu.
Zákazník může nakonfigurovat více dveří najednou. Každá položka košíku je nezávislá konfigurace s vlastním cenovým rozpadem. Při odeslání objednávky se vytvoří pole konfigurací — každá konfigurace odpovídá jedné pozici (řádku) v objednávce ERP.
JSONB konfigurace se mapuje na standardní ERP entity. Následující tabulka ukazuje, jak jednotlivé části záznamu odpovídají konceptům v typickém ERP systému (SAP, Helios, Pohoda, Money S5 apod.).
| JSONB pole | ERP entita | Popis |
|---|---|---|
| quotes.id | Sales Order (hlavička) | Jedna poptávka = jedna objednávka; zákaznické údaje v hlavičce |
| configuration[] | Pozice objednávky | Každé dveře v košíku = jeden řádek objednávky s vlastním BOM |
| doorModel + doorSize | Hlavní výrobek | Bezpečnostní dveře jako hotový výrobek; atypický rozměr = přirážka 30 % |
| frame | BOM řádek: zárubeň | Typ zárubně vázaný na model a rozměr dveří |
| innerSurface / outerSurface | BOM řádky: povrchy | Vnitřní a vnější strana; při shodném povrchu se druhá strana účtuje za 0 Kč |
| hardware | BOM řádek: kování | Bezpečnostní kování s vazbou na kompatibilitu modelu |
| cylinder + cylinderExtras | BOM řádky: vložka + přísl. | Cylindrická vložka EVVA + náhradní klíče, karta apod. |
| accessories[] | Doplňkové položky BOM | Kukátko, řetízek, těsnicí lišta — baleno samostatně nebo předmontováno |
| installations[] | Servisní položky | Nehmotné položky (montáž, zapojení) — plánovány jako servisní zakázky |
| surcharges[] | Příplatkové řádky | Speciální úpravy, exteriér, kouřotěsnost, zrychlená dodávka aj. |
| priceBreakdown | Cenová kalkulace | Snímek pro porovnání s ERP ceníkem; slouží jako revizní stopa |
Z každé konfigurace dveří lze automaticky sestavit kusovník pro výrobu. Každá položka JSONB snímku odpovídá jednomu řádku BOM s vlastním SKU:
// BOM pro jedny dveře (z konfigurace výše)
BOM #Q-2026-042
├── NEXT-SD102F-197x90 // Hlavní výrobek: SD 102 F, 197×90
│ ├── NEXT-SF2A-197x90 // Zárubeň: SF2A ocelová
│ ├── NEXT-LAM-DUB-INNER // Povrch vnitřní: Laminát dub
│ ├── NEXT-LAM-DUB-OUTER // Povrch vnější: Laminát dub (0 Kč = stejný)
│ ├── NEXT-RN1-NEREZ // Kování: RN1 nerez
│ ├── NEXT-EVVA-EPS-31-36 // Vložka: EVVA EPS 31/36
│ └── NEXT-KEY-EPS // Přísl. vložky: náhradní klíč
├── Příslušenství
│ └── NEXT-VEIU-S31 // Elektronické kukátko VEIU S31
└── Služby
├── NEXT-SVC-VEIU // Zapojení kukátka
└── NEXT-SVC-MONTAZ // Odborná montáž
Pole slug u každé komponenty slouží jako základ pro SKU kód. Navrhovaná konvence pro propojení s ERP katalogem:
BOM slouží jako kompletační list pro výrobu. Každá položka = jeden díl k montáži. Povrchy specifikují obě strany (vnitřní/vnější) — klíčové pro výrobu. Atypické rozměry obsahují přesné rozměry pro řez. Příslušenství je baleno samostatně nebo předmontováno. Montáže jsou plánovány jako servisní zakázky.
Celkový tok dat od konfigurace zákazníkem po expedici hotových dveří (7 kroků):
WEB = akce v konfigurátoru ADMIN = akce v admin panelu DB = zápis do PostgreSQL ERP = akce v ERP systému WEB → ERP = přenos dat mezi systémy.
Každá poptávka v tabulce quotes prochází definovanými stavy. Stavové přechody řídí admin panel a webhook notifikace z ERP:
submitted ──── Zákazník odeslal poptávku
│
▼
reviewed ──── Obchodník přezkoumal konfiguraci
│
▼
quoted ──── Cenová nabídka odeslána zákazníkovi
│
├──▶ rejected ── Zákazník odmítl / obchodník zamítl
│
▼
accepted ──── Zákazník akceptoval → export do ERP
│
▼
in_production ─ ERP: výroba zahájena (webhook)
│
▼
shipped ──── ERP: expedováno (webhook)
Konfigurátor neřeší konkrétní přenosový mechanismus do ERP (REST API, CSV export, přímé DB propojení). Důležitý je formát dat a logická struktura zápisu. Všechna data jsou uložena v PostgreSQL jako JSONB, odkud je lze transformovat do libovolného ERP formátu:
Konfigurace je self-contained — celý kusovník lze rekonstruovat z jediného JSONB záznamu bez nutnosti dotazovat další tabulky.