[{"data":1,"prerenderedAt":846},["ShallowReactive",2],{"blog-b2b-pricing-engine-hu":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":24,"sources":33,"cover":70,"og":71,"expertise":72,"locales":73,"lang":76,"title":77,"description":78,"coverAlt":79,"metaTitle":80,"takeaways":81,"faq":87,"toc":103,"blocks":134,"others":573},"b2b-pricing-engine","2026-10-07",12,"web",[9,10,11,12,13],"Pricing","Spryker","SAP","Caching","VAT",[15,16,17,18,19,20,21,22,23],"b2b pricing engine","customer specific pricing b2b","spryker price dimensions customer specific","sap condition technique pricing","commercetools price selection","price cache invalidation customer group","b2b volume pricing tiers","price audit trail explainability","vat rounding invoice line items",[25,27,30],{"name":9,"url":26},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPricing",{"name":28,"url":29},"Value-added tax","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FValue-added_tax",{"name":31,"url":32},"Cache invalidation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCache_invalidation",[34,37,40,43,46,49,52,55,58,61,64,67],{"title":35,"url":36},"Spryker docs: prices feature overview (Sep 2026)","https:\u002F\u002Fraw.githubusercontent.com\u002Fspryker\u002Fspryker-docs\u002Fmaster\u002Fdocs\u002Fpbc\u002Fall\u002Fprice-management\u002Flatest\u002Fbase-shop\u002Fprices-feature-overview\u002Fprices-feature-overview.md",{"title":38,"url":39},"Spryker docs: price explosion and ERP-owned pricing in B2B (Sep 2026)","https:\u002F\u002Fraw.githubusercontent.com\u002Fspryker\u002Fspryker-docs\u002Fmaster\u002Fdocs\u002Fpbc\u002Fall\u002Fprice-management\u002Flatest\u002Fbase-shop\u002Ftutorials-and-howtos\u002Fhandle-price-explosion-and-erp-owned-pricing-in-b2b.md",{"title":41,"url":42},"Spryker docs: volume prices overview","https:\u002F\u002Fraw.githubusercontent.com\u002Fspryker\u002Fspryker-docs\u002Fmaster\u002Fdocs\u002Fpbc\u002Fall\u002Fprice-management\u002Flatest\u002Fbase-shop\u002Fprices-feature-overview\u002Fvolume-prices-overview.md",{"title":44,"url":45},"commercetools docs: pricing and discounts overview","https:\u002F\u002Fdocs.commercetools.com\u002Fapi\u002Fpricing-and-discounts-overview",{"title":47,"url":48},"SAP Learning: introducing the condition technique","https:\u002F\u002Flearning.sap.com\u002Fcourses\u002Fconfiguring-pricing-in-sap-s-4hana-sales\u002Fintroducing-the-condition-technique_dce0f313-dee6-470e-8851-3f1773cb5d45",{"title":50,"url":51},"Pimcore docs: price systems and getting prices (2026.3)","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FEcommerce_Framework\u002FWorking_with_Prices\u002FPrice_Systems_and_getting_Prices\u002F",{"title":53,"url":54},"Adobe Experience League: shared catalog pricing structure (Oct 2026)","https:\u002F\u002Fexperienceleague.adobe.com\u002Fen\u002Fdocs\u002Fcommerce-admin\u002Fb2b\u002Fshared-catalogs\u002Fdefine\u002Fcatalog-shared-pricing-structure",{"title":56,"url":57},"Shopify Help Center: B2B quantity rules and volume pricing","https:\u002F\u002Fhelp.shopify.com\u002Fen\u002Fmanual\u002Fb2b\u002Fcatalogs\u002Fquantity-pricing",{"title":59,"url":60},"Varnish libvmod-xkey README","https:\u002F\u002Fraw.githubusercontent.com\u002Fvarnish\u002Flibvmod-xkey\u002Fmaster\u002FREADME.rst",{"title":62,"url":63},"Opinion of the Advocate General in Case C-484\u002F06 (Koninklijke Ahold)","https:\u002F\u002Feur-lex.europa.eu\u002Flegal-content\u002FEN\u002FTXT\u002FHTML\u002F?uri=CELEX:62006CC0484",{"title":65,"url":66},"HMRC internal manual VATREC12030: rounding of VAT","https:\u002F\u002Fwww.gov.uk\u002Fhmrc-internal-manuals\u002Fvat-trader-records\u002Fvatrec12030",{"title":68,"url":69},"Playwright docs: snapshot testing","https:\u002F\u002Fplaywright.dev\u002Fdocs\u002Ftest-snapshots","\u002Fimages\u002Fblog\u002Fb2b-pricing-engine\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fb2b-pricing-engine\u002Fog.jpg","b2b-ecommerce-developer",[74,75,76],"en","de","hu","B2B árképző motorok: ügyfélspecifikus árak, gyorsítótár és audit","Hogyan oldják fel a B2B platformok az ügyfélspecifikus árakat, hogyan cache-elhetők szivárgás nélkül, magyarázhatók vitában, tesztelhetők és kerekíthetők.","Négy árcédula lépcsőzetesen csökkenve, az első kiemelve.","B2B árképzés: cache és audit · Balázs Csorba",[82,83,84,85,86],"Egy B2B ár akár hét dimenziótól függ: ügyfél, ügyfélcsoport vagy cég, szerződés, régió, mennyiségi sáv, pénznem és érvényességi dátum; a motor a legspecifikusabb illeszkedő szabályt választja, és egy alapárra esik vissza.","A platformok dokumentálják a feloldási sorrendet: az SAP hozzáférési sorrendjei a specifikustól az általános felé keresik a kondíciótáblákat, a commercetools nyolclépcsős visszaesést használ, ahol egy lépcsőn belül a legolcsóbb ár nyer, a Spryker pedig a konkrét termékről az absztraktra esik vissza.","A személyre szabott árakat árlistánként vagy ügyfélcsoportonként cache-elje, szerződésváltozáskor címke alapján ürítsen, a pénztárnál ellenőrizze újra az árat, és a cache soha ne legyen egy ár egyetlen példánya.","Rendeléskor tároljon árpillanatképet a nyertes szabállyal, annak verziójával, az adókulccsal és a kerekítési móddal, hogy egy hónapokkal későbbi vita keresés legyen, ne rekonstrukció.","Az árakat minden import után arany mátrixszal és tulajdonságalapú invariánsokkal tesztelje, és írjon le egyetlen kerekítési szabályt, amelyen a webshop, az ERP és a számla osztozik.",[88,91,94,97,100],{"q":89,"a":90},"Mi az a B2B árképző motor?","Az a komponens, amely feloldja, milyen nettó árat fizet egy adott üzleti ügyfél egy cikkszámért, figyelembe véve az ügyfelet, a csoportot, a szerződést, a régiót, a mennyiséget, a pénznemet és a dátumot. Megkeresi a legspecifikusabb érvényes szabályt, és általános árakra esik vissza. Sok felépítésben az ERP tartja a szabályokat, a webshop pedig gyors olvasási másolatot.",{"q":92,"a":93},"Hogyan lehet biztonságosan cache-elni az ügyfélspecifikus árakat?","Minden árat befolyásoló dimenziót, többnyire az árlistát vagy az ügyfélcsoportot, tegye a cache-kulcsba, soha ne csak az URL-t, és soha ne a felhasználói azonosítót. Címkézze a válaszokat cikkszám és árlista szerint, szerződésváltozáskor címkével ürítsen, a pénztárnál ellenőrizze újra az árat, és a hiteles árat tartsa a cache-en kívül.",{"q":95,"a":96},"Hogyan határozza meg az SAP az árat?","A kondíciótechnikával. Az árképzési eljárást az értékesítési terület, az értékesítési bizonylatfajta és a megrendelő határozza meg. Minden kondíciófajtához tartozik egy hozzáférési sorrend, amely a legspecifikusabbtól a legáltalánosabb kulcsig keresi a kondíciótáblákat, amíg érvényes rekordot nem talál, a mennyiségi skálák pedig kiválasztják a skálafokot.",{"q":98,"a":99},"Mit tároljon egy rendelés, hogy később megmagyarázható legyen az ára?","Rendelési tételenként egy pillanatképet: a feloldott egységárat és pénznemet, a nyertes szabályt azonosítóval és verzióval, az alulmaradt jelölteket, a mennyiségi sávot, az adókulcsot, a kerekítési módot, valamint azt, honnan jött az ár, és abban a pillanatban mennyire volt friss.",{"q":101,"a":102},"Tételenként vagy számlánként kell kerekíteni az áfát?","Az uniós héairányelvek nem szabályozzák kifejezetten a kerekítést, ezért a nemzeti szabályok érvényesek; a brit HMRC például a 0,5 penny alatti részt lefelé, a 0,5 pennyt vagy többet felfelé kerekíti. Válasszon dokumentált szabályt, amelyet az adótanácsadója elfogad, és alkalmazza azonosan a webshopban, az ERP-ben és a számlán. Nettó B2B számlázásnál a torzulások jóval kisebbek, mint bruttó kiskereskedelmi áraknál.",[104,107,110,113,116,119,122,125,128,131],{"id":105,"title":106},"how-b2b-prices-get-decided","Hogyan dől el egy B2B ár?",{"id":108,"title":109},"where-prices-live-and-the-resolution-order","Hol élnek az árak, és milyen sorrendben oldódnak fel",{"id":111,"title":112},"platform-support-compared","Platformok összehasonlítva",{"id":114,"title":115},"caching-personalized-prices","Személyre szabott árak cache-elése szivárgás nélkül",{"id":117,"title":118},"auditing-and-explainability","Egy ár auditálása és magyarázata",{"id":120,"title":121},"testing-price-logic-with-golden-snapshots","Az árlogika tesztelése arany pillanatképekkel",{"id":123,"title":124},"vat-rounding-and-price-mode-pitfalls","Áfa, kerekítés és árképzési módok buktatói",{"id":126,"title":127},"when-not-to-build-a-pricing-engine","Mikor ne építsen saját árképző motort",{"id":129,"title":130},"checklist","Ellenőrzőlista, mielőtt az árakhoz nyúl",{"id":132,"title":133},"sources","Források",[135,144,158,161,164,203,210,211,219,225,232,238,249,256,257,260,337,347,348,351,382,385,389,390,393,396,399,407,414,415,429,431,439,442,443,448,460,471,483,484,487,490,498,499,502,522,534,535],{"type":136,"content":137},"paragraph",[138,139,143],"Egy ",{"tag":140,"children":141},"strong",[142],"B2B árképző motor"," dönti el, milyen nettó árat lát egy bejelentkezett vevő egy cikkszámnál attól függően, ki ő, milyen szerződése van a cégének, hol vásárol, hány egységet rendel, milyen pénznemben és melyik napon. A számítás a könnyebbik fele. A nehezebb fele az üzemeltetés: ügyfelenként eltérő árakat úgy cache-elni, hogy ne lássa őket rossz ügyfél, egy árat három hónappal később egy vitában megmagyarázni, és az áfát ugyanúgy kerekíteni, ahogy a számla fogja.",{"type":136,"content":145},[146,147,152,153,157],"Ez a cikk végigveszi, hogyan oldják fel a nagy platformok az ügyfélspecifikus árakat (Spryker, Pimcore, az SAP kondíciótechnika, commercetools, Adobe Commerce és Shopify B2B), majd a gyorsítótárazással, az audittal, a teszteléssel és az áfával foglalkozik. Hogy egy konfigurátor hogyan áraz opciókat, azt a ",{"tag":148,"to":149,"children":150},"link","\u002Fblog\u002Fheadless-product-configurator-b2b",[151],"headless termékkonfigurátorok B2B-ben"," című cikk írja le; hogy bejelentkezés mögött hogyan jelennek meg az árak strukturált adatként, azt a ",{"tag":148,"to":154,"children":155},"\u002Fblog\u002Fschema-org-structured-data-b2b-shop",[156],"schema.org strukturált adatok B2B webshopokhoz"," című.",{"type":159,"level":160,"id":105,"text":106},"heading",2,{"type":136,"content":162},[163],"Egy B2B árat általában hét dimenzió határoz meg: az ügyfél, az ügyfélcsoport vagy cég, a szerződés, a régió vagy értékesítési csatorna, a mennyiségi sáv, a pénznem és az érvényességi dátum. Az árképző motor azt a legspecifikusabb szabályt keresi, amely mindegyikre illik, és lépésenként egy általános alapárra esik vissza, ha nincs specifikusabb.",{"type":165,"ordered":166,"items":167},"list",false,[168,173,178,183,188,193,198],[169,172],{"tag":140,"children":170},[171],"Ügyfél",": egyetlen vevői fiókra szóló egyedi ár, gyakran néhány kulcsfontosságú cikkszámra.",[174,177],{"tag":140,"children":175},[176],"Ügyfélcsoport vagy cég",": egy szegmens közös árlistája, például viszonteladóké, kivitelezőké vagy egy cég összes leányvállalatáé.",[179,182],{"tag":140,"children":180},[181],"Szerződés",": tárgyalt megállapodás érvényességi idővel, néha saját mennyiségi vállalásokkal.",[184,187],{"tag":140,"children":185},[186],"Régió vagy csatorna",": ország, áruház vagy értékesítési csatorna, amely az adózási kezelést is eldönti.",[189,192],{"tag":140,"children":190},[191],"Mennyiségi sáv",": az a skálafok, amelyet a rendelt mennyiség elér.",[194,197],{"tag":140,"children":195},[196],"Pénznem",": az árakat pénznemenként tartják karban, nem menet közben váltják át.",[199,202],{"tag":140,"children":200},[201],"Érvényességi dátum",": kezdő és záró dátum, hogy a következő negyedév árai előre betölthetők legyenek.",{"type":136,"content":204},[205,206,209],"A dimenziók összeszorzódnak. A Spryker ERP-ben kezelt árakról szóló útmutatója példát hoz: 1000 ügyfél szorozva 25 000 termékkel, absztrakt és konkrét termékekre számolva, 50 millió elméleti árrekord. 20 százalékos szerződéses lefedettségnél ez még mindig nagyjából 20 millió, az a pont, ahol az útmutató szerint a szabványos szinkronfolyamat „komolyan romlani kezd” (",{"tag":207,"href":39,"children":208},"a",[10],"). Ezért fontosabb az a kérdés, hol élnek az árak és hogyan cache-eljük őket, mint maga a képlet.",{"type":159,"level":160,"id":108,"text":109},{"type":136,"content":212},[213,214,218],"Az áraknak általában három lehetséges otthona van: az ERP, amely a tárgyalt kondíciókat tartja, és többnyire a hiteles rendszer; a PIM, amely termékattribútumként listaárakat tárolhat; és a kereskedelmi platform, amely gyors olvasáshoz árlistákat vagy árdimenziókat tart. A lényeges döntés az, melyik a hiteles, és mennyire lehet elavult egy másolat egy másik rendszerben. A termékadatok szinkronjánál ugyanez a kérdés, lásd ",{"tag":148,"to":215,"children":216},"\u002Fblog\u002Fpimcore-erp-delta-sync",[217],"a Pimcore ERP delta szinkront",".",{"type":220,"src":221,"alt":222,"wide":223,"caption":224},"image","\u002Fimages\u002Fblog\u002Fb2b-pricing-engine\u002Fdiagram-8.webp","B2B árfeloldási lánc Öt lépés balról jobbra: a kérés kontextusa ügyféllel, céggel, régióval, mennyiséggel, pénznemmel és dátummal; a szerződéses ár mint legspecifikusabb szabály; az ügyfélcsoport ára mint következő visszaesés; az alapár mint utolsó lehetőség; és a rendelési tételen tárolt árpillanatkép.",true,"A feloldás a legspecifikusabb szabálytól halad a legáltalánosabb felé, a nyertes árat pedig a rendelési tétel rögzíti.",{"type":136,"content":226},[227,228,231],"Az SAP S\u002F4HANA-ban a kondíciótechnika dönt. A rendszer az értékesítési terület, az értékesítési bizonylatfajta és a megrendelő alapján választ árképzési eljárást. Az eljárás minden kondíciófajtájához tartozik egy hozzáférési sorrend, amely sorban keresi a kondíciótáblákat a legspecifikusabb kulcstól a legáltalánosabbig, amíg érvényes kondíciórekordot nem talál. Ezután a mennyiségi skálák választják ki a skálafokot, a fejszintű kondíciókat pedig nettó érték szerint osztja szét a tételekre, ha nincs másként beállítva (",{"tag":207,"href":48,"children":229},[230],"SAP Learning",").",{"type":136,"content":233},[234,235,231],"A commercetools nyolclépcsős visszaesésként dokumentálja az árválasztást, az ügyfélcsoport, csatorna és ország kombinációjától le az alapárig. Minden lépcsőn belül az érvényességi idővel rendelkező árak megelőzik az anélkülieket, és ha ezután is több ár illik, a legolcsóbb nyer. A sávos árakat figyelmen kívül hagyja, ha már termékkedvezmény érvényes (",{"tag":207,"href":45,"children":236},[237],"commercetools",{"type":136,"content":239},[240,241,244,245,248],"A Spryker az árakat a legkisebb pénzegységben, egész számként tárolja, mindegyiket ártípussal, valamint árképzési módonként bruttó és nettó értékkel. Olvasáskor először a konkrét terméket nézi, majd az absztraktra esik vissza. A mennyiségi árak ugyanezt az öröklést követik: egy konkrét termék saját mennyiségi árai felülírják az absztraktéit, és csak az alapértelmezett ártípust támogatják (",{"tag":207,"href":36,"children":242},[243],"Spryker árak",", ",{"tag":207,"href":42,"children":246},[247],"Spryker mennyiségi árak","). Az ügyfélspecifikus árak árdimenziókkal készülnek: a dokumentált út csoportazonosítóval bővíti az ügyfél- és ártáblákat, és csoportonként exportálja az árakat a kulcs-érték tárba.",{"type":136,"content":250},[251,252,255],"A Pimcore E-Commerce Framework minden termékhez árrendszert rendel, amely PriceInfo objektumokat ad vissza. A beépített AttributePriceSystem egy termékattribútumból olvassa az árat, minden ERP-vezérelt megoldás pedig saját, a konfigurációban regisztrált árrendszer lesz (",{"tag":207,"href":51,"children":253},[254],"Pimcore","). Erre az árra aztán az árszabályok feltétel–művelet párokként alkalmaznak kedvezményeket.",{"type":159,"level":160,"id":111,"text":112},{"type":136,"content":258},[259],"A platformok egyetértenek abban, hogy a legspecifikusabb szabály nyer, és abban különböznek, hol dől el a döntetlen, és mit adnak az audithoz. A táblázat összefoglalja, mit dokumentál mindegyik 2026 októberében.",{"type":261,"head":262,"rows":273},"table",[263,265,267,269,271],[264],"Platform",[266],"Árdimenziók",[268],"Mennyiségi sávok",[270],"Elsőbbség",[272],"Audit- vagy magyarázó eszköz",[274,284,295,306,316,327],[275,276,278,280,282],[10],[277],"áruház, pénznem, árképzési mód; ügyfélcsoportok árdimenziókkal",[279],"JSON áruházanként és pénznemenként, csak alapártípus",[281],"konkrét termék az absztrakt előtt",[283],"hibrid minta pénztári újraellenőrzéssel",[285,287,289,291,293],[286],"Pimcore E-Commerce Framework",[288],"amit az árrendszer megvalósít",[290],"saját árrendszeren belül",[292],"termékenkénti árrendszer, utána árszabályok",[294],"az alkalmazott szabályok PriceInfo-nként olvashatók",[296,298,300,302,304],[297],"SAP S\u002F4HANA SD",[299],"kondíciótáblák ügyfél, anyag, értékesítési terület és más kulcsokkal",[301],"mennyiségi skálák a kondíciófajtákon",[303],"hozzáférési sorrend, a legspecifikusabb tábla először",[305],"a bizonylattételenként megtalált kondíciórekordok",[307,308,310,312,314],[237],[309],"ügyfélcsoport, csatorna, ország, érvényesség",[311],"sávok beágyazott és önálló árakon",[313],"nyolclépcsős visszaesés, lépcsőn belül a legolcsóbb nyer",[315],"Pricing és Discount üzenetek, bekapcsolandó",[317,319,321,323,325],[318],"Adobe Commerce B2B",[320],"megosztott katalógus cégenként, webhelyszinten",[322],"sávos árak megosztott katalógusonként",[324],"fix egyedi ár: az alapár és a fix érték minimuma",[326],"a hivatkozott dokumentáció nem nevez meg",[328,330,332,334,336],[329],"Shopify B2B",[331],"katalógusok változatonkénti mennyiségi szabályokkal",[333],"termékenként legfeljebb 10 ársáv",[335],"a mennyiségi ár rögzíti az árat; a katalógusszintű módosítás már nem érvényes",[326],{"type":136,"content":338},[339,340,343,344,231],"Két dokumentált szabály sokakat meglep. Az Adobe Commerce-ben egy megosztott katalógus fix egyedi ára soha nem emeli az árat: az alapár és a fix érték közül a kisebbet használja (",{"tag":207,"href":54,"children":341},[342],"Adobe","). A Shopify B2B-ben a mennyiségi ár érvénybe lépése után az ár rögzül, így egy katalógusszintű százalékos módosítás már nem csökkenti, a mennyiségi szabályok pedig változatonként érvényesek, így a vevő nem kombinálhat változatokat egy minimum eléréséhez (",{"tag":207,"href":57,"children":345},[346],"Shopify",{"type":159,"level":160,"id":114,"text":115},{"type":136,"content":349},[350],"Egy személyre szabott ár addig cache-elhető, amíg minden, az árat megváltoztató dimenzió része a cache-kulcsnak. Ha a kulcs csak az URL, akkor az első vevő, aki betölt egy termékoldalt, határozza meg az árat minden későbbi vevő számára. Ez egyszerre rossz ár és adatszivárgás: az egyik ügyfél szerződéses árát egy másik ügyfél látja.",{"type":165,"ordered":166,"items":352},[353,362,370,375],[354,357,358,231],{"tag":140,"children":355},[356],"Árdimenziókra kulcsoljon, ne felhasználóra."," Árlistánként vagy ügyfélcsoportonként cache-eljen, ne felhasználói azonosítónként, különben összeomlik a találati arány. A Cloudflare egyedi cache-kulcsokban engedi a fejléceket, sütiket és felhasználói jellemzőket, de ezek csak Enterprise csomagban érhetők el, és a dokumentáció figyelmeztet, hogy az egyedi kulcsok szétforgácsolhatják a cache-t (",{"tag":207,"href":359,"children":360},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcache\u002Fhow-to\u002Fcache-keys\u002F",[361],"Cloudflare",[363,366,367,231],{"tag":140,"children":364},[365],"Címkézze a válaszokat az érvénytelenítéshez."," A Varnish xkey modulja lehetővé teszi, hogy a backend minden választ helyettesítő kulcsokkal, például cikkszámmal és árlistával címkézzen. Egyetlen purge hívás üríti az összes objektumot, amely a kulcsot viseli, a softpurge megtartja őket a grace módhoz, a README pedig azt tanácsolja, hogy ACL-lel védje a purge végpontot (",{"tag":207,"href":60,"children":368},[369],"xkey",[371,374],{"tag":140,"children":372},[373],"Az üzleti eseménykor ürítsen."," Egy szerződésváltozás, egy új árimport vagy egy ERP-delta elküldi az érintett cikkszám- és árlista-címkéket. Egy TTL önmagában a lejáratig élesen hagyja a régi szerződéses árat.",[376,379,380,231],{"tag":140,"children":377},[378],"A cache soha ne legyen az egyetlen tár."," A Spryker útmutatója figyelmeztet: ha az árakat csak cache-be írják, a cache elvesztése adatvesztést okozhat (",{"tag":207,"href":39,"children":381},[10],{"type":136,"content":383},[384],"ERP-ben kezelt árakhoz ugyanez az útmutató alapértelmezésként hibrid megoldást ajánl: egy helyi olvasási modell szolgálja ki a böngészést és a kosarat, a pénztár pedig újra ellenőriz az ERP-ben, így a végleges ár a rendelés leadásakor megerősítést kap. Ha a cache-elt ERP-árak öregszenek, az oldal frissességjelzőt mutat, például „Ár 14:23-kor”, ahelyett hogy élőnek tüntetné fel a számot. Az útmutató célja 100 ms alatti árlekérés storefront-kérésenként.",{"type":220,"src":386,"alt":387,"wide":223,"caption":388},"\u002Fimages\u002Fblog\u002Fb2b-pricing-engine\u002Fdiagram-21.webp","Gyorsítótár-topológia személyre szabott árakhoz Felső sor balról jobbra: egy bejelentkezett vevő böngészője, egy URL és ügyfélcsoport kulcsú edge cache, az árat feloldó webshop API, és egy helyi olvasási modell, amely az ár korát mutatja. Az olvasási modell alatt az ERP áll hiteles forrásként, amely delta szinkronnal táplálja az olvasási modellt. A webshop API a pénztárnál újra ellenőrzi az árat az ERP-ben. Szerződésváltozáskor az ERP eseményt küld egy szerződésváltozás dobozba, amely cikkszám- és árlista-címkék szerint üríti az edge cache-t.","A személyre szabott árakat ügyfélcsoportonként cache-eljük, szerződésváltozáskor címkével ürítjük, és a pénztárnál az ERP-vel megerősítjük; az olvasási modell mutatja, milyen régi egy ár.",{"type":159,"level":160,"id":117,"text":118},{"type":136,"content":391},[392],"Előbb-utóbb valaki megkérdezi, miért látta X ügyfél az Y árat egy adott napon. Ha a válaszhoz a mai szabályokat kell lefuttatni a mai adatokon, nem tud válaszolni, mert azóta változott a szerződés, a sávtáblázat és az alapár is. A választ abban a pillanatban kell eltárolni, amikor az árat felhasználják.",{"type":136,"content":394},[395],"Minden rendelési tételen tároljon rendeléskori árpillanatképet: a feloldott nettó árat, a nyertes szabályt és az alulmaradt jelölteket, az árlista- és szerződésazonosítókat verzióval, a mennyiségi sávot, a pénznemet, az adókulcsot és a kerekítési módot. A pillanatkép tételenként néhány száz bájt, és egy vitát egyszerű kereséssé tesz. Az alábbi példa szemléltető, az összegek centben.",{"type":397,"code":398},"code","{\n  \"orderLine\": \"SO-2026-104233\u002F3\",\n  \"sku\": \"VLV-200-DN50\",\n  \"quantity\": 24,\n  \"resolvedAt\": \"2026-10-07T09:14:03Z\",\n  \"currency\": \"EUR\",\n  \"unitNet\": 18350,\n  \"winningRule\": { \"type\": \"contract\", \"id\": \"CT-7781\", \"version\": 4, \"tier\": \"20+\" },\n  \"candidates\": [\n    { \"type\": \"customerGroup\", \"id\": \"PL-INSTALLERS\", \"unitNet\": 19100 },\n    { \"type\": \"base\", \"id\": \"PL-BASE-EUR\", \"unitNet\": 22400 }\n  ],\n  \"taxRate\": \"19.00\",\n  \"rounding\": \"HALF_UP per line\",\n  \"priceSource\": \"erp-read-model\",\n  \"priceAgeSeconds\": 412\n}",{"type":136,"content":400},[401,402,406],"A platformok adnak némi nyersanyagot. A commercetools üzeneteket (Messages) küld az erőforrások változásairól, köztük külön Pricing és Discount üzeneteket az önálló árakhoz, de ezeket alapból nem tárolja, be kell kapcsolni (",{"tag":207,"href":403,"children":404},"https:\u002F\u002Fdocs.commercetools.com\u002Fapi\u002Fprojects\u002Fmessages",[405],"commercetools Messages","). A Pimcore ki tudja listázni az egy PriceInfo-ra alkalmazott árszabályokat, az SAP-ban pedig minden bizonylattétel hordozza a hozzáférési sorrendjei által talált kondíciórekordokat. Egyik sem helyettesít egy saját kezelésű pillanatképet, mert ezek a források a saját ütemük szerint változnak vagy járnak le.",{"type":136,"content":408},[409,410,413],"Az ár-anomáliák jó terepet adnak az olyan automatizálásnak, amely ismeri a határait. Ha egy ellenőrzés jelzi azokat a tételeket, ahol a felszámolt ár egy tűréshatárnál jobban eltér a feloldottól, az esetet emberhez kell irányítania, nem automatikusan javítania. A ",{"tag":397,"children":411},[412],"jev-decide"," skillem ugyanezt a mintát követi: az alacsony bizonyosságú döntés emberhez kerül, ahelyett hogy végrehajtódna.",{"type":159,"level":160,"id":120,"text":121},{"type":136,"content":416},[417,418,421,422,425,426,231],"Az árlogika egy mátrix: ügyfél, szerződés, régió, mennyiség, pénznem és dátum. Válasszon dimenziónként néhány reprezentatív értéket, számolja ki a feloldott árat minden kombinációra, és az eredményt arany fájlként tárolja a repóban. A Playwright az első futáskor arany pillanatképet ír, minden későbbi futást ehhez hasonlít, és csak ",{"tag":397,"children":419},[420],"--update-snapshots"," hatására frissíti; a ",{"tag":397,"children":423},[424],"toMatchSnapshot()"," bármilyen szövegen működik, nem csak képernyőképen (",{"tag":207,"href":69,"children":427},[428],"Playwright",{"type":397,"code":430},"import { test, expect } from '@playwright\u002Ftest'\nimport { resolvePrice } from '..\u002Fsrc\u002Fpricing'\nimport { customers, skus, quantities, dates } from '.\u002Fprice-matrix'\n\n\u002F\u002F One row per combination; the golden file is reviewed like code\ntest('price matrix matches the golden file', () => {\n  const rows: string[] = []\n  for (const c of customers) for (const sku of skus) for (const qty of quantities) for (const date of dates) {\n    const p = resolvePrice({ customer: c, sku, quantity: qty, date, currency: 'EUR' })\n    rows.push([c.id, sku, qty, date, p.unitNet, p.winningRule.id].join(';'))\n  }\n  expect(rows.join('\\n')).toMatchSnapshot('price-matrix.txt')\n})",{"type":136,"content":432},[433,434,438],"Az arany fájlok konkrét esetekben fogják el a regressziókat; a tulajdonságalapú tesztek az általános szabályok megsértését. A fast-checkkel invariánsokat fogalmaz meg, a könyvtár pedig több száz bemenetet generál, és minden hibát minimális esetre zsugorít (",{"tag":207,"href":435,"children":436},"https:\u002F\u002Ffast-check.dev\u002Fdocs\u002Fintroduction\u002F",[437],"fast-check","). Hasznos invariánsok: a rendelés végösszege a kerekített tételösszegek összege, egy magasabb sáv soha nem ad magasabb egységárat, pozitív adókulcsnál a bruttó soha nem kisebb a nettónál, és az ügyfélspecifikus ár soha nem haladja meg az alapárat, ahol az üzleti szabály ezt tiltja.",{"type":136,"content":440},[441],"Futtassa a mátrixot minden árimport és minden ERP-delta után, ne csak kódváltozáskor, mert a legtöbb árhiba az adatokból jön, nem a kódból. A storefront oldalon Playwright MCP-vel különböző bejelentkezett szerepkörökkel járom be a valódi webshopot, és szerződésváltozás után összevetem a megjelenített árat a feloldottal.",{"type":159,"level":160,"id":123,"text":124},{"type":136,"content":444},[445,446,231],"A B2B árakat általában nettóban tartják karban és mutatják, a fogyasztói árakat bruttóban, és a platformnak tudnia kell, melyiket tárolja. A Spryker a quote-on tartja az árképzési módot, bruttót vagy nettót, és egy quote nem használhatja egyszerre mindkettőt. A dokumentáció a következményt is bemutatja: bruttó módban egy 100 € nettó, az áruház régiójában 20%-os adójú termék 10%-os adójú régióba eladva is 120 € bruttó marad, így a nettó összeg 109,09 € lesz (",{"tag":207,"href":36,"children":447},[10],{"type":449,"variant":450,"title":451,"body":452},"callout","warn","A 19\u002F119-es csapda",[453,458],[454,455,231],"Az áfa kiszámítása egy bruttó árból 19%-os kulcsnál 19\u002F119-cel való szorzást jelent, és ennek a kis összegnek darabonkénti kerekítése torzítja az adót. A főtanácsnok C-484\u002F06. sz. ügyben adott indítványa példát is hoz: a 19% áfát tartalmazó 0,28 € 0,0447 € áfát tartalmaz; 0,04 €-ra kerekítve a nettó 0,24 € lenne, amelynek 19%-os áfája valójában 0,0456 € (",{"tag":207,"href":63,"children":456},[457],"C-484\u002F06",[459],"Döntse el, hogy darabonként, tételenként vagy számlánként kerekít, írja le a szabályt, és ugyanazt használja a webshopban, az ERP-ben és a számlán.",{"type":136,"content":461},[462,463,466,467,231],"Ugyanez az indítvány megjegyzi, hogy az uniós héairányelvek egyetlen rendelkezése sem szabályozza kifejezetten a kerekítést, így a részletek az uniós elveken belül a nemzeti jogra tartoznak, és hogy vállalkozások közötti nettó számlázásnál a torzulások vagy nem jelentkeznek, vagy erősen mérséklődnek. A brit HMRC szabálya konkrét példa: a 0,5 penny alatti adót lefelé, a 0,5 pennyt vagy többet felfelé kerekítik, és más módszerek is megengedettek, ha tisztességes és észszerű eredményt adnak (",{"tag":207,"href":66,"children":464},[465],"HMRC","). Fogyasztóknál az árfeltüntetési irányelv az áfát is tartalmazó eladási árat írja elő, ez az egyik oka annak, hogy a B2C webshopok bruttóban, a B2B webshopok nettóban gondolkodnak (",{"tag":207,"href":468,"children":469},"https:\u002F\u002Feur-lex.europa.eu\u002Flegal-content\u002FEN\u002FTXT\u002F?uri=CELEX%3A31998L0006",[470],"98\u002F6\u002FEK irányelv",{"type":136,"content":472},[473,474,477,478,482],"Tegye a kerekítést explicitté a kódban. A commercetools konfigurációként kínálja a kerekítést HalfUp, HalfDown és HalfEven módokkal, valamint külön kosárbeállításokkal az ár kerekítésére, az adó kerekítésére és az adószámításra, és megjegyzi, hogy a B2B árak gyakran centnél finomabb pontosságot igényelnek. PHP-ban a moneyphp szövegként tárolja az összegeket, az ",{"tag":397,"children":475},[476],"allocate()"," pedig determinisztikusan bontja a 10,00 €-t 334, 333 és 333 centre (",{"tag":207,"href":479,"children":480},"https:\u002F\u002Fgithub.com\u002Fmoneyphp\u002Fmoney",[481],"moneyphp","). Az árakat a legkisebb egységben egész számként vagy pénzkönyvtárral tárolja, soha ne lebegőpontos számként.",{"type":159,"level":160,"id":126,"text":127},{"type":136,"content":485},[486],"A legtöbb B2B webshopnak nem árképző motort, hanem áradaptert kell építenie. Ha az ERP már helyesen oldja fel a kondíciókat, ennek a logikának a megkettőzése a webshopban két, egymástól elsodródó motort hoz létre. A hibrid minta az ERP-t hagyja hitelesnek: a feloldott árakat olvasási modellbe replikálja a böngészéshez, a pénztárnál újra ellenőriz, és megmutatja az elavultságot ahelyett, hogy elrejtené.",{"type":136,"content":488},[489],"Akkor építse a feloldást a webshopba, ha az ERP az Ön katalógusméreténél nem válaszol elég gyorsan a böngészéshez, ha a webshop olyasmit is árul, amit az ERP nem áraz, például konfigurált opciókat vagy piactéri ajánlatokat, vagy ha az ERP szabályai olyan egyszerűek, hogy egy árlista-import lefedi őket. Ekkor is egy gazdája legyen minden árszabálynak, a másik rendszer pedig ismert maximális korú másolat legyen.",{"type":136,"content":491},[492,493,497],"Az „ár kérésre” saját folyamattal rendelkező üzleti állapot legyen, ne hiba. Ha egyetlen szabály sem illik, egy ajánlatkérés jobb, mint egy alapár, amelyre az ügyfél nem jogosult, és jobb, mint egy hiányzó ár, amely hibának látszik. Ezután az ajánlatkezelés veszi át, ahogy az ",{"tag":148,"to":494,"children":495},"\u002Fblog\u002Fllm-rfq-quote-automation",[496],"ajánlatkérés-automatizálás LLM-ekkel"," című cikk leírja.",{"type":159,"level":160,"id":129,"text":130},{"type":136,"content":500},[501],"A Spryker- és Pimcore-munkáimban az első tisztázandó kérdés az, hol élnek az árak. Ezt a listát érdemes végigvenni, mielőtt árakat érintő indexekhez, cache-ekhez vagy importálókhoz nyúl.",{"type":165,"ordered":223,"items":503},[504,506,508,510,512,514,516,518,520],[505],"Írja le a dimenziókat és a feloldási sorrendet, a lépcsőn belüli döntetlen kezelésével együtt.",[507],"Nevezzen meg minden árszabálynak egy gazdát, és minden másolatnak egy maximális kort.",[509],"Minden árat módosító dimenzió kerüljön a cache-kulcsba, semmi felhasználónkénti.",[511],"Címkézze a cache-elt árakat cikkszám és árlista szerint, és szerződésváltozáskor ürítsen, ne csak TTL alapján.",[513],"A pénztárnál ellenőrizzen újra, és mutassa az ár korát, ha nem élő.",[515],"Tároljon rendeléskori árpillanatképet szabályazonosítókkal, verziókkal, adókulccsal és kerekítési móddal.",[517],"Tartson fenn arany ármátrixot és tulajdonságteszteket, és futtassa őket minden import után.",[519],"Dokumentáljon egy kerekítési szabályt a webshopra, az ERP-re és a számlára, és használjon egész számokat vagy pénzkönyvtárat.",[521],"Kezelje az „ár kérésre” helyzetet saját folyamattal rendelkező állapotként.",{"type":136,"content":523},[524,525,529,530,218],"Ha ügyfélspecifikus árakat bogoz ki egy webshop és egy ERP között, nézze meg a ",{"tag":148,"to":526,"children":527},"\u002Fexpertise\u002Fb2b-ecommerce-developer",[528],"B2B e-kereskedelmi munkámat",". Azok az értékesítők, akiknek egy árat kell megmagyarázniuk az ügyfélnek, ugyanezekből a pillanatképadatokból profitálnak, lásd ",{"tag":148,"to":531,"children":532},"\u002Fblog\u002Fsales-rep-ai-copilot-b2b",[533],"MI-segéd B2B értékesítőknek",{"type":159,"level":160,"id":132,"text":133},{"type":165,"ordered":223,"items":536},[537,540,543,546,549,552,555,558,561,564,567,570],[538],{"tag":207,"href":36,"children":539},[35],[541],{"tag":207,"href":39,"children":542},[38],[544],{"tag":207,"href":42,"children":545},[41],[547],{"tag":207,"href":45,"children":548},[44],[550],{"tag":207,"href":48,"children":551},[47],[553],{"tag":207,"href":51,"children":554},[50],[556],{"tag":207,"href":54,"children":557},[53],[559],{"tag":207,"href":57,"children":560},[56],[562],{"tag":207,"href":60,"children":563},[59],[565],{"tag":207,"href":63,"children":566},[62],[568],{"tag":207,"href":66,"children":569},[65],[571],{"tag":207,"href":69,"children":572},[68],[574,648,704,778],{"slug":575,"published":576,"minutes":577,"category":7,"tags":578,"keywords":584,"about":596,"sources":605,"cover":642,"og":643,"expertise":72,"locales":644,"lang":76,"title":645,"description":646,"coverAlt":647},"schema-org-structured-data-b2b-shop","2026-10-17",10,[579,580,581,582,583],"Schema.org","Structured data","B2B e-commerce","Technical SEO","Nuxt",[585,586,587,588,589,590,591,592,593,594,595],"schema.org b2b shop","product structured data b2b","merchant listing structured data","product snippet vs merchant listing","unitpricespecification referencequantity","productgroup variants structured data","organization schema vatid","b2b prices behind login seo","json-ld nuxt schema org","merchant return policy structured data","mpn gtin structured data",[597,599,602],{"name":579,"url":598},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSchema.org",{"name":600,"url":601},"JSON-LD","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJSON-LD",{"name":603,"url":604},"Business-to-business","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBusiness-to-business",[606,609,612,615,618,621,624,627,630,633,636,639],{"title":607,"url":608},"Google Search Central: Introduction to Product structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fproduct",{"title":610,"url":611},"Google Search Central: Merchant listing (Product, Offer) structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fmerchant-listing",{"title":613,"url":614},"Google Search Central: Product snippet structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fproduct-snippet",{"title":616,"url":617},"Google Search Central: Product variant structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fproduct-variants",{"title":619,"url":620},"Google Search Central: Organization structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Forganization",{"title":622,"url":623},"Google Search Central: Merchant return policy structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Freturn-policy",{"title":625,"url":626},"Google Search Central: General structured data guidelines","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fsd-policies",{"title":628,"url":629},"Google Search Central: Generate structured data with JavaScript","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fgenerate-structured-data-with-javascript",{"title":631,"url":632},"Schema.org: Offer","https:\u002F\u002Fschema.org\u002FOffer",{"title":634,"url":635},"Schema.org: UnitPriceSpecification","https:\u002F\u002Fschema.org\u002FUnitPriceSpecification",{"title":637,"url":638},"Unhead: Product schema (defineProduct)","https:\u002F\u002Funhead.unjs.io\u002Fdocs\u002Fschema-org\u002Fapi\u002Fschema\u002Fproduct",{"title":640,"url":641},"Nuxt SEO: Schema.org identity setup","https:\u002F\u002Fnuxtseo.com\u002Fdocs\u002Fschema-org\u002Fguides\u002Fsetup-identity","\u002Fimages\u002Fblog\u002Fschema-org-structured-data-b2b-shop\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fschema-org-structured-data-b2b-shop\u002Fog.jpg",[74,75,76],"Schema.org strukturált adatok B2B webshopokhoz: bejelentkezés mögötti árak, egységek és változatok","Termék-markup B2B shopokhoz: snippet vagy kereskedői lista, melyik ár, cikkszámok, egységárak, változatok, Organization és SSR Nuxtban.","Terméktéglalap vékony kerettel, alsó kis mezőjét alacsony fal takarja el.",{"slug":649,"published":576,"minutes":650,"category":7,"tags":651,"keywords":656,"about":668,"sources":676,"cover":698,"og":699,"expertise":72,"locales":700,"lang":76,"title":701,"description":702,"coverAlt":703},"ai-assistant-b2b-shop-customer-support",9,[581,652,653,654,655],"AI assistant","Customer support","LLM agents","EU AI Act",[657,658,659,660,661,662,663,664,665,666,667],"ai assistant b2b shop","ai customer support b2b ecommerce","llm chatbot order status","ai agent customer service tools","chatbot liability air canada","klarna ai assistant results","human handoff chatbot design","eu ai act chatbot disclosure","owasp excessive agency","ai support resolution rate","b2b customer portal chatbot",[669,672,675],{"name":670,"url":671},"Customer service","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCustomer_service",{"name":673,"url":674},"Chatbot","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FChatbot",{"name":603,"url":604},[677,680,683,686,689,692,695],{"title":678,"url":679},"Klarna: AI assistant handles two-thirds of customer service chats in its first month (press release, 2024)","https:\u002F\u002Fwww.klarna.com\u002Finternational\u002Fpress\u002Fklarna-ai-assistant-handles-two-thirds-of-customer-service-chats-in-its-first-month\u002F",{"title":681,"url":682},"Entrepreneur: Klarna is hiring customer service agents again, according to its CEO (May 2025)","https:\u002F\u002Fwww.entrepreneur.com\u002Fbusiness-news\u002Fklarna-ceo-reverses-course-by-hiring-more-humans-not-ai\u002F491396",{"title":684,"url":685},"ABA Business Law Today: BC tribunal confirms companies remain liable for information provided by AI chatbot","https:\u002F\u002Fwww.americanbar.org\u002Fgroups\u002Fbusiness_law\u002Fresources\u002Fbusiness-law-today\u002F2024-february\u002Fbc-tribunal-confirms-companies-remain-liable-information-provided-ai-chatbot\u002F",{"title":687,"url":688},"OWASP GenAI Security Project: LLM06:2025 Excessive Agency","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm062025-excessive-agency\u002F",{"title":690,"url":691},"OWASP GenAI Security Project: LLM05:2025 Improper Output Handling","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm052025-improper-output-handling\u002F",{"title":693,"url":694},"EU AI Act, Article 50: Transparency obligations","https:\u002F\u002Fartificialintelligenceact.eu\u002Farticle\u002F50\u002F",{"title":696,"url":697},"Intercom: Fin pricing and billable outcomes","https:\u002F\u002Ffin.ai\u002Fpricing","\u002Fimages\u002Fblog\u002Fai-assistant-b2b-shop-customer-support\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fai-assistant-b2b-shop-customer-support\u002Fog.jpg",[74,75,76],"AI-asszisztens a B2B webshop ügyfélszolgálatához: eszközök, jogosultságok és átadás embernek","Hogyan építs AI ügyfélszolgálati asszisztenst B2B shophoz: mit automatizálj, eszközök ügyfélkontextusban, átadás embernek, AI Act és mérőszámok.","Magas fal keskeny réssel: nyíl halad át rajta a három négyzetből álló bekerített mezőbe, egy másik lefelé, egy tálca felé mutat.",{"slug":705,"published":576,"minutes":706,"category":7,"tags":707,"keywords":712,"about":724,"sources":734,"cover":771,"og":772,"expertise":773,"locales":774,"lang":76,"title":775,"description":776,"coverAlt":777},"vue-ai-chat-ui-streaming-accessibility",11,[708,583,709,710,711],"Vue","Accessibility","Streaming","AI chat",[713,714,715,716,717,718,719,720,721,722,723],"vue ai chat ui","nuxt llm streaming","sse vs fetch streaming","aria-live streaming text","accessible chat interface","abort fetch stream vue","dompurify markdown llm","role log chat","reduced motion chat ui","wcag 2.2 chat","screen reader streaming",[725,728,731],{"name":726,"url":727},"Web accessibility","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWeb_accessibility",{"name":729,"url":730},"Server-sent events","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServer-sent_events",{"name":732,"url":733},"Vue.js","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FVue.js",[735,738,741,744,747,750,753,756,759,762,765,768],{"title":736,"url":737},"MDN: Using server-sent events","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FServer-sent_events\u002FUsing_server-sent_events",{"title":739,"url":740},"MDN: AbortController","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FAbortController",{"title":742,"url":743},"MDN: ReadableStream","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FReadableStream",{"title":745,"url":746},"MDN: TextDecoderStream","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FTextDecoderStream",{"title":748,"url":749},"MDN: ARIA log role","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAccessibility\u002FARIA\u002FReference\u002FRoles\u002Flog_role",{"title":751,"url":752},"W3C: Understanding SC 4.1.3 Status Messages","https:\u002F\u002Fwww.w3.org\u002FWAI\u002FWCAG22\u002FUnderstanding\u002Fstatus-messages.html",{"title":754,"url":755},"W3C WAI: What's new in WCAG 2.2","https:\u002F\u002Fwww.w3.org\u002FWAI\u002Fstandards-guidelines\u002Fwcag\u002Fnew-in-22\u002F",{"title":757,"url":758},"MDN: prefers-reduced-motion","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FCSS\u002F@media\u002Fprefers-reduced-motion",{"title":760,"url":761},"DOMPurify README","https:\u002F\u002Fgithub.com\u002Fcure53\u002FDOMPurify",{"title":763,"url":764},"markdown-it README","https:\u002F\u002Fgithub.com\u002Fmarkdown-it\u002Fmarkdown-it",{"title":766,"url":767},"AI SDK docs: useChat","https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-ui\u002Fchatbot",{"title":769,"url":770},"Vue docs: nextTick","https:\u002F\u002Fvuejs.org\u002Fapi\u002Fgeneral.html#nexttick","\u002Fimages\u002Fblog\u002Fvue-ai-chat-ui-streaming-accessibility\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fvue-ai-chat-ui-streaming-accessibility\u002Fog.jpg","vue-nuxt-developer",[74,75,76],"AI-csevegő UI Vue-ban és Nuxtban: akadálymentes streaming","AI-csevegő Vue-ban vagy Nuxtban: fetch-stream, megszakítás és újrapróbálás, biztonságos markdown, aria-live bejelentések, billentyűzet és reduced motion.","Üzenetkártya villogó kurzorral, pontozott vonal hullámokká nyílik, mellette pipa.",{"slug":779,"published":576,"minutes":650,"category":7,"tags":780,"keywords":785,"about":797,"sources":807,"cover":840,"og":841,"expertise":773,"locales":842,"lang":76,"title":843,"description":844,"coverAlt":845},"llm-translation-pipeline-i18n",[781,782,783,708,784],"Translation","i18n","LLM","Localization",[786,787,788,789,790,791,792,793,794,795,796],"llm translation pipeline","icu messageformat placeholders","vue i18n llm translation","translation memory llm","glossary enforcement translation","german informal sie du","hungarian translation quality llm","structured output json translation","machine translation post-editing","locale file validation","cldr plural categories",[798,801,804],{"name":799,"url":800},"Internationalization and localization","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FInternationalization_and_localization",{"name":802,"url":803},"ICU MessageFormat","https:\u002F\u002Funicode-org.github.io\u002Ficu\u002Fuserguide\u002Fformat_parse\u002Fmessages\u002F",{"name":805,"url":806},"Vue I18n","https:\u002F\u002Fvue-i18n.intlify.dev\u002F",[808,810,813,816,819,822,825,828,831,834,837],{"title":809,"url":803},"Unicode ICU User Guide: Formatting Messages",{"title":811,"url":812},"Vue I18n: Message Format Syntax","https:\u002F\u002Fvue-i18n.intlify.dev\u002Fguide\u002Fessentials\u002Fsyntax",{"title":814,"url":815},"Nuxt i18n: Getting started","https:\u002F\u002Fi18n.nuxtjs.org\u002Fdocs\u002Fgetting-started",{"title":817,"url":818},"Unicode CLDR: Plural rules","https:\u002F\u002Fcldr.unicode.org\u002Findex\u002Fcldr-spec\u002Fplural-rules",{"title":820,"url":821},"OpenAI: Structured outputs","https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Fstructured-outputs",{"title":823,"url":824},"DeepL API: Glossaries","https:\u002F\u002Fdevelopers.deepl.com\u002Fdocs\u002Fapi-reference\u002Fglossaries",{"title":826,"url":827},"W3C: Localization vs. internationalization","https:\u002F\u002Fwww.w3.org\u002FInternational\u002Fquestions\u002Fqa-i18n",{"title":829,"url":830},"GNU gettext manual","https:\u002F\u002Fwww.gnu.org\u002Fsoftware\u002Fgettext\u002Fmanual\u002Fgettext.html",{"title":832,"url":833},"RFC 5646: Tags for Identifying Languages","https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc5646",{"title":835,"url":836},"Rat für deutsche Rechtschreibung","https:\u002F\u002Fwww.rechtschreibrat.com\u002F",{"title":838,"url":839},"Microsoft Writing Style Guide","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fstyle-guide\u002Fwelcome\u002F","\u002Fimages\u002Fblog\u002Fllm-translation-pipeline-i18n\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fllm-translation-pipeline-i18n\u002Fog.jpg",[74,75,76],"LLM-fordítási pipeline i18n-hez: glosszárium, helyőrzők és review","Termék- és weboldalszövegek fordítása LLM-mel úgy, hogy a helyőrzők, a többes szám és a hangnem épen maradjon: glosszárium, ICU üzenetek, QA-ellenőrzések.","Három forráskártya, egy lefordított kártya glosszárium-szalaggal, majd ellenőrzött tábla.",1792337025551]