[{"data":1,"prerenderedAt":2116},["ShallowReactive",2],{"navigation-docsEN":3,"navigation-blogEN":725,"docs-EN-\u002Fdocs\u002Fconnectors":743,"docsNav-EN-\u002Fdocs":1496,"docsSecNav-EN-\u002Fdocs\u002Fconnectors":1696},[4],{"title":5,"path":6,"stem":7,"children":8},"Docs","\u002Fdocs","docs",[9,22,41,53,74,88,114,128,156,167,182,206,412,428,572,647,662,669],{"title":10,"path":6,"stem":11,"description":12,"icon":13,"tags":14},"Documentation","docs\u002Findex","Introduction to documentation on EPCIS and OpenEPCIS tools","heroicons-outline:document-text",[15,16,17,18,19,20,21],"openepcis","epcis-2-0","epcis-documentation","epcis-standard","open-core","open-source","epcis-tools",{"title":23,"path":24,"stem":25,"children":26,"description":28,"icon":29,"tags":40},"Introduction","\u002Fdocs\u002Fintroduction","docs\u002F01.introduction\u002Findex",[27],{"title":23,"path":24,"stem":25,"description":28,"icon":29,"tags":30},"Why EPCIS is necessary and how it can help organizations of all sizes and types.","heroicons-outline:globe-alt",[16,31,32,33,34,35,36,37,38,39],"epcis","epcis-1-2","gs1-epcis-standard","supply-chain","traceability","data-sharing","tracking","tracing","visibility-events",[16,31,32,33,34,35,36,37,38,39],{"title":42,"path":43,"stem":44,"children":45,"description":47,"icon":48,"tags":52},"EPCIS","\u002Fdocs\u002Fepcis","docs\u002F02.epcis\u002Findex",[46],{"title":42,"path":43,"stem":44,"description":47,"icon":48,"tags":49},"Discover the specifics of EPCIS, how it works, and what OpenEPCIS is.","i-custom-open-epcis",[16,31,32,33,50,51,39],"iso-iec-19987","iso-iec-19988",[16,31,32,33,50,51,39],{"title":54,"path":55,"stem":56,"children":57,"description":59,"icon":60,"tags":73},"Format Converter","\u002Fdocs\u002Fformat-converter","docs\u002F03.format-converter\u002Findex",[58],{"title":54,"path":55,"stem":56,"description":59,"icon":60,"tags":61},"OpenEPCIS solution to convert EPCIS 2.0 and 1.2 document or single event from XML to JSON\u002FJSON-LD and vice versa.","heroicons-outline:arrows-right-left",[16,62,63,64,65,66,67,21,68,69,70,71,72],"json","json-ld","xml","events","format-converter","convert","convert-epcis-events","format","converter","epcis-tool","tools",[16,62,63,64,65,66,67,21,68,69,70,71,72],{"title":75,"path":76,"stem":77,"children":78,"description":80,"icon":81,"tags":87},"Version Converter","\u002Fdocs\u002Fversion-converter","docs\u002F04.version-converter\u002Findex",[79],{"title":75,"path":76,"stem":77,"description":80,"icon":81,"tags":82},"OpenEPCIS solution to convert EPCIS XML document from version 1.2 to 2.0 and vice versa.","heroicons:arrows-up-down",[16,32,62,63,64,65,83,67,21,84,85,86,70,71,72],"version-converter","convert-epcis-version","version","epcis-version",[16,32,62,63,64,65,83,67,21,84,85,86,70,71,72],{"title":89,"path":90,"stem":91,"children":92,"description":94,"icon":95,"tags":113},"Identifier Converter","\u002Fdocs\u002Fidentifier-converter","docs\u002F05.identifier-converter\u002Findex",[93],{"title":89,"path":90,"stem":91,"description":94,"icon":95,"tags":96},"OpenEPCIS solution to convert EPCIS instance or class identifier from URN to digital link WebURI and vice versa.","i-heroicons-link",[16,97,98,99,100,101,21,102,103,104,105,106,107,108,109,110,111,112],"gs1-digital-link","urn-format","epc-uri","epc","weburi","gs1-standard","gs1","sscc","gtin","giai","grai","gdti","lgtin","sgtin","gln","gcp",[16,97,98,99,100,101,21,102,103,104,105,106,107,108,109,110,111,112],{"title":115,"path":116,"stem":117,"children":118,"description":120,"icon":121,"tags":127},"Event Hash Generator","\u002Fdocs\u002Fevent-hash-generator","docs\u002F06.event-hash-generator\u002Findex",[119],{"title":115,"path":116,"stem":117,"description":120,"icon":121,"tags":122},"OpenEPCIS solution to generate unique event hash for EPCIS XML or JSON\u002FJSON-LD document or event list.","heroicons-outline:finger-print",[16,123,62,63,64,65,21,124,125,126,71,72],"event-hash","event","hash","generator",[16,123,62,63,64,65,21,124,125,126,71,72],{"title":129,"path":130,"stem":131,"children":132,"description":134,"icon":135,"tags":155},"Test Data Generator","\u002Fdocs\u002Ftest-data-generator","docs\u002F07.test-data-generator\u002Findex",[133,137],{"title":129,"path":130,"stem":131,"description":134,"icon":135,"tags":136},"OpenEPCIS solution to generate a large set of EPCIS test data events for all use cases\u002Fsupply chain requirements.","heroicons-outline:cog",[16,123,62,63,64,65,21,124,125,126,71,72],{"title":138,"path":139,"stem":140,"children":141,"description":143,"icon":144,"tags":154},"EPCIS Implementation Guidelines","\u002Fdocs\u002Ftest-data-generator\u002Fgs1-epcis-implementation-guidelines","docs\u002F07.test-data-generator\u002F01.gs1-epcis-implementation-guidelines\u002Findex",[142],{"title":138,"path":139,"stem":140,"description":143,"icon":144,"tags":145},"EPCIS event examples from the GS1 EPCIS and CBV implementation guidelines, modeled with the OpenEPCIS Test Data Generator.","heroicons-outline:badge-check",[16,62,63,146,21,147,148,149,35,150,151,152,153],"testing","test-data-generator","design","design-template","process-automation","compliance","supply-chain-management","load-tests",[16,62,63,146,21,147,148,149,35,150,151,152,153],[16,123,62,63,64,65,21,124,125,126,71,72],{"title":157,"path":158,"stem":159,"children":160,"description":162,"icon":163,"tags":166},"Test Resource Management","\u002Fdocs\u002Ftest-resource-management","docs\u002F08.test-resource-management\u002Findex",[161],{"title":157,"path":158,"stem":159,"description":162,"icon":163,"tags":164},"Collection of EPCIS 1.2\u002F2.0 documents\u002Fevents in XML\u002FJSON\u002FJSON-LD formats, intended for various testing purposes","heroicons-outline:archive-box",[16,62,63,146,21,165,35,150,151,152,153],"performance-tests",[16,62,63,146,21,165,35,150,151,152,153],{"title":168,"path":169,"stem":170,"children":171,"description":173,"icon":174,"tags":181},"Vocabulary Management","\u002Fdocs\u002Fvocabulary-management","docs\u002F09.vocabulary-management\u002Findex",[172],{"title":168,"path":169,"stem":170,"description":173,"icon":174,"tags":175},"Collection of standardized constants and strings for EPCIS event data.","heroicons-outline:book-open",[16,176,15,177,21,178,35,179,151,152,180],"constants","centralization","standardization","vocabulary","data-dictionary",[16,176,15,177,21,178,35,179,151,152,180],{"title":183,"path":184,"stem":185,"children":186,"description":188,"icon":189,"tags":205},"Dependency Management","\u002Fdocs\u002Fdependency-management","docs\u002F10.dependency-management\u002Findex",[187],{"title":183,"path":184,"stem":185,"description":188,"icon":189,"tags":190},"Centralized Maven Bill of Materials (BOM) for all the OpenEPCIS modules.","heroicons-outline:folder",[191,15,192,193,194,195,196,31,197,198,199,200,201,202,203,204],"maven-bom","dependency-management","java-dependencies","pom","software-dependencies","version-control","open-source-java","build-management","modular-software","dependency-resolution","java-libraries","maven-project","centralized-dependencies","dependency-consistency",[191,15,192,193,194,195,196,31,197,198,199,200,201,202,203,204],{"title":207,"path":208,"stem":209,"children":210,"description":212,"icon":213,"tags":411},"Digital Product Passport","\u002Fdocs\u002Fdigital-product-passport","docs\u002F11.digital-product-passport\u002Findex",[211,221,234,269,307,334,348,356,363,373,400],{"title":207,"path":208,"stem":209,"description":212,"icon":213,"tags":214},"Introduction to Digital Product Passport and how EPCIS enables product traceability for DPP compliance.","heroicons-outline:identification",[215,216,217,31,218,35,219,220],"digital-product-passport","dpp","eu-regulation","sustainability","circular-economy","gs1-web-vocabulary",{"title":222,"path":223,"stem":224,"children":225,"description":227,"icon":228,"tags":233},"ESPR Framework","\u002Fdocs\u002Fdigital-product-passport\u002Fespr-framework","docs\u002F11.digital-product-passport\u002F00.espr-framework\u002Findex",[226],{"title":222,"path":223,"stem":224,"description":227,"icon":228,"tags":229},"Guide to the EU Ecodesign for Sustainable Products Regulation (ESPR) 2024\u002F1781 and how OpenEPCIS supports Digital Product Passport requirements.","heroicons-outline:shield-check",[230,231,218,216,217,232],"espr","ecodesign","en-standards",[230,231,218,216,217,232],{"title":235,"path":236,"stem":237,"children":238,"description":240,"icon":241,"tags":268},"Battery DPP","\u002Fdocs\u002Fdigital-product-passport\u002Fbattery-dpp","docs\u002F11.digital-product-passport\u002F01.battery-dpp\u002Findex",[239,246,252,259],{"title":235,"path":236,"stem":237,"description":240,"icon":241,"tags":242},"GS1-native implementation of EU Battery Regulation 2023\u002F1542 Digital Product Passport using EPCIS 2.0","heroicons:battery-100",[243,244,216,31,103,35,218,245],"battery","eu-battery-regulation","due-diligence",{"title":247,"path":248,"stem":249,"description":250,"icon":174,"tags":251},"Implementation Guide","\u002Fdocs\u002Fdigital-product-passport\u002Fbattery-dpp\u002Fimplementation-guide","docs\u002F11.digital-product-passport\u002F01.battery-dpp\u002F01.implementation-guide","Step-by-step guide for implementing a GS1-native Battery Digital Product Passport with OpenEPCIS extensions",[243,244,216,31,220],{"title":253,"path":254,"stem":255,"description":256,"icon":257,"tags":258},"Event Types","\u002Fdocs\u002Fdigital-product-passport\u002Fbattery-dpp\u002Fevent-types","docs\u002F11.digital-product-passport\u002F01.battery-dpp\u002F02.event-types","Complete reference for all EPCIS event types and sensor measurements in the Battery DPP","heroicons-outline:collection",[243,31,65,39,216],{"title":260,"path":261,"stem":262,"description":263,"icon":13,"tags":264},"Complete Examples","\u002Fdocs\u002Fdigital-product-passport\u002Fbattery-dpp\u002Fcomplete-examples","docs\u002F11.digital-product-passport\u002F01.battery-dpp\u002F05.complete-examples","Reference Battery Digital Product Passport examples mapped to EU Battery Regulation 2023\u002F1542 Annex XIII",[243,265,266,63,267,245],"examples","annex-xiii","carbon-footprint",[243,244,216,31,103,35,218,245],{"title":270,"path":271,"stem":272,"children":273,"description":275,"icon":276,"tags":306},"EUDR","\u002Fdocs\u002Fdigital-product-passport\u002Feudr","docs\u002F11.digital-product-passport\u002F02.eudr\u002Findex",[274,281,287,292,300],{"title":270,"path":271,"stem":272,"description":275,"icon":276,"tags":277},"GS1-native implementation of EU Deforestation Regulation 2023\u002F1115 compliance using EPCIS 2.0","heroicons-outline:globe-europe-africa",[278,279,280,216,31,103,35,218,245],"eudr","deforestation","timber",{"title":247,"path":282,"stem":283,"description":284,"icon":285,"tags":286},"\u002Fdocs\u002Fdigital-product-passport\u002Feudr\u002Fimplementation-guide","docs\u002F11.digital-product-passport\u002F02.eudr\u002F01.implementation-guide","Step-by-step guide for implementing EU Deforestation Regulation compliance using GS1 standards",null,[278,279,280,216,31,245],{"title":253,"path":288,"stem":289,"description":290,"icon":285,"tags":291},"\u002Fdocs\u002Fdigital-product-passport\u002Feudr\u002Fevent-types","docs\u002F11.digital-product-passport\u002F02.eudr\u002F02.event-types","EPCIS event types for EU Deforestation Regulation compliance",[278,31,65,39,216],{"title":293,"path":294,"stem":295,"description":296,"icon":285,"tags":297},"URL Patterns","\u002Fdocs\u002Fdigital-product-passport\u002Feudr\u002Furl-patterns","docs\u002F11.digital-product-passport\u002F02.eudr\u002F03.url-patterns","GS1 Digital Link URL patterns for EUDR implementations",[278,97,298,299,216,245],"resolver","linkset",{"title":260,"path":301,"stem":302,"description":303,"icon":13,"tags":304},"\u002Fdocs\u002Fdigital-product-passport\u002Feudr\u002Fcomplete-examples","docs\u002F11.digital-product-passport\u002F02.eudr\u002F04.complete-examples","Reference EUDR examples — timber product passport, derived product, regulatory notification, harvesting \u002F origin-declaration \u002F processing \u002F supply-chain-transfer \u002F exemption events",[278,265,280,245,305],"geolocation",[278,279,280,216,31,103,35,218,245],{"title":308,"path":309,"stem":310,"children":311,"description":313,"icon":314,"tags":333},"Textile DPP","\u002Fdocs\u002Fdigital-product-passport\u002Ftextile","docs\u002F11.digital-product-passport\u002F03.textile\u002Findex",[312,320,327],{"title":308,"path":309,"stem":310,"description":313,"icon":314,"tags":315},"Digital Product Passport vocabulary for textiles and apparel under the EU Sustainable Textiles Strategy and ESPR 2024\u002F1781.","heroicons-outline:sparkles",[316,317,318,216,218,319],"textile","apparel","footwear","fibre-composition",{"title":247,"path":321,"stem":322,"description":323,"icon":324,"tags":325},"\u002Fdocs\u002Fdigital-product-passport\u002Ftextile\u002Fimplementation-guide","docs\u002F11.digital-product-passport\u002F03.textile\u002F01.implementation-guide","How to assemble a Textile Digital Product Passport against the published openepcis-dpp-ready textile vocabulary","heroicons-outline:scissors",[316,317,318,326],"implementation",{"title":260,"path":328,"stem":329,"description":330,"icon":13,"tags":331},"\u002Fdocs\u002Fdigital-product-passport\u002Ftextile\u002Fcomplete-examples","docs\u002F11.digital-product-passport\u002F03.textile\u002F02.complete-examples","Reference Textile Digital Product Passport documents covering apparel and footwear",[316,265,317,318,332,63],"fiber-composition",[316,317,318,216,218,319],{"title":335,"path":336,"stem":337,"children":338,"description":340,"icon":60,"tags":347},"Interoperability","\u002Fdocs\u002Fdigital-product-passport\u002Finteroperability","docs\u002F11.digital-product-passport\u002F04.interoperability\u002Findex",[339],{"title":335,"path":336,"stem":337,"description":340,"icon":60,"tags":341},"Guide to OpenEPCIS DPP interoperability with GS1, UNTP, CIRPASS2, and ESPR standards.",[342,343,103,344,230,345,346,220],"interoperability","untp","cirpass2","standards","alignment",[342,343,103,344,230,345,346,220],{"title":349,"path":350,"stem":351,"description":352,"icon":29,"tags":353},"DPP Resolution Flow","\u002Fdocs\u002Fdigital-product-passport\u002Fdpp-resolution-flow","docs\u002F11.digital-product-passport\u002F05.dpp-resolution-flow","How OpenEPCIS combined GS1 Digital Link, the IETF linkset format and content negotiation into one DPP resolution flow",[354,97,299,355,298],"walkthrough","content-negotiation",{"title":357,"path":358,"stem":359,"description":360,"icon":361,"tags":362},"Resolver Setup","\u002Fdocs\u002Fdigital-product-passport\u002Fresolver-setup","docs\u002F11.digital-product-passport\u002F06.resolver-setup","How to expose your DPP behind a GS1 Digital Link resolver","heroicons-outline:server",[298,97,299],{"title":364,"path":365,"stem":366,"description":367,"icon":368,"tags":369},"Multi-Component Example","\u002Fdocs\u002Fdigital-product-passport\u002Fmulti-component-example","docs\u002F11.digital-product-passport\u002F07.multi-component-example","How a composite product references separately-passported components via standard GS1 Digital Link and EPCIS aggregation","heroicons-outline:puzzle-piece",[370,371,372,344],"example","components","aggregation",{"title":374,"path":375,"stem":376,"children":377,"description":379,"icon":380,"tags":399},"Electronics DPP","\u002Fdocs\u002Fdigital-product-passport\u002Felectronics","docs\u002F11.digital-product-passport\u002F08.electronics\u002Findex",[378,387,392],{"title":374,"path":375,"stem":376,"description":379,"icon":380,"tags":381},"Digital Product Passport vocabulary for electronic devices under ESPR, the French Repairability Index, EU Right to Repair and WEEE.","heroicons-outline:device-phone-mobile",[382,383,384,385,386],"electronics","repairability","weee","energy-label","right-to-repair",{"title":247,"path":388,"stem":389,"description":390,"icon":174,"tags":391},"\u002Fdocs\u002Fdigital-product-passport\u002Felectronics\u002Fimplementation-guide","docs\u002F11.digital-product-passport\u002F08.electronics\u002F01.implementation-guide","How to assemble an Electronics Digital Product Passport against the published openepcis-dpp-ready electronics vocabulary",[382,326,383,384,385],{"title":260,"path":393,"stem":394,"description":395,"icon":13,"tags":396},"\u002Fdocs\u002Fdigital-product-passport\u002Felectronics\u002Fcomplete-examples","docs\u002F11.digital-product-passport\u002F08.electronics\u002F02.complete-examples","Reference Electronics Digital Product Passport documents covering smartphone, laptop, display and server",[382,265,397,398,63],"smartphone","laptop",[382,383,384,385,386],{"title":401,"path":402,"stem":403,"description":404,"icon":228,"tags":405},"Signed Passports","\u002Fdocs\u002Fdigital-product-passport\u002Fsigned-passports","docs\u002F11.digital-product-passport\u002F09.signed-passports","How OpenEPCIS signs product passports so that software nobody here wrote can verify them — W3C Data Integrity, did:web, and the canonicalization layer that decides whether a signature travels.",[406,407,408,409,342,410],"verifiable-credentials","data-integrity","did-web","canonicalization","trust",[215,216,217,31,218,35,219,220],{"title":413,"path":414,"stem":415,"children":416,"description":418,"icon":419,"tags":427},"Profile Checker","\u002Fdocs\u002Fprofile-checker","docs\u002F12.profile-checker\u002Findex",[417],{"title":413,"path":414,"stem":415,"description":418,"icon":419,"tags":420},"OpenEPCIS tool to define EPCIS event profiles as JSON Schema and validate EPCIS documents or events against them.","heroicons-outline:clipboard-document-check",[16,421,422,423,424,425,426,21,72],"event-profile","profile-checker","json-schema","validation","data-quality","conformance",[16,421,422,423,424,425,426,21,72],{"title":429,"path":430,"stem":431,"children":432,"description":434,"icon":435,"tags":571},"Digital Data Management","\u002Fdocs\u002Fdigital-data-management","docs\u002F13.digital-data-management\u002Findex",[433,440,452,462,473,484,493,505,515,526,535,547,559],{"title":429,"path":430,"stem":431,"description":434,"icon":435,"tags":436},"End-user guide to OpenEPCIS Digital Data Management — curate GS1 master data, publish digital product passports, manage resolver links and analyze scans.","heroicons-outline:circle-stack",[437,438,215,97,439,298],"ddm","master-data","catalog",{"title":441,"path":442,"stem":443,"description":444,"icon":445,"tags":446},"Getting Started","\u002Fdocs\u002Fdigital-data-management\u002Fgetting-started","docs\u002F13.digital-data-management\u002F01.getting-started","Signing in to Digital Data Management, finding your way around the catalog workspace, and setting up your profile and integration tokens.","heroicons-outline:rocket-launch",[437,447,448,449,450,451],"login","keycloak","workspace","roles","profile",{"title":453,"path":454,"stem":455,"description":456,"icon":457,"tags":458},"Products","\u002Fdocs\u002Fdigital-data-management\u002Fproduct-catalog","docs\u002F13.digital-data-management\u002F02.product-catalog","The DDM product catalog — creating products from a passport type, importing in bulk, and keeping the catalog tidy.","heroicons-outline:cube",[437,459,105,460,461,439],"products","passport-type","bulk-import",{"title":463,"path":464,"stem":465,"description":466,"icon":467,"tags":468},"Passport Editor","\u002Fdocs\u002Fdigital-data-management\u002Fpassport-editor","docs\u002F13.digital-data-management\u002F03.passport-editor","One editor for products, organizations and places — ontology-generated forms, rich field widgets, GS1 validation, access levels and full version history.","heroicons-outline:pencil-square",[437,469,63,424,470,471,472],"editor","gpc","access-level","versions",{"title":474,"path":475,"stem":476,"description":477,"icon":478,"tags":479},"Organizations & Places","\u002Fdocs\u002Fdigital-data-management\u002Forganizations-and-places","docs\u002F13.digital-data-management\u002F04.organizations-and-places","GLN-keyed party and location records in DDM — organization roles, primary locations, and the public GLN information pages.","heroicons-outline:building-office-2",[437,480,481,111,482,483],"organizations","places","party","location",{"title":485,"path":486,"stem":487,"description":488,"icon":489,"tags":490},"Linksets","\u002Fdocs\u002Fdigital-data-management\u002Flinksets","docs\u002F13.digital-data-management\u002F05.linksets","Managing the resolver links behind every scan — the linkset explorer, the ownership model, and templated links that adapt to the scanned code.","heroicons-outline:link",[437,299,97,298,491,492],"linktype","templated-links",{"title":494,"path":495,"stem":496,"description":497,"icon":498,"tags":499},"Public Passports","\u002Fdocs\u002Fdigital-data-management\u002Fpublic-passports","docs\u002F13.digital-data-management\u002F06.public-passports","What consumers see — the demo gallery, the passport viewer at model, lot and item level, and template-driven rendering.","heroicons-outline:qr-code",[437,500,501,502,503,504],"passport","qr-code","consumer","templates","digital-link",{"title":506,"path":507,"stem":508,"description":509,"icon":419,"tags":510},"Passport Templates","\u002Fdocs\u002Fdigital-data-management\u002Fpassport-templates","docs\u002F13.digital-data-management\u002F07.passport-templates","What each passport type asks for — field obligations, hidden fields and creation defaults, layered from shipped defaults to deployment and tenant overrides.",[437,503,511,512,513,514],"requirements","obligations","creation-defaults","dpp-ready",{"title":516,"path":517,"stem":518,"description":519,"icon":520,"tags":521},"Field Access","\u002Fdocs\u002Fdigital-data-management\u002Ffield-access","docs\u002F13.digital-data-management\u002F08.field-access","Deciding which data fields consumers, operators and authorities can see — tier by tier, with persona preview and a reviewer workflow.","heroicons-outline:lock-closed",[437,522,523,230,524,525],"field-access","access-tiers","governance","skos",{"title":527,"path":528,"stem":529,"description":530,"icon":29,"tags":531},"Resolver Domains","\u002Fdocs\u002Fdigital-data-management\u002Fresolver-domains","docs\u002F13.digital-data-management\u002F09.resolver-domains","Serving GS1 Digital Links from your own hostname — CNAME setup, verification, and test prefixes to try it without a GS1 license.",[437,298,532,533,534,112],"custom-domain","cname","dns",{"title":536,"path":537,"stem":538,"description":539,"icon":540,"tags":541},"GS1 Sync","\u002Fdocs\u002Fdigital-data-management\u002Fgs1-sync","docs\u002F13.digital-data-management\u002F10.gs1-sync","Publishing your catalog to GS1 Germany — service tokens, licensed prefixes, the key pool, Verified by GS1, and the per-record Sync tab.","heroicons-outline:arrow-path",[437,542,543,544,545,546],"gs1-germany","sync","service-token","key-pool","verified-by-gs1",{"title":548,"path":549,"stem":550,"description":551,"icon":552,"tags":553},"Scan Analytics","\u002Fdocs\u002Fdigital-data-management\u002Fscan-analytics","docs\u002F13.digital-data-management\u002F11.scan-analytics","What only a resolver can know — anonymous scan statistics, demand insights, and a live privacy report that shows exactly what is and is not collected.","heroicons-outline:chart-bar",[437,554,555,556,557,558],"scans","analytics","privacy","k-anonymity","insights",{"title":560,"path":561,"stem":562,"description":563,"icon":564,"tags":565},"Integration Tokens","\u002Fdocs\u002Fdigital-data-management\u002Fconnector-tokens","docs\u002F13.digital-data-management\u002F12.connector-tokens","How a machine gets its own long-lived credential for your catalog — issuing an offline token, naming it, seeing what it did, and revoking it when the system it belonged to is retired.","heroicons-outline:key",[437,566,567,568,569,570,448],"integration","offline-token","connector","erp","pim",[437,438,215,97,439,298],{"title":573,"path":574,"stem":575,"children":576,"description":578,"icon":579},"OpenEPCIS Overview","\u002Fdocs\u002Fplatform-overview","docs\u002F14.platform-overview\u002Findex",[577,580,586,592],{"title":573,"path":574,"stem":575,"description":578,"icon":579},"A GS1-conformant supply-chain data platform — Resolver, Masterdata, EPCIS Events — in open source and business editions.","lucide:layout-dashboard",{"title":581,"path":582,"stem":583,"description":584,"icon":585},"Architecture","\u002Fdocs\u002Fplatform-overview\u002Farchitecture","docs\u002F14.platform-overview\u002F01.architecture","How OpenEPCIS handles identity, isolation, events, and GS1 conformance — the four things that distinguish the platform.","lucide:cpu",{"title":587,"path":588,"stem":589,"description":590,"icon":591},"Feature Matrix","\u002Fdocs\u002Fplatform-overview\u002Ffeature-matrix","docs\u002F14.platform-overview\u002F02.feature-matrix","OpenEPCIS capabilities by edition, aligned to the relevant GS1 standards.","lucide:check-square",{"title":593,"path":594,"stem":595,"children":596,"description":598,"icon":599},"Modules","\u002Fdocs\u002Fplatform-overview\u002Fmodules","docs\u002F14.platform-overview\u002Fmodules\u002Findex",[597,600,607,615,623,629,635,641],{"title":593,"path":594,"stem":595,"description":598,"icon":599},"Seven module families that organise the OpenEPCIS platform — Resolver, Masterdata, EPCIS Events, Formats & Validation, Integration, Testdata, Platform.","lucide:layers",{"title":601,"path":602,"stem":603,"description":604,"icon":605,"tags":606},"GS1 Conformant Resolver","\u002Fdocs\u002Fplatform-overview\u002Fmodules\u002Fresolver","docs\u002F14.platform-overview\u002Fmodules\u002F01.resolver","Resolves GS1 Digital Link URIs to product information, masterdata, EPCIS endpoints, and twelve more standard link types.","lucide:link-2",[298,97,103,299,220],{"title":608,"path":609,"stem":610,"description":611,"icon":612,"tags":613},"GS1 Web Vocabulary & Masterdata","\u002Fdocs\u002Fplatform-overview\u002Fmodules\u002Fmasterdata","docs\u002F14.platform-overview\u002Fmodules\u002F02.masterdata","Web Vocabulary models, masterdata-to-resolver REST pattern, GS1 Germany Activate Plus \u002F GEPIR sync, and the event-driven masterdata bus.","lucide:database",[220,614,103,298,63],"masterdata",{"title":616,"path":617,"stem":618,"description":619,"icon":620,"tags":621},"EPCIS Events — Capture, Query, Subscriptions","\u002Fdocs\u002Fplatform-overview\u002Fmodules\u002Fepcis-events","docs\u002F14.platform-overview\u002Fmodules\u002F03.epcis-events","EPCIS 2.0 REST and SOAP, live streaming subscriptions, resilient pagination, OpenSearch event store.","lucide:activity",[39,16,31,65,622,35],"subscriptions",{"title":624,"path":625,"stem":626,"description":627,"icon":628},"Formats, Validation & Identity","\u002Fdocs\u002Fplatform-overview\u002Fmodules\u002Fformats","docs\u002F14.platform-overview\u002Fmodules\u002F04.formats","XML ↔ JSON-LD conversion, multi-layer validation, identifier translation, idempotent event hashing.","lucide:file-check",{"title":630,"path":631,"stem":632,"description":633,"icon":634},"Integration & Gateways","\u002Fdocs\u002Fplatform-overview\u002Fmodules\u002Fintegration","docs\u002F14.platform-overview\u002Fmodules\u002F05.integration","AS2 gateway for EDI partners, cloud storage, file service, natural-language AI assistant.","lucide:plug",{"title":636,"path":637,"stem":638,"description":639,"icon":640},"Testdata & Developer Tooling","\u002Fdocs\u002Fplatform-overview\u002Fmodules\u002Ftestdata","docs\u002F14.platform-overview\u002Fmodules\u002F06.testdata","Synthetic EPCIS test event generation, reference event collections, conformance test suite, SDKs.","lucide:wrench",{"title":642,"path":643,"stem":644,"description":645,"icon":646},"Platform, Build & Observability","\u002Fdocs\u002Fplatform-overview\u002Fmodules\u002Fplatform","docs\u002F14.platform-overview\u002Fmodules\u002F07.platform","How OpenEPCIS is built, deployed, and observed.","lucide:server",{"title":648,"path":649,"stem":650,"children":651,"description":653,"icon":29,"tags":661},"Vision","\u002Fdocs\u002Fvision","docs\u002F15.vision\u002Findex",[652],{"title":648,"path":649,"stem":650,"description":653,"icon":29,"tags":654},"How UNTP, DIDs, Verifiable Credentials, and EPCIS work together to create unified product identity infrastructure for the connected supply chain.",[655,656,657,406,343,658,659,660],"vision","digital-twin","did","rfid","industry-4-0","web-3-0",[655,656,657,406,343,658,659,660],{"title":663,"path":664,"stem":665,"children":666,"description":668,"icon":634},"API Reference","\u002Fdocs\u002Fapi-reference","docs\u002F16.api-reference\u002Findex",[667],{"title":663,"path":664,"stem":665,"description":668,"icon":634},"Interactive OpenAPI references for the GS1 Digital Link Resolver and the EPCIS 2.0 REST bindings.",{"title":670,"path":671,"stem":672,"children":673,"description":675,"icon":540,"tags":724},"Connectors","\u002Fdocs\u002Fconnectors","docs\u002F16.connectors\u002Findex",[674,682,692,701,707,717],{"title":670,"path":671,"stem":672,"description":675,"icon":540,"tags":676},"How the master data you already keep in a PIM or an ERP becomes two passport forms, a stream of EPCIS events and a resolvable GS1 Digital Link — and how far each connector has come.",[677,678,679,680,681,215,31,298],"connectors","unopim","odoo","erpnext","metasfresh",{"title":683,"path":684,"stem":685,"description":686,"icon":60,"tags":687},"How It Works","\u002Fdocs\u002Fconnectors\u002Fhow-a-connector-works","docs\u002F16.connectors\u002F01.how-a-connector-works","The mechanics of a connector — the outbound half that polls, maps and publishes, the inbound bridge that answers identity questions, and the design rules the code holds you to.",[677,543,688,689,690,691],"mapping","bridge","webhook","idempotency",{"title":693,"path":694,"stem":695,"description":696,"icon":697,"tags":698},"Identifiers","\u002Fdocs\u002Fconnectors\u002Fidentifiers-gtin-and-sku","docs\u002F16.connectors\u002F02.identifiers-gtin-and-sku","One product needs exactly one GS1 identifier — the GTIN. Where the connector finds it, why your SKU is a different thing, and how batch, serial and logistics-unit levels build on top.","heroicons-outline:hashtag",[677,105,699,109,110,104,700],"sku","check-digit",{"title":702,"path":703,"stem":704,"description":705,"icon":540,"tags":706},"UnoPim","\u002Fdocs\u002Fconnectors\u002Funopim","docs\u002F16.connectors\u002F03.unopim","The whole UnoPim route — what has to exist in the PIM, how the connection is configured, what the first sync publishes, and where the data surfaces in DDM and on the published passport page.",[677,678,570,105,688,690,500],{"title":708,"path":709,"stem":710,"description":711,"icon":228,"tags":712},"Events & Credentials","\u002Fdocs\u002Fconnectors\u002Fevents-credentials-and-representations","docs\u002F16.connectors\u002F04.events-credentials-and-representations","What happens after a record is published — how a movement in your source system becomes an EPCIS event, where UNTP answers the same question differently, and how a passport gains a signed, selectively disclosed representation.",[677,31,65,713,714,715,406,343,523,716],"event-types","transformation","error-declaration","representations",{"title":718,"path":719,"stem":720,"description":721,"icon":457,"tags":722},"Odoo walkthrough","\u002Fdocs\u002Fconnectors\u002Fodoo","docs\u002F16.connectors\u002F05.odoo","One warehouse day walked through end to end — goods in, packed onto a pallet, shipped, part of it back, the rest ground into another article, and one report taken back — with the screen and the EPCIS event it produces side by side.",[677,679,31,65,104,372,714,723],"tutorial",[677,678,679,680,681,215,31,298],[726],{"title":727,"path":728,"stem":729,"children":730,"page":742},"Blog","\u002Fblog","blog",[731,737],{"title":732,"path":733,"stem":734,"description":735,"icon":736},"The Web-based DPP doesn't need new infrastructure","\u002Fblog\u002Fdpp-stack-for-agents","blog\u002F01.dpp-stack-for-agents","Three GS1 standards — Digital Link, Web Vocabulary, Conformant Resolver — plus EPCIS 2.0 already cover the agent-facing layer of the Digital Product Passport.","heroicons-outline:newspaper",{"title":738,"path":739,"stem":740,"description":741,"icon":736},"Fascinating in Theory. It Just Doesn't Work in Practice.","\u002Fblog\u002Fblockchain-traceability","blog\u002F02.blockchain-traceability","Why blockchain is the wrong answer to traceability, and why it refuses to die anyway.",false,{"doc":744,"usedFallback":742},{"id":745,"title":670,"body":746,"description":675,"extension":1475,"icon":540,"lastUpdated":1476,"meta":1477,"navigation":1488,"path":671,"seo":1490,"sitemap":1491,"stem":672,"__hash__":1495},"docsEN\u002Fdocs\u002F16.connectors\u002Findex.md",{"type":747,"value":748,"toc":1464},"minimark",[749,754,758,761,765,773,778,807,871,928,934,942,946,965,991,1016,1031,1084,1088,1094,1149,1170,1192,1202,1206,1209,1264,1278,1287,1311,1315,1322,1325,1332,1338,1347,1353,1368,1383,1387,1390,1436,1442,1445,1458,1461],[750,751,753],"h2",{"id":752},"why-connect-a-source-system-at-all","Why connect a source system at all",[755,756,757],"p",{},"Almost nothing a digital product passport needs is new information. The product name and its translations, the marketing text, the images, the net weight and the packaging dimensions, the brand, the target market — all of that is already written down, curated and argued over, in a product information system or an ERP. What is missing is not the data but the shape: a GS1 identifier that is also a web address, a vocabulary the rest of the world reads, an access tier per field, and a place on the public web where a scan lands.",[755,759,760],{},"A connector does exactly that piece of work and nothing more. It reads a record from the system that owns it, maps it onto GS1 terms, and publishes it into the OpenEPCIS catalog under the product's GS1 Digital Link. The source system stays the place where a human edits a product; the platform becomes the place where that product is identified, published, resolved and observed. Nobody maintains the same fact twice.",[750,762,764],{"id":763},"one-record-two-passport-forms","One record, two passport forms",[755,766,767,768,772],{},"The interesting part begins after the data has arrived. The same master data carries ",[769,770,771],"strong",{},"two passport forms",", and they sit beside each other rather than one above the other.",[774,775],"diagram-image",{"alt":776,"src":777},"One record from a source system flows through a connector into the catalog, from where the GS1 master-data document, the EN 18223 passport and EPCIS events are all served behind the GS1 Conformant Resolver","\u002Fdiagrams\u002Fconnectors-dual-build",[755,779,780,781,785,786,790,791,794,795,798,799,802,803,806],{},"The first form is the master-data document itself: JSON-LD over the ",[782,783,784],"a",{"href":609},"GS1 Web Vocabulary",", stored and served by the GS1 Digital Link resolver and addressed by a GS1 Digital Link — ",[787,788,789],"code",{},"\u002F01\u002F\u003Cgtin>"," for the model, ",[787,792,793],{},"\u002F01\u002F\u003Cgtin>\u002F10\u002F\u003Clot>"," for a batch, ",[787,796,797],{},"\u002F01\u002F\u003Cgtin>\u002F21\u002F\u003Cserial>"," for a single item. This form carries its own semantics: every term is defined in the ",[787,800,801],{},"@context",", so the document expands to RDF, serialises to Turtle or N-Triples and can be checked against SHACL shapes. It is also the form you can shape yourself. The vocabularies that describe a battery, a textile, a packaging unit or an EUDR-relevant commodity live in ",[787,804,805],{},"openepcis-dpp-ready"," as ontology files with their JSON Schemas and shapes beside them, and a connector mapping can target any term they define. You can publish it today, for a product group no regulation has reached yet, and it will still be readable by anything that speaks GS1.",[755,808,809,810,816,817,820,821,820,824,820,827,820,830,820,833,836,837,820,840,820,843,820,846,820,849,820,852,820,855,820,858,820,861,864,865,867,868,870],{},"The second form is the ",[769,811,812,813],{},"EN 18223:2026 ",[787,814,815],{},"DigitalProductPassport",", served over the method set that CEN\u002FCENELEC's EN 18222 defines for passport lifecycle management and searchability — ",[787,818,819],{},"CreateDPP",", ",[787,822,823],{},"ReadDPPById",[787,825,826],{},"ReadDPPByProductId",[787,828,829],{},"ReadDPPVersionByIdAndDate",[787,831,832],{},"UpdateDPPById",[787,834,835],{},"DeleteDPPById"," and the rest. CEN publishes no OpenAPI document for that method set, so the contract OpenEPCIS serves is hand-authored: every path, verb, parameter and status code cites the EN 18222 clause it comes from, and the standard's own text is not reproduced. This form is not free-form: EN 18223 fixes an envelope, and the derivation fills it in a fixed order — ",[787,838,839],{},"digitalProductPassportId",[787,841,842],{},"uniqueProductIdentifier",[787,844,845],{},"granularity",[787,847,848],{},"dppSchemaVersion",[787,850,851],{},"dppStatus",[787,853,854],{},"lastUpdated",[787,856,857],{},"economicOperatorId",[787,859,860],{},"facilityId",[787,862,863],{},"contentSpecificationIds",". Two of those the service refuses to do without at creation time: master data with no GS1 Digital Link to serve as the ",[787,866,842],{},", or with no economic operator identity, is rejected by ",[787,869,819],{}," rather than stored and served as a half-passport. That rigidity is the point. It is what a market surveillance authority, a customs system or somebody else's passport client can rely on without a bilateral agreement.",[755,872,873,874,877,878,881,882,885,886,889,890,893,894,897,898,901,902,905,906,909,910,913,914,916,917,920,921,924,925,927],{},"Neither form is a translation of the other, and neither is stored twice. The EN form is ",[769,875,876],{},"derived on read",", and by a service of its own: the ",[769,879,880],{},"DPP API"," is a separate Quarkus application with its own address rather than a corner of the resolver. It reads the master data — configured with ",[787,883,884],{},"dpp.masterdata.backend=resolver"," it fetches it live back out of the Digital Link resolver, so the data flows in both directions — lays the time-stamped amendments over it as an overlay, and computes the passport from the result. Above the data elements sits the envelope, whose handful of keys map from fixed passport IRIs. Everything below it is derived per property with no hand-written mapping — the property IRI becomes the ",[787,887,888],{},"dictionaryReference",", the ontology range becomes the ",[787,891,892],{},"valueDataType",", and the shape of the value chooses the object type, so a literal becomes a ",[787,895,896],{},"SingleValuedDataElement",", a set becomes a ",[787,899,900],{},"DataElementCollection"," and a document reference becomes a ",[787,903,904],{},"RelatedResource",". Three JSON representations come out of the same computation: ",[787,907,908],{},"compressed"," (the EN 18223 §5.2 form, with ",[787,911,912],{},"operational"," as a silent alias — the master-data properties are echoed verbatim and their shape preserved under the operational ",[787,915,801],{},", so a body written through the API round-trips), ",[787,918,919],{},"full"," (also ",[787,922,923],{},"expanded",", the Annex A form with every data element spelled out) and ",[787,926,103],{}," (the stored GS1 body on its own). The same passport is also served as XML — Annex B compressed or expanded — and as Turtle, N-Triples or N-Quads.",[755,929,930,931,933],{},"Why keep both, then? Because each can do something the other cannot. EN 18223 specifies plain JSON and deliberately keeps semantic definitions out of the payload, reachable out of band through a ",[787,932,888],{},", so that catalogues built on IRDIs — IEC 61360, eCl@ss, the Asset Administration Shell — can take part without re-minting their definitions as web IRIs; the price is that an IRDI cannot be dereferenced, where a web IRI can. The GS1 form pays the opposite price and gets the opposite benefit. Keeping them as two derivations of one record, rather than two records, is what stops them from drifting apart.",[755,935,936,937,941],{},"Changes are recorded the same way: an amendment is an overlay on the immutable master data — either a whole-document RFC 7396 merge patch or a targeted edit at one element path — and each amendment is time-stamped. Those stamps ",[938,939,940],"em",{},"are"," the version history. They are what lets a reader ask for the passport as it stood on a given date, and they are what EN 18221 archiving, which begins with the first change, is built on.",[750,943,945],{"id":944},"beside-the-passports-the-event-half","Beside the passports: the event half",[755,947,948,949,952,953,956,957,960,961,964],{},"Master data answers ",[938,950,951],{},"what this product is",". It cannot answer ",[938,954,955],{},"what became of this particular one",", and it should not try. That question belongs to EPCIS 2.0, which OpenEPCIS runs as a separate repository with its own address and its own rights — ",[787,958,959],{},"capture"," to write, ",[787,962,963],{},"query"," to read — even where a deployment happens to host both on one machine.",[755,966,967,968,971,972,975,976,979,980,983,984,986,987,990],{},"The class\u002Finstance distinction runs through everything here. A bare GTIN is the model. A GTIN with a lot number (AI 10) is an LGTIN and therefore class level, so it travels in an event's ",[787,969,970],{},"quantityList"," as an ",[787,973,974],{},"epcClass",". A GTIN with a serial number (AI 21) is an SGTIN, a single item, and travels in the ",[787,977,978],{},"epcList",". An SSCC (AI 00) identifies a logistic unit and becomes the ",[787,981,982],{},"parentID"," of an aggregation. Putting an LGTIN in an ",[787,985,978],{}," produces an event that validates and means the wrong thing, which is why the connectors derive these identifiers rather than letting anyone type them: every one of them is a canonical GS1 Digital Link URI on ",[787,988,989],{},"id.gs1.org"," — an identity, not an address, so two companies describing the same pallet produce byte-identical strings.",[755,992,993,994,997,998,1001,1002,1005,1006,1008,1009,1011,1012,1015],{},"Event identity is derived too, and it is derived from the event itself: the ",[787,995,996],{},"eventID"," is the canonical CBV event hash, ",[787,999,1000],{},"ni:\u002F\u002F\u002Fsha-256;…?ver=CBV2.0",", computed over everything the event asserts apart from a short exclusion list — the identifier itself, ",[787,1003,1004],{},"recordTime",", an error declaration, the ",[787,1007,801],{},". Anybody holding the event can recompute it, so it names the statement rather than the sender. A repeat poll, a nightly sweep or a retry after a half-done publish therefore arrives at the same identifier, and the repository recognises the repetition twice over: it de-duplicates on that hash, and it separately refuses an ",[787,1010,996],{}," it has already seen. The connectors send ",[787,1013,1014],{},"GS1-Capture-Error-Behaviour: proceed",", so a re-capture becomes a no-op rather than a failed job.",[755,1017,1018,1019,1022,1023,1026,1027,1030],{},"The precondition is that the time comes from the source — ",[787,1020,1021],{},"date_done"," on an Odoo transfer, ",[787,1024,1025],{},"creation"," on a Frappe document, ",[787,1028,1029],{},"created_at"," on a UnoPim product — and never from the clock at reporting time. The event time is part of the statement and therefore part of the identity; inventing one would rename the same movement on every attempt. Where the source is silent, no event is made, and the connector says so where somebody will see it.",[755,1032,1033,1034,1037,1038,820,1041,1044,1045,1048,1049,1052,1053,1056,1057,1060,1061,1063,1064,1067,1068,1071,1072,1075,1076,1079,1080,1083],{},"What each connector contributes to that half differs. The Java connectors mint exactly one kind of event: a commissioning ",[787,1035,1036],{},"ObjectEvent"," (",[787,1039,1040],{},"action=ADD",[787,1042,1043],{},"bizStep=commissioning",") the first time a batch or a serial number is published, and only when the connection has ",[787,1046,1047],{},"epcis.enabled"," and the article itself consents through ",[787,1050,1051],{},"commissionCaptureEnabled",". It deliberately carries no ",[787,1054,1055],{},"ilmd",": a production date copied into an event is a second copy that can go stale, while the instance's own master data stays resolvable through the ",[787,1058,1059],{},"gs1:masterData"," link registered for that exact instance path. The Odoo connector goes further and reports movement: a validated stock transfer becomes an ",[787,1062,1036],{}," with ",[787,1065,1066],{},"action=OBSERVE",", whose ",[787,1069,1070],{},"bizStep"," and ",[787,1073,1074],{},"disposition"," come from the operation type as data rather than from code, whose read point and business location are SGLNs derived from the location's GLN, and whose ",[787,1077,1078],{},"bizTransactionList"," ties the physical record to the commercial one. Packing becomes its own ",[787,1081,1082],{},"AggregationEvent"," under a minted SSCC, emitted before the movement event because that is the order of reality.",[750,1085,1087],{"id":1086},"above-everything-the-resolver-as-the-web-layer","Above everything: the resolver as the web layer",[755,1089,1090,1091,1093],{},"The layer that makes all of this reachable is the GS1 Conformant Resolver, and its job is short to describe: it turns an identifier into a URL, that URL into a ",[769,1092,299],{},", and each request into a decision about who may see what.",[755,1095,1096,1097,1100,1101,1104,1105,1107,1108,1111,1112,1114,1115,1118,1119,1122,1123,1125,1126,1129,1130,1133,1134,1137,1138,1140,1141,1144,1145,1148],{},"The linkset is served as RFC 9264 ",[787,1098,1099],{},"application\u002Flinkset+json"," with a ",[787,1102,1103],{},"Link"," header pointing back at itself and another at its JSON-LD context. Each entry is a typed destination on the same anchor. ",[787,1106,1059],{}," points at the master-data document. ",[787,1109,1110],{},"gs1:dpp"," points at the DPP API's ",[787,1113,826],{}," endpoint for this product's canonical Digital Link, which is how the two passport forms end up reachable from the same printed code. That entry exists only once a deployment tells the resolver where its DPP API lives, through a single property — ",[787,1116,1117],{},"openepcis.digital-link-resolver.dpp-base-url",", bound to the environment variable ",[787,1120,1121],{},"OPENEPCIS_DLR_DPP_BASE_URL"," and empty by default. With no value set, no ",[787,1124,1110],{}," entry is emitted at all; what the value should be is a deployment decision, and no address is baked into the code. ",[787,1127,1128],{},"gs1:pip"," points at a consumer-facing product page, which is where a PIM's own published passport page belongs. ",[787,1131,1132],{},"gs1:epcisRepository"," points at the event half. Link types resolve in any spelling — the full IRI ",[787,1135,1136],{},"https:\u002F\u002Fref.gs1.org\u002Fvoc\u002Fpip",", the CURIE ",[787,1139,1128],{}," and the bare ",[787,1142,1143],{},"pip"," all land on the same storage key — and where a requested link type has several equally good targets, the resolver can answer ",[787,1146,1147],{},"300 Multiple Choices"," with the linkset rather than silently picking one.",[755,1150,1151,1152,820,1155,1071,1158,1161,1162,1165,1166,1169],{},"Access is the second half of the resolver's job, and it uses the same three tiers as the passport API, spelled identically so a tier travels unchanged between stored document, served document and search-index role filter: ",[769,1153,1154],{},"Public",[769,1156,1157],{},"AuthorizedOnly",[769,1159,1160],{},"Restricted",". The vocabulary says what those tiers are ",[938,1163,1164],{},"meant"," to express, in the words of ESPR Article 9 — Public for everyone including market surveillance and customs, AuthorizedOnly for authorities alone, Restricted for named authorised economic operators. What a running resolver enforces is narrower and purely mechanical: Restricted for a caller who holds the restricted role and belongs to the owning tenant, AuthorizedOnly for any authenticated member of that tenant, Public for everybody else — an authority outside the tenant included. At runtime there is no such actor as ",[938,1167,1168],{},"customs",", only tenant membership and a role, and who holds the restricted role is a deployment decision in the identity provider rather than something the code can promise.",[755,1171,1172,1173,1176,1177,1180,1181,1184,1185,1188,1189,1191],{},"Document-level access is enforced today by OpenSearch document-level security against the stored ",[787,1174,1175],{},"accessLevel",", which decides whether a record resolves at all. Field-level filtering decides which of a record's fields are served; it touches read paths only — a write or a patch is never filtered, or an operator's edit would silently drop the fields they cannot see — and it fails closed, falling back to a minimal policy when the policy store is unreachable. It is also still behind a rollout gate: ",[787,1178,1179],{},"dlr.field-access.enforce"," defaults to ",[787,1182,1183],{},"false",", and until it is switched on no field is filtered on any read path. The tiers themselves come from the vocabulary rather than from code: a property annotated with an access level contributes it as the semantic default, and an annotation naming a mandating authority locks that term outright — a deployment or tenant policy can then neither loosen nor tighten it. For every term that is ",[938,1186,1187],{},"not"," mandated, policy may tighten but never loosen, and a property that says nothing at all falls back to ",[938,1190,1157],{}," — closed toward the public, not open.",[1193,1194,1196],"alert",{"type":1195},"info",[755,1197,1198,1201],{},[769,1199,1200],{},"Standards note",": EN 18222 and EN 18223 are two of the six parts CEN\u002FCENELEC JTC 24 published in 2026 under standardisation request M\u002F604; as of 2026 the series is not yet cited in the EU Official Journal, so implementing it confers no formal presumption of conformity with the ESPR. The two parts that would govern access rights and data authentication, prEN 18239 and prEN 18246, are still in development, so the tier model described here is OpenEPCIS's own reading of ESPR Article 9 and no conformance to those parts is claimed.",[750,1203,1205],{"id":1204},"where-the-connectors-stand","Where the connectors stand",[755,1207,1208],{},"Four source systems are served today.",[755,1210,1211,1213,1214,1217,1218,1221,1222,1225,1226,1229,1230,1233,1234,1236,1237,1240,1241,1244,1245,1248,1249,1252,1253,1255,1256,1259,1260,1263],{},[769,1212,702],{}," is the furthest along and has two halves. The Java adapter polls ",[787,1215,1216],{},"updated_at",", listens to one webhook on ",[787,1219,1220],{},"product.created"," \u002F ",[787,1223,1224],{},"product.updated",", and publishes products and batches — a PIM knows about models and lots, not about serial numbers or parties. Where the GTIN comes from is a per-connection decision, ",[787,1227,1228],{},"source.options.gtin-from",": ",[787,1231,1232],{},"composed",", the default, builds it from the connection's company prefix, the SKU as the article reference and a computed check digit; ",[787,1235,699],{}," treats the SKU as already being the GTIN, for merchandise carrying somebody else's EAN; and any other value is read as an attribute code, ",[787,1238,1239],{},"dpp_gtin"," — UnoPim's own passport field for a GS1 key — being the obvious one. A SKU that is not numeric, or too long, or a missing prefix, is named in the log and the record skipped, rather than turned into a key that points at somebody else's product. Values are read from all four of UnoPim's value sections, with the more specific one winning, translations become a GS1 language map, images become ",[787,1242,1243],{},"referencedFile"," entries of type ",[787,1246,1247],{},"PRODUCT_IMAGE",", and measurement attributes are resolved against the platform's UN\u002FCEFACT Recommendation 20 table so a value in grams arrives as ",[787,1250,1251],{},"{\"value\": 250, \"unitCode\": \"GRM\"}",". Very little is written back — the canonical GTIN into ",[787,1254,1239],{},", because a thirteen-digit key derived from a five-digit SKU exists nowhere a human can see it, and ",[787,1257,1258],{},"ddm_action_required"," as a plain yes or no. Deliberately not the identity status: it reads ",[787,1261,1262],{},"unverified"," when the GS1 registry was merely unreachable, and a merchant who takes that for a data error goes looking for a mistake that is ours. Beside the adapter there is an optional PHP package that adds the interactive half inside UnoPim's own product form: a panel showing the platform's current verdict on the product's identity, its licensee and company prefix, its Digital Link and a QR code; a GPC picker that searches by words instead of eight-digit codes; and, for a product with no GTIN yet, two equally weighted options — draw the next number from your own prefix, or deposit one you already hold.",[755,1265,1266,1269,1270,1273,1274,1277],{},[769,1267,1268],{},"ERPNext"," needs no Frappe app installed. An API key and secret on a user, two custom fields and five webhooks (Item, Supplier, Customer, Batch, Serial No) are the whole footprint, and the GTIN is read from the item's barcode child table. It is the one adapter that carries instance level out of the source system: a Batch becomes an LGTIN document under ",[787,1271,1272],{},"\u002Fproducts\u002F{gtin}\u002F10\u002F{lot}"," and a Serial No becomes an SGTIN document under ",[787,1275,1276],{},"…\u002F21\u002F{serial}"," — but only for items actually flagged as batched or serialised, because the others are ERP bookkeeping rather than catalog instances.",[755,1279,1280,1282,1283,1286],{},[769,1281,681],{}," needs nothing installed at all: an API token issued against a read-only role, and the REST v2 interface. It polls — metasfresh has no webhooks, so the webhook rung of the diagnosis ladder simply reports itself as not applicable. GTINs come from the product's ",[787,1284,1285],{},"ean"," field and GLNs from the business partner's locations, taking the first address whose GLN passes its check digit. Writing a back-reference into metasfresh through its External References API is available, off by default, and the one thing that asks the role for a write permission. The coupling is deliberately thin, and stays thin by rule rather than by habit: no metasfresh dependency in any Maven scope and no copied schemas or field lists, the network boundary being the only connection.",[755,1288,1289,1292,1293,1299,1300,1221,1303,1306,1307,1310],{},[769,1290,1291],{},"Odoo"," is a separate matter, and lives in ",[782,1294,1298],{"href":1295,"rel":1296},"https:\u002F\u002Fgithub.com\u002Fopenepcis\u002Fopenepcis-odoo",[1297],"nofollow","its own public repository"," under LGPL-3 because Odoo brings its own runtime, packaging and licensing world. On both maintained branches — 18.0 and 19.0 — it is six addons: a base connector that queues products and contacts into an outbox for a scheduled job to publish, with publication opt-in per record; a stock addon that publishes lots and serial numbers as instance documents; an expiry addon contributing mapping rows; the events addon described above; a manufacturing bridge that reports a production order as a transformation; and a point-of-sale bridge that recognises a till and reports ",[787,1301,1302],{},"retail_selling",[787,1304,1305],{},"retail_sold"," instead of a plain delivery. Events that come back are read into an inbox, where they are made visible on the lot or the package and where they deliberately never move stock — another company's event is an observation, not a document. ",[782,1308,1309],{"href":719},"The Odoo walkthrough"," follows one warehouse day through all of it, screen by screen, with the event each step produces.",[750,1312,1314],{"id":1313},"what-they-share","What they share",[755,1316,1317,1318,1321],{},"Everything system-specific lives in an adapter, which is thin on purpose. Four methods are all it must supply: what system type it is, what changed since a given cursor, one record fetched in full, and a reachability ping. Everything else is optional and defaults to doing nothing — writing something back after a publish, verifying a webhook signature, contributing consumer-facing links, taking values from the catalog. The loop itself is shared — cursor, changes, mapping, key, hash comparison, ",[787,1319,1320],{},"PUT",", state, cursor forward — and runs identically whether a poll or a webhook started it.",[755,1323,1324],{},"Four design rules run through that loop and are worth knowing before you operate one.",[755,1326,1327,1328,1331],{},"A ",[769,1329,1330],{},"webhook is only a doorbell",". Its payload is never used as a data source; the record is re-read from the source API after the ring. This is not caution for its own sake — a measured UnoPim create fires two deliveries whose bodies do not even contain the identifier set in the same request, and a failed delivery is never retried.",[755,1333,1334,1337],{},[769,1335,1336],{},"Readiness informs, it never blocks."," A connection can report which terms a downstream registrar still wants for a given entity kind, and that information feeds a hint in a user interface or a report. It is never a gate that stops a record from being published.",[755,1339,1340,1343,1344,1346],{},[769,1341,1342],{},"Publishing is idempotent."," The catalog's ",[787,1345,1320],{}," is create-or-update and merges, and on the connector's side a canonical SHA-256 of the payload skips a record whose content has not changed. That stamp lives in the catalog record's own extensions slot, keyed by connection name, rather than in a table the connector has to keep in step.",[755,1348,1349,1352],{},[769,1350,1351],{},"A data problem and our problem are different types."," A verdict about an identifier says more than yes or no: syntax, check digit, company-prefix boundary, registry status, licensee, a reason, and provenance per individual fact — a cached answer carries the time of the registry call, not the time of the cache hit, so a human can see how old the knowledge is. When the registry or the resolver cannot be reached the verdict comes back degraded, and every offline fact still stands, because it was computed before anything could fail. Code branches on whether a human editing the record could fix it, never on whether a registry happened to answer.",[755,1354,1355,1356,1359,1360,1363,1364,1367],{},"Two operational habits complete the picture: a connection ships with ",[787,1357,1358],{},"dry-run"," set to ",[787,1361,1362],{},"true"," and only writes after somebody deliberately turns it off — behind the catalog are real registrars, GS1 production among them — and every test key in this stack starts with ",[787,1365,1366],{},"952",", the GS1 test range.",[755,1369,1370,1371,1374,1375,1378,1379,1382],{},"Mappings are data, not code: one YAML file per connection, one document per entity family, each rule naming a source, a target GS1 term, a kind and a direction. Direction decides who owns a field — ",[787,1372,1373],{},"to-catalog"," for a field the source owns, ",[787,1376,1377],{},"from-catalog"," for one the platform owns and writes back, ",[787,1380,1381],{},"both"," for a field either side may edit. Identifiers are pointedly absent from these files: GTIN, GLN and lot number are read into the record's key rather than mapped like ordinary values.",[750,1384,1386],{"id":1385},"status","Status",[755,1388,1389],{},"This is a young part of the platform, and it is worth being precise about its edges. Four source systems have adapters: UnoPim, ERPNext and metasfresh in the shared Java connector, and Odoo as its own set of addons. There is no adapter for any other system.",[755,1391,1392,1393,1395,1396,1399,1400,1403,1404,1407,1408,1411,1412,1414,1415,1418,1419,1422,1423,1425,1426,1429,1430,1432,1433,1435],{},"The EN 18223 passport is the one place where a first sync does not yet arrive at a finished result. Deriving it needs an ",[787,1394,857],{},", and the deriver takes that from the record's ",[787,1397,1398],{},"gs1:manufacturer"," — either the organisation's own party Digital Link or a GLN it can build one from. None of the three shipped default mappings targets ",[787,1401,1402],{},"manufacturer"," or ",[787,1405,1406],{},"manufacturingPlace","; organisations are synchronised, but as records of their own, and the product document does not point at them. Without that pointer the passport is not merely incomplete, it is absent: every read path refuses with ",[938,1409,1410],{},"missing mandatory EN 18223 fields: economicOperatorId",". Two things therefore have to be done by hand for now — a mapping rule onto ",[787,1413,1402],{},", a term the connector vocabulary already carries with range ",[787,1416,1417],{},"gs1:Organization",", and setting the DPP API's ",[787,1420,1421],{},"dpp.masterdata.backend"," to ",[787,1424,298],{},", because its built-in default ",[787,1427,1428],{},"memory"," only knows passports that were written to it through ",[787,1431,819],{},", which no connector ever calls. Everything else a first sync promises does arrive: a complete GS1 master-data document, a resolving Digital Link with its linkset, and for UnoPim a published PIM passport page as ",[787,1434,1128],{},".",[755,1437,1438,1439,1441],{},"Deletion is not handled either, and that is a decision rather than an oversight. A delta poll asks the source for records changed since the cursor and so never sees one that is gone; a webhook whose record has meanwhile disappeared is logged and the catalog document kept, because removing something from the catalog is treated as a deliberate act and not as the side effect of a delivery. Archiving in the source has no effect at all — a deactivated product keeps being published. Withdrawing a published passport page in UnoPim does not remove the ",[787,1440,1128],{}," entry pointing at it: the link stays and the page answers with a tombstone rather than a 404. Taking any of this back is a manual step on the catalog and linkset APIs, not something a connector follows.",[755,1443,1444],{},"The interactive half — a verdict panel, a GPC search, drawing a number from inside the host application — exists for UnoPim and Odoo. ERPNext and metasfresh are data paths only.",[755,1446,1447,1448,1451,1452,1063,1455,1457],{},"On the event side, the Java connectors emit commissioning events and nothing else: no movement, aggregation, transaction or transformation events, and no reading of events back. Four of the five event types exist in the Odoo connector instead, on both of its maintained branches, with aggregation over nested logistic units on 19.0 only because Odoo 18 has no nesting to report. ",[787,1449,1450],{},"AssociationEvent"," is produced nowhere in this stack, no connector ever states a ",[787,1453,1454],{},"TransactionEvent",[787,1456,1040],{},", and GS1 places are not published from Odoo at all.",[755,1459,1460],{},"There is no event-driven channel from the platform back into a source system. Corrections made on the platform reach a connected system through the ordinary poll and the payload hash comparison, not through a notification.",[755,1462,1463],{},"Nor is there a public way to obtain any of this yet. The Java connector is a Quarkus application shipped as a container image from a private registry, and the PHP package that adds the interactive half to UnoPim is declared proprietary and published in no repository we can point at. Odoo is the exception: its addons are public under LGPL-3.",{"title":1465,"searchDepth":1466,"depth":1466,"links":1467},"",2,[1468,1469,1470,1471,1472,1473,1474],{"id":752,"depth":1466,"text":753},{"id":763,"depth":1466,"text":764},{"id":944,"depth":1466,"text":945},{"id":1086,"depth":1466,"text":1087},{"id":1204,"depth":1466,"text":1205},{"id":1313,"depth":1466,"text":1314},{"id":1385,"depth":1466,"text":1386},"md","2026-09-02T00:00:00.000Z",{"head":1478,"readingTime":1483},{"meta":1479},[1480],{"name":1481,"content":1482},"keywords","OpenEPCIS connectors, PIM connector, ERP connector, UnoPim, Odoo, ERPNext, metasfresh, EN 18222, EN 18223, digital product passport, GS1 Digital Link resolver, EPCIS 2.0",{"text":1484,"minutes":1485,"time":1486,"words":1487},"20 min read",19.575,1174500,3915,{"title":670,"tags":1489},[677,678,679,680,681,215,31,298],{"title":670,"description":675},{"loc":671,"lastmod":1492,"changefreq":1493,"priority":1494},"2026-09-02","monthly",0.8,"lMThj0u7TT6DUnoHPVbkQonzi0qc2c2iWK-qQqBJu8g",[1497],{"title":5,"path":6,"stem":7,"children":1498},[1499,1501,1506,1511,1516,1521,1526,1531,1541,1546,1551,1556,1621,1626,1655,1673,1678,1681],{"title":10,"path":6,"stem":11,"description":12,"icon":13,"tags":1500},[15,16,17,18,19,20,21],{"title":23,"path":24,"stem":25,"children":1502,"description":28,"icon":29,"tags":1505},[1503],{"title":23,"path":24,"stem":25,"description":28,"icon":29,"tags":1504},[16,31,32,33,34,35,36,37,38,39],[16,31,32,33,34,35,36,37,38,39],{"title":42,"path":43,"stem":44,"children":1507,"description":47,"icon":48,"tags":1510},[1508],{"title":42,"path":43,"stem":44,"description":47,"icon":48,"tags":1509},[16,31,32,33,50,51,39],[16,31,32,33,50,51,39],{"title":54,"path":55,"stem":56,"children":1512,"description":59,"icon":60,"tags":1515},[1513],{"title":54,"path":55,"stem":56,"description":59,"icon":60,"tags":1514},[16,62,63,64,65,66,67,21,68,69,70,71,72],[16,62,63,64,65,66,67,21,68,69,70,71,72],{"title":75,"path":76,"stem":77,"children":1517,"description":80,"icon":81,"tags":1520},[1518],{"title":75,"path":76,"stem":77,"description":80,"icon":81,"tags":1519},[16,32,62,63,64,65,83,67,21,84,85,86,70,71,72],[16,32,62,63,64,65,83,67,21,84,85,86,70,71,72],{"title":89,"path":90,"stem":91,"children":1522,"description":94,"icon":95,"tags":1525},[1523],{"title":89,"path":90,"stem":91,"description":94,"icon":95,"tags":1524},[16,97,98,99,100,101,21,102,103,104,105,106,107,108,109,110,111,112],[16,97,98,99,100,101,21,102,103,104,105,106,107,108,109,110,111,112],{"title":115,"path":116,"stem":117,"children":1527,"description":120,"icon":121,"tags":1530},[1528],{"title":115,"path":116,"stem":117,"description":120,"icon":121,"tags":1529},[16,123,62,63,64,65,21,124,125,126,71,72],[16,123,62,63,64,65,21,124,125,126,71,72],{"title":129,"path":130,"stem":131,"children":1532,"description":134,"icon":135,"tags":1540},[1533,1535],{"title":129,"path":130,"stem":131,"description":134,"icon":135,"tags":1534},[16,123,62,63,64,65,21,124,125,126,71,72],{"title":138,"path":139,"stem":140,"children":1536,"description":143,"icon":144,"tags":1539},[1537],{"title":138,"path":139,"stem":140,"description":143,"icon":144,"tags":1538},[16,62,63,146,21,147,148,149,35,150,151,152,153],[16,62,63,146,21,147,148,149,35,150,151,152,153],[16,123,62,63,64,65,21,124,125,126,71,72],{"title":157,"path":158,"stem":159,"children":1542,"description":162,"icon":163,"tags":1545},[1543],{"title":157,"path":158,"stem":159,"description":162,"icon":163,"tags":1544},[16,62,63,146,21,165,35,150,151,152,153],[16,62,63,146,21,165,35,150,151,152,153],{"title":168,"path":169,"stem":170,"children":1547,"description":173,"icon":174,"tags":1550},[1548],{"title":168,"path":169,"stem":170,"description":173,"icon":174,"tags":1549},[16,176,15,177,21,178,35,179,151,152,180],[16,176,15,177,21,178,35,179,151,152,180],{"title":183,"path":184,"stem":185,"children":1552,"description":188,"icon":189,"tags":1555},[1553],{"title":183,"path":184,"stem":185,"description":188,"icon":189,"tags":1554},[191,15,192,193,194,195,196,31,197,198,199,200,201,202,203,204],[191,15,192,193,194,195,196,31,197,198,199,200,201,202,203,204],{"title":207,"path":208,"stem":209,"children":1557,"description":212,"icon":213,"tags":1620},[1558,1560,1565,1576,1589,1598,1603,1605,1607,1609,1618],{"title":207,"path":208,"stem":209,"description":212,"icon":213,"tags":1559},[215,216,217,31,218,35,219,220],{"title":222,"path":223,"stem":224,"children":1561,"description":227,"icon":228,"tags":1564},[1562],{"title":222,"path":223,"stem":224,"description":227,"icon":228,"tags":1563},[230,231,218,216,217,232],[230,231,218,216,217,232],{"title":235,"path":236,"stem":237,"children":1566,"description":240,"icon":241,"tags":1575},[1567,1569,1571,1573],{"title":235,"path":236,"stem":237,"description":240,"icon":241,"tags":1568},[243,244,216,31,103,35,218,245],{"title":247,"path":248,"stem":249,"description":250,"icon":174,"tags":1570},[243,244,216,31,220],{"title":253,"path":254,"stem":255,"description":256,"icon":257,"tags":1572},[243,31,65,39,216],{"title":260,"path":261,"stem":262,"description":263,"icon":13,"tags":1574},[243,265,266,63,267,245],[243,244,216,31,103,35,218,245],{"title":270,"path":271,"stem":272,"children":1577,"description":275,"icon":276,"tags":1588},[1578,1580,1582,1584,1586],{"title":270,"path":271,"stem":272,"description":275,"icon":276,"tags":1579},[278,279,280,216,31,103,35,218,245],{"title":247,"path":282,"stem":283,"description":284,"icon":285,"tags":1581},[278,279,280,216,31,245],{"title":253,"path":288,"stem":289,"description":290,"icon":285,"tags":1583},[278,31,65,39,216],{"title":293,"path":294,"stem":295,"description":296,"icon":285,"tags":1585},[278,97,298,299,216,245],{"title":260,"path":301,"stem":302,"description":303,"icon":13,"tags":1587},[278,265,280,245,305],[278,279,280,216,31,103,35,218,245],{"title":308,"path":309,"stem":310,"children":1590,"description":313,"icon":314,"tags":1597},[1591,1593,1595],{"title":308,"path":309,"stem":310,"description":313,"icon":314,"tags":1592},[316,317,318,216,218,319],{"title":247,"path":321,"stem":322,"description":323,"icon":324,"tags":1594},[316,317,318,326],{"title":260,"path":328,"stem":329,"description":330,"icon":13,"tags":1596},[316,265,317,318,332,63],[316,317,318,216,218,319],{"title":335,"path":336,"stem":337,"children":1599,"description":340,"icon":60,"tags":1602},[1600],{"title":335,"path":336,"stem":337,"description":340,"icon":60,"tags":1601},[342,343,103,344,230,345,346,220],[342,343,103,344,230,345,346,220],{"title":349,"path":350,"stem":351,"description":352,"icon":29,"tags":1604},[354,97,299,355,298],{"title":357,"path":358,"stem":359,"description":360,"icon":361,"tags":1606},[298,97,299],{"title":364,"path":365,"stem":366,"description":367,"icon":368,"tags":1608},[370,371,372,344],{"title":374,"path":375,"stem":376,"children":1610,"description":379,"icon":380,"tags":1617},[1611,1613,1615],{"title":374,"path":375,"stem":376,"description":379,"icon":380,"tags":1612},[382,383,384,385,386],{"title":247,"path":388,"stem":389,"description":390,"icon":174,"tags":1614},[382,326,383,384,385],{"title":260,"path":393,"stem":394,"description":395,"icon":13,"tags":1616},[382,265,397,398,63],[382,383,384,385,386],{"title":401,"path":402,"stem":403,"description":404,"icon":228,"tags":1619},[406,407,408,409,342,410],[215,216,217,31,218,35,219,220],{"title":413,"path":414,"stem":415,"children":1622,"description":418,"icon":419,"tags":1625},[1623],{"title":413,"path":414,"stem":415,"description":418,"icon":419,"tags":1624},[16,421,422,423,424,425,426,21,72],[16,421,422,423,424,425,426,21,72],{"title":429,"path":430,"stem":431,"children":1627,"description":434,"icon":435,"tags":1654},[1628,1630,1632,1634,1636,1638,1640,1642,1644,1646,1648,1650,1652],{"title":429,"path":430,"stem":431,"description":434,"icon":435,"tags":1629},[437,438,215,97,439,298],{"title":441,"path":442,"stem":443,"description":444,"icon":445,"tags":1631},[437,447,448,449,450,451],{"title":453,"path":454,"stem":455,"description":456,"icon":457,"tags":1633},[437,459,105,460,461,439],{"title":463,"path":464,"stem":465,"description":466,"icon":467,"tags":1635},[437,469,63,424,470,471,472],{"title":474,"path":475,"stem":476,"description":477,"icon":478,"tags":1637},[437,480,481,111,482,483],{"title":485,"path":486,"stem":487,"description":488,"icon":489,"tags":1639},[437,299,97,298,491,492],{"title":494,"path":495,"stem":496,"description":497,"icon":498,"tags":1641},[437,500,501,502,503,504],{"title":506,"path":507,"stem":508,"description":509,"icon":419,"tags":1643},[437,503,511,512,513,514],{"title":516,"path":517,"stem":518,"description":519,"icon":520,"tags":1645},[437,522,523,230,524,525],{"title":527,"path":528,"stem":529,"description":530,"icon":29,"tags":1647},[437,298,532,533,534,112],{"title":536,"path":537,"stem":538,"description":539,"icon":540,"tags":1649},[437,542,543,544,545,546],{"title":548,"path":549,"stem":550,"description":551,"icon":552,"tags":1651},[437,554,555,556,557,558],{"title":560,"path":561,"stem":562,"description":563,"icon":564,"tags":1653},[437,566,567,568,569,570,448],[437,438,215,97,439,298],{"title":573,"path":574,"stem":575,"children":1656,"description":578,"icon":579},[1657,1658,1659,1660],{"title":573,"path":574,"stem":575,"description":578,"icon":579},{"title":581,"path":582,"stem":583,"description":584,"icon":585},{"title":587,"path":588,"stem":589,"description":590,"icon":591},{"title":593,"path":594,"stem":595,"children":1661,"description":598,"icon":599},[1662,1663,1665,1667,1669,1670,1671,1672],{"title":593,"path":594,"stem":595,"description":598,"icon":599},{"title":601,"path":602,"stem":603,"description":604,"icon":605,"tags":1664},[298,97,103,299,220],{"title":608,"path":609,"stem":610,"description":611,"icon":612,"tags":1666},[220,614,103,298,63],{"title":616,"path":617,"stem":618,"description":619,"icon":620,"tags":1668},[39,16,31,65,622,35],{"title":624,"path":625,"stem":626,"description":627,"icon":628},{"title":630,"path":631,"stem":632,"description":633,"icon":634},{"title":636,"path":637,"stem":638,"description":639,"icon":640},{"title":642,"path":643,"stem":644,"description":645,"icon":646},{"title":648,"path":649,"stem":650,"children":1674,"description":653,"icon":29,"tags":1677},[1675],{"title":648,"path":649,"stem":650,"description":653,"icon":29,"tags":1676},[655,656,657,406,343,658,659,660],[655,656,657,406,343,658,659,660],{"title":663,"path":664,"stem":665,"children":1679,"description":668,"icon":634},[1680],{"title":663,"path":664,"stem":665,"description":668,"icon":634},{"title":670,"path":671,"stem":672,"children":1682,"description":675,"icon":540,"tags":1695},[1683,1685,1687,1689,1691,1693],{"title":670,"path":671,"stem":672,"description":675,"icon":540,"tags":1684},[677,678,679,680,681,215,31,298],{"title":683,"path":684,"stem":685,"description":686,"icon":60,"tags":1686},[677,543,688,689,690,691],{"title":693,"path":694,"stem":695,"description":696,"icon":697,"tags":1688},[677,105,699,109,110,104,700],{"title":702,"path":703,"stem":704,"description":705,"icon":540,"tags":1690},[677,678,570,105,688,690,500],{"title":708,"path":709,"stem":710,"description":711,"icon":228,"tags":1692},[677,31,65,713,714,715,406,343,523,716],{"title":718,"path":719,"stem":720,"description":721,"icon":457,"tags":1694},[677,679,31,65,104,372,714,723],[677,678,679,680,681,215,31,298],{"id":745,"title":670,"body":1697,"description":675,"extension":1475,"icon":540,"lastUpdated":1476,"meta":2107,"navigation":2112,"path":671,"seo":2114,"sitemap":2115,"stem":672,"__hash__":1495},{"type":747,"value":1698,"toc":2098},[1699,1701,1703,1705,1707,1711,1713,1727,1767,1797,1801,1805,1807,1817,1831,1845,1853,1881,1883,1887,1917,1929,1941,1947,1949,1951,1981,1989,1995,2008,2010,2014,2016,2020,2024,2030,2034,2042,2050,2052,2054,2080,2084,2086,2094,2096],[750,1700,753],{"id":752},[755,1702,757],{},[755,1704,760],{},[750,1706,764],{"id":763},[755,1708,767,1709,772],{},[769,1710,771],{},[774,1712],{"alt":776,"src":777},[755,1714,780,1715,785,1717,790,1719,794,1721,798,1723,802,1725,806],{},[782,1716,784],{"href":609},[787,1718,789],{},[787,1720,793],{},[787,1722,797],{},[787,1724,801],{},[787,1726,805],{},[755,1728,809,1729,816,1733,820,1735,820,1737,820,1739,820,1741,820,1743,836,1745,820,1747,820,1749,820,1751,820,1753,820,1755,820,1757,820,1759,820,1761,864,1763,867,1765,870],{},[769,1730,812,1731],{},[787,1732,815],{},[787,1734,819],{},[787,1736,823],{},[787,1738,826],{},[787,1740,829],{},[787,1742,832],{},[787,1744,835],{},[787,1746,839],{},[787,1748,842],{},[787,1750,845],{},[787,1752,848],{},[787,1754,851],{},[787,1756,854],{},[787,1758,857],{},[787,1760,860],{},[787,1762,863],{},[787,1764,842],{},[787,1766,819],{},[755,1768,873,1769,877,1771,881,1773,885,1775,889,1777,893,1779,897,1781,901,1783,905,1785,909,1787,913,1789,916,1791,920,1793,924,1795,927],{},[769,1770,876],{},[769,1772,880],{},[787,1774,884],{},[787,1776,888],{},[787,1778,892],{},[787,1780,896],{},[787,1782,900],{},[787,1784,904],{},[787,1786,908],{},[787,1788,912],{},[787,1790,801],{},[787,1792,919],{},[787,1794,923],{},[787,1796,103],{},[755,1798,930,1799,933],{},[787,1800,888],{},[755,1802,936,1803,941],{},[938,1804,940],{},[750,1806,945],{"id":944},[755,1808,948,1809,952,1811,956,1813,960,1815,964],{},[938,1810,951],{},[938,1812,955],{},[787,1814,959],{},[787,1816,963],{},[755,1818,967,1819,971,1821,975,1823,979,1825,983,1827,986,1829,990],{},[787,1820,970],{},[787,1822,974],{},[787,1824,978],{},[787,1826,982],{},[787,1828,978],{},[787,1830,989],{},[755,1832,993,1833,997,1835,1001,1837,1005,1839,1008,1841,1011,1843,1015],{},[787,1834,996],{},[787,1836,1000],{},[787,1838,1004],{},[787,1840,801],{},[787,1842,996],{},[787,1844,1014],{},[755,1846,1018,1847,1022,1849,1026,1851,1030],{},[787,1848,1021],{},[787,1850,1025],{},[787,1852,1029],{},[755,1854,1033,1855,1037,1857,820,1859,1044,1861,1048,1863,1052,1865,1056,1867,1060,1869,1063,1871,1067,1873,1071,1875,1075,1877,1079,1879,1083],{},[787,1856,1036],{},[787,1858,1040],{},[787,1860,1043],{},[787,1862,1047],{},[787,1864,1051],{},[787,1866,1055],{},[787,1868,1059],{},[787,1870,1036],{},[787,1872,1066],{},[787,1874,1070],{},[787,1876,1074],{},[787,1878,1078],{},[787,1880,1082],{},[750,1882,1087],{"id":1086},[755,1884,1090,1885,1093],{},[769,1886,299],{},[755,1888,1096,1889,1100,1891,1104,1893,1107,1895,1111,1897,1114,1899,1118,1901,1122,1903,1125,1905,1129,1907,1133,1909,1137,1911,1140,1913,1144,1915,1148],{},[787,1890,1099],{},[787,1892,1103],{},[787,1894,1059],{},[787,1896,1110],{},[787,1898,826],{},[787,1900,1117],{},[787,1902,1121],{},[787,1904,1110],{},[787,1906,1128],{},[787,1908,1132],{},[787,1910,1136],{},[787,1912,1128],{},[787,1914,1143],{},[787,1916,1147],{},[755,1918,1151,1919,820,1921,1071,1923,1161,1925,1165,1927,1169],{},[769,1920,1154],{},[769,1922,1157],{},[769,1924,1160],{},[938,1926,1164],{},[938,1928,1168],{},[755,1930,1172,1931,1176,1933,1180,1935,1184,1937,1188,1939,1191],{},[787,1932,1175],{},[787,1934,1179],{},[787,1936,1183],{},[938,1938,1187],{},[938,1940,1157],{},[1193,1942,1943],{"type":1195},[755,1944,1945,1201],{},[769,1946,1200],{},[750,1948,1205],{"id":1204},[755,1950,1208],{},[755,1952,1953,1213,1955,1217,1957,1221,1959,1225,1961,1229,1963,1233,1965,1236,1967,1240,1969,1244,1971,1248,1973,1252,1975,1255,1977,1259,1979,1263],{},[769,1954,702],{},[787,1956,1216],{},[787,1958,1220],{},[787,1960,1224],{},[787,1962,1228],{},[787,1964,1232],{},[787,1966,699],{},[787,1968,1239],{},[787,1970,1243],{},[787,1972,1247],{},[787,1974,1251],{},[787,1976,1239],{},[787,1978,1258],{},[787,1980,1262],{},[755,1982,1983,1269,1985,1273,1987,1277],{},[769,1984,1268],{},[787,1986,1272],{},[787,1988,1276],{},[755,1990,1991,1282,1993,1286],{},[769,1992,681],{},[787,1994,1285],{},[755,1996,1997,1292,1999,1299,2002,1221,2004,1306,2006,1310],{},[769,1998,1291],{},[782,2000,1298],{"href":1295,"rel":2001},[1297],[787,2003,1302],{},[787,2005,1305],{},[782,2007,1309],{"href":719},[750,2009,1314],{"id":1313},[755,2011,1317,2012,1321],{},[787,2013,1320],{},[755,2015,1324],{},[755,2017,1327,2018,1331],{},[769,2019,1330],{},[755,2021,2022,1337],{},[769,2023,1336],{},[755,2025,2026,1343,2028,1346],{},[769,2027,1342],{},[787,2029,1320],{},[755,2031,2032,1352],{},[769,2033,1351],{},[755,2035,1355,2036,1359,2038,1363,2040,1367],{},[787,2037,1358],{},[787,2039,1362],{},[787,2041,1366],{},[755,2043,1370,2044,1374,2046,1378,2048,1382],{},[787,2045,1373],{},[787,2047,1377],{},[787,2049,1381],{},[750,2051,1386],{"id":1385},[755,2053,1389],{},[755,2055,1392,2056,1395,2058,1399,2060,1403,2062,1407,2064,1411,2066,1414,2068,1418,2070,1422,2072,1425,2074,1429,2076,1432,2078,1435],{},[787,2057,857],{},[787,2059,1398],{},[787,2061,1402],{},[787,2063,1406],{},[938,2065,1410],{},[787,2067,1402],{},[787,2069,1417],{},[787,2071,1421],{},[787,2073,298],{},[787,2075,1428],{},[787,2077,819],{},[787,2079,1128],{},[755,2081,1438,2082,1441],{},[787,2083,1128],{},[755,2085,1444],{},[755,2087,1447,2088,1451,2090,1063,2092,1457],{},[787,2089,1450],{},[787,2091,1454],{},[787,2093,1040],{},[755,2095,1460],{},[755,2097,1463],{},{"title":1465,"searchDepth":1466,"depth":1466,"links":2099},[2100,2101,2102,2103,2104,2105,2106],{"id":752,"depth":1466,"text":753},{"id":763,"depth":1466,"text":764},{"id":944,"depth":1466,"text":945},{"id":1086,"depth":1466,"text":1087},{"id":1204,"depth":1466,"text":1205},{"id":1313,"depth":1466,"text":1314},{"id":1385,"depth":1466,"text":1386},{"head":2108,"readingTime":2111},{"meta":2109},[2110],{"name":1481,"content":1482},{"text":1484,"minutes":1485,"time":1486,"words":1487},{"title":670,"tags":2113},[677,678,679,680,681,215,31,298],{"title":670,"description":675},{"loc":671,"lastmod":1492,"changefreq":1493,"priority":1494},1788349686134]