[{"data":1,"prerenderedAt":1345},["ShallowReactive",2],{"navigation-docsEN":3,"docs-EN-/docs/platform-overview/architecture":483,"docsNav-EN-/docs":929,"docsSecNav-EN-/docs/platform-overview/architecture":1068},[4],{"title":5,"path":6,"stem":7,"children":8},"Docs","/docs","docs",[9,21,39,51,72,86,112,126,153,164,179,203,391,467],{"title":10,"path":6,"stem":11,"description":12,"icon":13,"tags":14},"Documentation","docs/index","Introduction to documentation on EPCIS and OpenEPCIS tools","heroicons-outline:document-text",[15,16,17,18,19,20],"openepcis","epcis-2-0","epcis-documentation","epcis-standard","open-source","epcis-tools",{"title":22,"path":23,"stem":24,"children":25,"description":27,"icon":28,"tags":38},"Introduction","/docs/introduction","docs/01.introduction/index",[26],{"title":22,"path":23,"stem":24,"description":27,"icon":28,"tags":29},"Why EPCIS is necessary and how it can help organizations of all sizes and types.","heroicons-outline:globe-alt",[16,30,31,32,33,34,35,36,37],"epcis","epcis-1-2","gs1-epcis-standard","supply-chain","traceability","data-sharing","tracking","tracing",[16,30,31,32,33,34,35,36,37],{"title":40,"path":41,"stem":42,"children":43,"description":45,"icon":46,"tags":50},"EPCIS","/docs/epcis","docs/02.epcis/index",[44],{"title":40,"path":41,"stem":42,"description":45,"icon":46,"tags":47},"Discover the specifics of EPCIS, how it works, and what OpenEPCIS is.","i-custom-open-epcis",[16,30,31,32,48,49],"iso-iec-19987","iso-iec-19988",[16,30,31,32,48,49],{"title":52,"path":53,"stem":54,"children":55,"description":57,"icon":58,"tags":71},"Format Converter","/docs/format-converter","docs/03.format-converter/index",[56],{"title":52,"path":53,"stem":54,"description":57,"icon":58,"tags":59},"OpenEPCIS solution to convert EPCIS 2.0 and 1.2 document or single event from XML to JSON/JSON-LD and vice versa.","heroicons-outline:arrows-right-left",[16,60,61,62,63,64,65,20,66,67,68,69,70],"json","json-ld","xml","events","format-converter","convert","convert-epcis-events","format","converter","epcis-tool","tools",[16,60,61,62,63,64,65,20,66,67,68,69,70],{"title":73,"path":74,"stem":75,"children":76,"description":78,"icon":79,"tags":85},"Version Converter","/docs/version-converter","docs/04.version-converter/index",[77],{"title":73,"path":74,"stem":75,"description":78,"icon":79,"tags":80},"OpenEPCIS solution to convert EPCIS XML document from version 1.2 to 2.0 and vice versa.","heroicons:arrows-up-down",[16,31,60,61,62,63,81,65,20,82,83,84,68,69,70],"version-converter","convert-epcis-version","version","epcis-version",[16,31,60,61,62,63,81,65,20,82,83,84,68,69,70],{"title":87,"path":88,"stem":89,"children":90,"description":92,"icon":93,"tags":111},"Identifier Converter","/docs/identifier-converter","docs/05.identifier-converter/index",[91],{"title":87,"path":88,"stem":89,"description":92,"icon":93,"tags":94},"OpenEPCIS solution to convert EPCIS instance or class identifier from URN to digital link WebURI and vice versa.","i-heroicons-link",[16,95,96,97,98,99,20,100,101,102,103,104,105,106,107,108,109,110],"gs1-digital-link","urn-format","epc-uri","epc","weburi","gs1-standard","gs1","sscc","gtin","giai","grai","gdti","lgtin","sgtin","gln","gcp",[16,95,96,97,98,99,20,100,101,102,103,104,105,106,107,108,109,110],{"title":113,"path":114,"stem":115,"children":116,"description":118,"icon":119,"tags":125},"Event Hash Generator","/docs/event-hash-generator","docs/06.event-hash-generator/index",[117],{"title":113,"path":114,"stem":115,"description":118,"icon":119,"tags":120},"OpenEPCIS solution to generate unique event hash for EPCIS XML or JSON/JSON-LD document or event list.","heroicons-outline:finger-print",[16,121,60,61,62,63,20,122,123,124,69,70],"event-hash","event","hash","generator",[16,121,60,61,62,63,20,122,123,124,69,70],{"title":127,"path":128,"stem":129,"children":130,"description":132,"icon":133,"tags":152},"Test Data Generator","/docs/test-data-generator","docs/07.test-data-generator/index",[131,135],{"title":127,"path":128,"stem":129,"description":132,"icon":133,"tags":134},"OpenEPCIS solution to generate a large set of EPCIS test data events for all use cases/supply chain requirements.","heroicons-outline:cog",[16,121,60,61,62,63,20,122,123,124,69,70],{"title":136,"path":137,"stem":138,"children":139,"description":132,"icon":141,"tags":151},"EPCIS Implementation Guidelines","/docs/test-data-generator/gs1-epcis-implementation-guidelines","docs/07.test-data-generator/01.gs1-epcis-implementation-guidelines/index",[140],{"title":136,"path":137,"stem":138,"description":132,"icon":141,"tags":142},"heroicons-outline:badge-check",[16,60,61,143,20,144,145,146,34,147,148,149,150],"testing","test-data-generator","design","design-template","process-automation","compliance","supply-chain-management","load-tests",[16,60,61,143,20,144,145,146,34,147,148,149,150],[16,121,60,61,62,63,20,122,123,124,69,70],{"title":154,"path":155,"stem":156,"children":157,"description":159,"icon":160,"tags":163},"Test Resource Management","/docs/test-resource-management","docs/08.test-resource-management/index",[158],{"title":154,"path":155,"stem":156,"description":159,"icon":160,"tags":161},"Collection of EPCIS 1.2/2.0 documents/events in XML/JSON/JSON-LD formats, intended for various testing purposes","heroicons-outline:archive-box",[16,60,61,143,20,162,34,147,148,149,150],"performance-tests",[16,60,61,143,20,162,34,147,148,149,150],{"title":165,"path":166,"stem":167,"children":168,"description":170,"icon":171,"tags":178},"Vocabulary Management","/docs/vocabulary-management","docs/09.vocabulary-management/index",[169],{"title":165,"path":166,"stem":167,"description":170,"icon":171,"tags":172},"Collection of standardized constants and strings for EPCIS event data.","heroicons-outline:book-open",[16,173,15,174,20,175,34,176,148,149,177],"constants","centralization","standardization","vocabulary","data-dictionary",[16,173,15,174,20,175,34,176,148,149,177],{"title":180,"path":181,"stem":182,"children":183,"description":185,"icon":186,"tags":202},"Dependency Management","/docs/dependency-management","docs/10.dependency-management/index",[184],{"title":180,"path":181,"stem":182,"description":185,"icon":186,"tags":187},"Centralized Maven Bill of Materials (BOM) for all the OpenEPCIS modules.","heroicons-outline:folder",[188,15,189,190,191,192,193,30,194,195,196,197,198,199,200,201],"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",[188,15,189,190,191,192,193,30,194,195,196,197,198,199,200,201],{"title":204,"path":205,"stem":206,"children":207,"description":209,"icon":210,"tags":390},"Digital Product Passport","/docs/digital-product-passport","docs/11.digital-product-passport/index",[208,217,229,261,295,322,336,345,353,363],{"title":204,"path":205,"stem":206,"description":209,"icon":210,"tags":211},"Introduction to Digital Product Passport and how EPCIS enables product traceability for DPP compliance.","heroicons-outline:identification",[212,213,214,30,215,34,216],"digital-product-passport","dpp","eu-regulation","sustainability","circular-economy",{"title":218,"path":219,"stem":220,"children":221,"description":223,"icon":224,"tags":228},"ESPR Framework","/docs/digital-product-passport/espr-framework","docs/11.digital-product-passport/00.espr-framework/index",[222],{"title":218,"path":219,"stem":220,"description":223,"icon":224,"tags":225},"Guide to the EU Ecodesign for Sustainable Products Regulation (ESPR) 2024/1781 and how OpenEPCIS supports Digital Product Passport requirements.","heroicons-outline:shield-check",[226,227,215,213,214],"espr","ecodesign",[226,227,215,213,214],{"title":230,"path":231,"stem":232,"children":233,"description":235,"icon":236,"tags":260},"Battery DPP","/docs/digital-product-passport/battery-dpp","docs/11.digital-product-passport/01.battery-dpp/index",[234,240,245,251],{"title":230,"path":231,"stem":232,"description":235,"icon":236,"tags":237},"GS1-native implementation of EU Battery Regulation 2023/1542 Digital Product Passport using EPCIS 2.0","heroicons:battery-100",[238,239,213,30,101,34,215],"battery","eu-battery-regulation",{"title":241,"path":242,"stem":243,"description":244,"icon":171},"Implementation Guide","/docs/digital-product-passport/battery-dpp/implementation-guide","docs/11.digital-product-passport/01.battery-dpp/01.implementation-guide","Step-by-step guide for implementing a GS1-native Battery Digital Product Passport with OpenEPCIS extensions",{"title":246,"path":247,"stem":248,"description":249,"icon":250},"Event Types","/docs/digital-product-passport/battery-dpp/event-types","docs/11.digital-product-passport/01.battery-dpp/02.event-types","Complete reference for all EPCIS event types and sensor measurements in the Battery DPP","heroicons-outline:collection",{"title":252,"path":253,"stem":254,"description":255,"icon":13,"tags":256},"Complete Examples","/docs/digital-product-passport/battery-dpp/complete-examples","docs/11.digital-product-passport/01.battery-dpp/05.complete-examples","Reference Battery Digital Product Passport examples mapped to EU Battery Regulation 2023/1542 Annex XIII",[238,257,258,61,259],"examples","annex-xiii","carbon-footprint",[238,239,213,30,101,34,215],{"title":262,"path":263,"stem":264,"children":265,"description":267,"icon":268,"tags":294},"EUDR","/docs/digital-product-passport/eudr","docs/11.digital-product-passport/02.eudr/index",[266,273,278,282,287],{"title":262,"path":263,"stem":264,"description":267,"icon":268,"tags":269},"GS1-native implementation of EU Deforestation Regulation 2023/1115 compliance using EPCIS 2.0","heroicons-outline:globe-europe-africa",[270,271,272,213,30,101,34,215],"eudr","deforestation","timber",{"title":241,"path":274,"stem":275,"description":276,"icon":277},"/docs/digital-product-passport/eudr/implementation-guide","docs/11.digital-product-passport/02.eudr/01.implementation-guide","Step-by-step guide for implementing EU Deforestation Regulation compliance using GS1 standards",null,{"title":246,"path":279,"stem":280,"description":281,"icon":277},"/docs/digital-product-passport/eudr/event-types","docs/11.digital-product-passport/02.eudr/02.event-types","EPCIS event types for EU Deforestation Regulation compliance",{"title":283,"path":284,"stem":285,"description":286,"icon":277},"URL Patterns","/docs/digital-product-passport/eudr/url-patterns","docs/11.digital-product-passport/02.eudr/03.url-patterns","GS1 Digital Link URL patterns for EUDR implementations",{"title":252,"path":288,"stem":289,"description":290,"icon":13,"tags":291},"/docs/digital-product-passport/eudr/complete-examples","docs/11.digital-product-passport/02.eudr/04.complete-examples","Reference EUDR examples — timber product passport, derived product, regulatory notification, harvesting / origin-declaration / processing / supply-chain-transfer / exemption events",[270,257,272,292,293],"due-diligence","geolocation",[270,271,272,213,30,101,34,215],{"title":296,"path":297,"stem":298,"children":299,"description":301,"icon":302,"tags":321},"Textile DPP","/docs/digital-product-passport/textile","docs/11.digital-product-passport/03.textile/index",[300,308,315],{"title":296,"path":297,"stem":298,"description":301,"icon":302,"tags":303},"Digital Product Passport vocabulary for textiles and apparel under the EU Sustainable Textiles Strategy and ESPR 2024/1781.","heroicons-outline:sparkles",[304,305,306,213,215,307],"textile","apparel","footwear","fibre-composition",{"title":241,"path":309,"stem":310,"description":311,"icon":312,"tags":313},"/docs/digital-product-passport/textile/implementation-guide","docs/11.digital-product-passport/03.textile/01.implementation-guide","How to assemble a Textile Digital Product Passport against the published openepcis-dpp-ready textile vocabulary","heroicons-outline:scissors",[304,305,306,314],"implementation",{"title":252,"path":316,"stem":317,"description":318,"icon":13,"tags":319},"/docs/digital-product-passport/textile/complete-examples","docs/11.digital-product-passport/03.textile/02.complete-examples","Reference Textile Digital Product Passport documents covering apparel and footwear",[304,257,305,306,320,61],"fiber-composition",[304,305,306,213,215,307],{"title":323,"path":324,"stem":325,"children":326,"description":328,"icon":58,"tags":335},"Interoperability","/docs/digital-product-passport/interoperability","docs/11.digital-product-passport/04.interoperability/index",[327],{"title":323,"path":324,"stem":325,"description":328,"icon":58,"tags":329},"Guide to OpenEPCIS DPP interoperability with GS1, UNTP, CIRPASS2, and ESPR standards.",[330,331,101,332,226,333,334],"interoperability","untp","cirpass2","standards","alignment",[330,331,101,332,226,333,334],{"title":337,"path":338,"stem":339,"description":340,"icon":28,"tags":341},"DPP Resolution Flow","/docs/digital-product-passport/dpp-resolution-flow","docs/11.digital-product-passport/05.dpp-resolution-flow","How OpenEPCIS combined GS1 Digital Link, the IETF linkset format and content negotiation into one DPP resolution flow",[342,95,343,344],"walkthrough","linkset","content-negotiation",{"title":346,"path":347,"stem":348,"description":349,"icon":350,"tags":351},"Resolver Setup","/docs/digital-product-passport/resolver-setup","docs/11.digital-product-passport/06.resolver-setup","How to expose your DPP behind a GS1 Digital Link resolver","heroicons-outline:server",[352,95,343],"resolver",{"title":354,"path":355,"stem":356,"description":357,"icon":358,"tags":359},"Multi-Component Example","/docs/digital-product-passport/multi-component-example","docs/11.digital-product-passport/07.multi-component-example","How a composite product references separately-passported components via standard GS1 Digital Link and EPCIS aggregation","heroicons-outline:puzzle-piece",[360,361,362,332],"example","components","aggregation",{"title":364,"path":365,"stem":366,"children":367,"description":369,"icon":370,"tags":389},"Electronics DPP","/docs/digital-product-passport/electronics","docs/11.digital-product-passport/08.electronics/index",[368,377,382],{"title":364,"path":365,"stem":366,"description":369,"icon":370,"tags":371},"Digital Product Passport vocabulary for electronic devices under ESPR, the French Repairability Index, EU Right to Repair and WEEE.","heroicons-outline:device-phone-mobile",[372,373,374,375,376],"electronics","repairability","weee","energy-label","right-to-repair",{"title":241,"path":378,"stem":379,"description":380,"icon":171,"tags":381},"/docs/digital-product-passport/electronics/implementation-guide","docs/11.digital-product-passport/08.electronics/01.implementation-guide","How to assemble an Electronics Digital Product Passport against the published openepcis-dpp-ready electronics vocabulary",[372,314,373,374,375],{"title":252,"path":383,"stem":384,"description":385,"icon":13,"tags":386},"/docs/digital-product-passport/electronics/complete-examples","docs/11.digital-product-passport/08.electronics/02.complete-examples","Reference Electronics Digital Product Passport documents covering smartphone, laptop, display and server",[372,257,387,388,61],"smartphone","laptop",[372,373,374,375,376],[212,213,214,30,215,34,216],{"title":392,"path":393,"stem":394,"children":395,"description":397,"icon":398},"OpenEPCIS Overview","/docs/platform-overview","docs/14.platform-overview/index",[396,399,405,411,417],{"title":392,"path":393,"stem":394,"description":397,"icon":398},"A GS1-conformant supply-chain data platform — Resolver, Masterdata, EPCIS Events — in open source and business editions.","lucide:layout-dashboard",{"title":400,"path":401,"stem":402,"description":403,"icon":404},"Architecture","/docs/platform-overview/architecture","docs/14.platform-overview/01.architecture","How OpenEPCIS handles identity, isolation, events, and GS1 conformance — the four things that distinguish the platform.","lucide:cpu",{"title":406,"path":407,"stem":408,"description":409,"icon":410},"Feature Matrix","/docs/platform-overview/feature-matrix","docs/14.platform-overview/02.feature-matrix","OpenEPCIS capabilities by edition, aligned to the relevant GS1 standards.","lucide:check-square",{"title":412,"path":413,"stem":414,"description":415,"icon":416},"Roadmap","/docs/platform-overview/roadmap","docs/14.platform-overview/03.roadmap","Three horizons — Now, Next, Later. Skeleton awaiting user-confirmed dates.","lucide:map",{"title":418,"path":419,"stem":420,"children":421,"description":423,"icon":424},"Modules","/docs/platform-overview/modules","docs/14.platform-overview/modules/index",[422,425,431,437,443,449,455,461],{"title":418,"path":419,"stem":420,"description":423,"icon":424},"Seven module families that organise the OpenEPCIS platform — Resolver, Masterdata, EPCIS Events, Formats & Validation, Integration, Testdata, Platform.","lucide:layers",{"title":426,"path":427,"stem":428,"description":429,"icon":430},"GS1 Conformant Resolver","/docs/platform-overview/modules/resolver","docs/14.platform-overview/modules/01.resolver","Resolves GS1 Digital Link URIs to product information, masterdata, EPCIS endpoints, and twelve more standard link types.","lucide:link-2",{"title":432,"path":433,"stem":434,"description":435,"icon":436},"GS1 Web Vocabulary & Masterdata","/docs/platform-overview/modules/masterdata","docs/14.platform-overview/modules/02.masterdata","Web Vocabulary models, masterdata-to-resolver REST pattern, GS1 Germany Activate Plus / GEPIR sync, and the event-driven masterdata bus.","lucide:database",{"title":438,"path":439,"stem":440,"description":441,"icon":442},"EPCIS Events — Capture, Query, Subscriptions","/docs/platform-overview/modules/epcis-events","docs/14.platform-overview/modules/03.epcis-events","EPCIS 2.0 REST and SOAP, live streaming subscriptions, resilient pagination, OpenSearch event store.","lucide:activity",{"title":444,"path":445,"stem":446,"description":447,"icon":448},"Formats, Validation & Identity","/docs/platform-overview/modules/formats","docs/14.platform-overview/modules/04.formats","XML ↔ JSON-LD conversion, multi-layer validation, identifier translation, idempotent event hashing.","lucide:file-check",{"title":450,"path":451,"stem":452,"description":453,"icon":454},"Integration & Gateways","/docs/platform-overview/modules/integration","docs/14.platform-overview/modules/05.integration","Cloud storage, file service, natural-language AI assistant.","lucide:plug",{"title":456,"path":457,"stem":458,"description":459,"icon":460},"Testdata & Developer Tooling","/docs/platform-overview/modules/testdata","docs/14.platform-overview/modules/06.testdata","Synthetic EPCIS test event generation, reference event collections, conformance test suite, SDKs.","lucide:wrench",{"title":462,"path":463,"stem":464,"description":465,"icon":466},"Platform, Build & Observability","/docs/platform-overview/modules/platform","docs/14.platform-overview/modules/07.platform","How OpenEPCIS is built, deployed, and observed.","lucide:server",{"title":468,"path":469,"stem":470,"children":471,"description":473,"icon":28,"tags":482},"Vision","/docs/vision","docs/15.vision/index",[472],{"title":468,"path":469,"stem":470,"description":473,"icon":28,"tags":474},"How UNTP, DIDs, Verifiable Credentials, and EPCIS work together to create unified product identity infrastructure for the connected supply chain.",[475,476,477,478,331,479,480,481],"vision","digital-twin","did","verifiable-credentials","rfid","industry-4-0","web-3-0",[475,476,477,478,331,479,480,481],{"id":484,"title":400,"body":485,"description":403,"extension":918,"icon":404,"lastUpdated":919,"meta":920,"navigation":703,"path":401,"seo":926,"sitemap":927,"stem":402,"__hash__":928},"docsEN/docs/14.platform-overview/01.architecture.md",{"type":486,"value":487,"toc":902},"minimark",[488,496,499,528,531,535,538,560,563,570,574,593,609,616,621,628,648,651,654,663,717,720,724,731,734,741,770,773,776,779,789,793,800,804,851,855,867,869,873,898],[489,490,491],"p",{},[492,493],"img",{"alt":494,"src":495},"OpenEPCIS auth, DLS and reactive pipeline","/img/architecture.svg",[489,497,498],{},"Four cross-cutting concerns shape every OpenEPCIS module.",[500,501,502,510,516,522],"ol",{},[503,504,505],"li",{},[506,507,509],"a",{"href":508},"#authentication-one-identity-three-ways-in","Authentication: one identity, three ways in",[503,511,512],{},[506,513,515],{"href":514},"#multi-tenant-isolation-at-the-data-layer","Multi-tenant isolation at the data layer",[503,517,518],{},[506,519,521],{"href":520},"#live-events-without-polling","Live events without polling",[503,523,524],{},[506,525,527],{"href":526},"#gs1-conformance-contract","GS1 conformance contract",[529,530],"hr",{},[532,533,509],"h2",{"id":534},"authentication-one-identity-three-ways-in",[489,536,537],{},"A customer's users can sign in with whichever credential their organisation already uses:",[539,540,541,548,554],"ul",{},[503,542,543,547],{},[544,545,546],"strong",{},"OIDC bearer token"," — for systems integrated with the customer's identity provider.",[503,549,550,553],{},[544,551,552],{},"Session cookie"," — for browser-based access to admin or operator UIs.",[503,555,556,559],{},[544,557,558],{},"API key + secret"," — for service-to-service traffic and SDK calls.",[489,561,562],{},"All three flows converge on a single authenticated identity. Each customer (tenant) lives in its own Keycloak realm, resolved automatically from the request's hostname. Roles travel on the identity and gate the REST endpoints.",[489,564,565,566,569],{},"For one-off sharing — for example sending a regulator a direct link to a specific batch — the platform mints short-lived ",[544,567,568],{},"capability tokens"," scoped to one URL and one HTTP method. No broader account access is granted.",[532,571,573],{"id":572},"wallet-agnostic-verifiable-credentials-oid4vc","Wallet-agnostic Verifiable Credentials (OID4VC)",[489,575,576,577,580,581,584,585,588,589,592],{},"The same Keycloak realm that handles sign-in is also a ",[544,578,579],{},"Verifiable Credential Issuer",". Keycloak's native implementation of the OpenID Foundation's verifiable-credentials stack — ",[544,582,583],{},"OID4VCI"," for issuance, ",[544,586,587],{},"OID4VP"," for verifiable-presentation flows, ",[544,590,591],{},"SIOPv2"," for self-issued OpenID identities — turns each tenant's realm into a standards-conformant VC issuer without bolting on a separate identity stack.",[489,594,595,596,600,601,604,605,608],{},"Credentials are issued in whichever format the holder's wallet expects. The platform's lead is ",[597,598,599],"code",{},"sd-jwt-vc"," because selective disclosure is part of the format itself — a holder can prove \"recycled-cobalt share is above the regulated threshold\" without revealing the exact percentage — and the other accepted formats are ",[597,602,603],{},"jwt_vc_json",", ",[597,606,607],{},"ldp_vc"," and ISO mDoc.",[489,610,611,612,615],{},"Because the issuance surface is open OpenID-Foundation protocol rather than a proprietary wallet integration, ",[544,613,614],{},"the platform interoperates with every OID4VC-compliant wallet already in production or in pilot"," — the EU Digital Identity Wallet under eIDAS 2.0, the Catena-X Managed Identity Wallet inside its dataspace, enterprise business wallets, sector-specific wallets, holder apps on mobile. OpenEPCIS doesn't ship a wallet and doesn't pick a winner; it speaks the protocol every wallet camp is converging on.",[617,618,620],"h3",{"id":619},"trusted-subjects","Trusted subjects",[489,622,623,624,627],{},"The verifier side is where the real interoperability work lives. A credential is only as useful as the verifier's certainty that the issuer is who they claim to be. OpenEPCIS expects to maintain a ",[544,625,626],{},"globally-scoped trust list"," of accepted issuers — not EU-only and not product-category-only — so a verifier looking at a presented credential can confirm the issuer's identity, the credential's binding, and the revocation status against a single, openly-maintained list rather than chasing per-region or per-sector registries.",[489,629,630,631,604,634,604,637,604,640,643,644,647],{},"What ships today is the protocol layer — OID4VCI / OID4VP / SIOPv2 issuance and verification surfaces on every Keycloak realm. The named credential schemas (",[597,632,633],{},"EPCISCommissioningCredential",[597,635,636],{},"DPPBatteryPassportCredential",[597,638,639],{},"EUDRDueDiligenceCredential",[597,641,642],{},"UNTPDigitalConformityCredential"," and the rest) and the capture-to-issuance pipeline that fires a VC the moment the underlying event or attestation is recorded are the next strategic ",[506,645,646],{"href":413},"roadmap"," item.",[532,649,515],{"id":650},"multi-tenant-isolation-at-the-data-layer",[489,652,653],{},"This is the architecture's headline.",[655,656,657],"blockquote",{},[489,658,659,662],{},[544,660,661],{},"The application does not rewrite queries to inject a tenant filter."," It forwards the authenticated identity to OpenSearch and lets OpenSearch's Security plugin enforce Document-Level Security server-side. If the application's authorisation code is wrong, the data layer is still right.",[664,665,670],"pre",{"className":666,"code":667,"language":668,"meta":669,"style":669},"language-mermaid shiki shiki-themes material-theme-lighter github-light github-dark monokai","flowchart TD\n    ar([\"Authenticated\u003Cbr/>request\"]) --> client[\"\u003Cb>OpenSearch client\u003C/b>\u003Cbr/>request-scoped\"]\n    client --> spi[\"\u003Cb>Identity forwarded\u003C/b>\u003Cbr/>to the data layer\"]\n    spi --> os[\"\u003Cb>OpenSearch Security\u003C/b>\u003Cbr/>validates identity\u003Cbr/>applies tenant DLS\u003Cbr/>returns matching docs only\"]\n\n    classDef accent fill:#fef3f2,stroke:#d92d20\n    class spi accent\n","mermaid","",[597,671,672,680,686,692,698,705,711],{"__ignoreMap":669},[673,674,677],"span",{"class":675,"line":676},"line",1,[673,678,679],{},"flowchart TD\n",[673,681,683],{"class":675,"line":682},2,[673,684,685],{},"    ar([\"Authenticated\u003Cbr/>request\"]) --> client[\"\u003Cb>OpenSearch client\u003C/b>\u003Cbr/>request-scoped\"]\n",[673,687,689],{"class":675,"line":688},3,[673,690,691],{},"    client --> spi[\"\u003Cb>Identity forwarded\u003C/b>\u003Cbr/>to the data layer\"]\n",[673,693,695],{"class":675,"line":694},4,[673,696,697],{},"    spi --> os[\"\u003Cb>OpenSearch Security\u003C/b>\u003Cbr/>validates identity\u003Cbr/>applies tenant DLS\u003Cbr/>returns matching docs only\"]\n",[673,699,701],{"class":675,"line":700},5,[673,702,704],{"emptyLinePlaceholder":703},true,"\n",[673,706,708],{"class":675,"line":707},6,[673,709,710],{},"    classDef accent fill:#fef3f2,stroke:#d92d20\n",[673,712,714],{"class":675,"line":713},7,[673,715,716],{},"    class spi accent\n",[489,718,719],{},"Background workloads (capture pipelines, scheduled subscriptions) use an explicit admin path — no silent privilege change at runtime.",[617,721,723],{"id":722},"where-its-still-binary","Where it's still binary",[489,725,726,727,730],{},"Access today is binary per tenant: a user sees everything in their organisation or nothing. ",[544,728,729],{},"Row-level scoping"," (GLN-, EPC-range-, or biz-location-bound visibility) is a roadmap item.",[532,732,521],{"id":733},"live-events-without-polling",[489,735,736,737,740],{},"EPCIS subscriptions in OpenEPCIS are ",[544,738,739],{},"live"," — matches fire at the moment an event is indexed, not on a poll interval. Same model serves WebSocket clients and HTTP webhooks:",[664,742,744],{"className":666,"code":743,"language":668,"meta":669,"style":669},"flowchart TD\n    cap([\"/capture\"]) --> store[\"\u003Cb>Event store\u003C/b>\u003Cbr/>hash-deduplicated\u003Cbr/>tenant-isolated\"]\n    store --> match[\"\u003Cb>Subscriptions matched live\u003C/b>\u003Cbr/>against new event\"]\n    match --> ws[\"WebSocket\"]\n    match --> wh[\"Webhook\"]\n",[597,745,746,750,755,760,765],{"__ignoreMap":669},[673,747,748],{"class":675,"line":676},[673,749,679],{},[673,751,752],{"class":675,"line":682},[673,753,754],{},"    cap([\"/capture\"]) --> store[\"\u003Cb>Event store\u003C/b>\u003Cbr/>hash-deduplicated\u003Cbr/>tenant-isolated\"]\n",[673,756,757],{"class":675,"line":688},[673,758,759],{},"    store --> match[\"\u003Cb>Subscriptions matched live\u003C/b>\u003Cbr/>against new event\"]\n",[673,761,762],{"class":675,"line":694},[673,763,764],{},"    match --> ws[\"WebSocket\"]\n",[673,766,767],{"class":675,"line":700},[673,768,769],{},"    match --> wh[\"Webhook\"]\n",[489,771,772],{},"Scheduled (cron-style) subscriptions sit alongside streaming for clients that want batch-style delivery — nightly digests, periodic compliance pulls — and clients opt into them explicitly.",[489,774,775],{},"Pagination on long-running queries survives client reconnects, so a regulator pulling six months of events can drop and resume without restarting the scan.",[532,777,527],{"id":778},"gs1-conformance-contract",[489,780,781,782,785,786,788],{},"Three discipline rules apply platform-wide. Together they make every OpenEPCIS deployment conformant with ",[544,783,784],{},"GS1 EPCIS 2.0"," and the ",[544,787,426],{}," standard.",[617,790,792],{"id":791},"_1-identifiers-are-gs1-digital-link-at-rest","1. Identifiers are GS1 Digital Link at rest",[489,794,795,796,799],{},"Every EPC, business location, and read point is stored as a Digital Link URI (e.g. ",[597,797,798],{},"https://id.example.com/01/04012345999990/21/123456","). Clients that still expect EPC URN form get it on demand at query time — but the canonical form, the form everything compares against, is Digital Link.",[617,801,803],{"id":802},"_2-masterdata-lives-on-the-resolver-not-inside-events","2. Masterdata lives on the resolver, not inside events",[489,805,806,807,604,810,604,813,816,817,604,820,604,823,604,826,604,829,604,832,604,835,604,838,604,841,604,844,604,847,850],{},"EPCIS documents are lean. They carry identifiers; the descriptive payload (product name, organisation details, place data, certifications) sits on the resolver and is fetched by the consumer that needs it. Masterdata is registered once via ",[597,808,809],{},"POST /products/{gtin}",[597,811,812],{},"POST /organizations/{gln}",[597,814,815],{},"POST /places/{loc}"," — and from that single record, the resolver auto-derives a dozen standard GS1 link types (",[597,818,819],{},"gs1:pip",[597,821,822],{},"gs1:productImage",[597,824,825],{},"gs1:audioFile",[597,827,828],{},"gs1:relatedVideo",[597,830,831],{},"gs1:safetyInfo",[597,833,834],{},"gs1:certificationInfo",[597,836,837],{},"gs1:nutritionalInfo",[597,839,840],{},"gs1:instructions",[597,842,843],{},"gs1:recallStatus",[597,845,846],{},"gs1:serviceInfo",[597,848,849],{},"gs1:productSustainabilityInfo",").",[617,852,854],{"id":853},"_3-the-deployment-is-self-describing","3. The deployment is self-describing",[489,856,857,858,861,862,866],{},"A working OpenEPCIS instance publishes the discovery document the GS1 Conformant Resolver standard expects — at the spec-mandated path ",[597,859,860],{},"/.well-known/gs1resolver",". The point is that any downstream system (GS1's own Global Office resolver, a partner registry, a market-surveillance tool) can ",[863,864,865],"em",{},"find"," the deployment automatically and read what it offers, instead of being hand-configured against it. That's what \"GS1 Conformant\" means in the standard's sense.",[529,868],{},[532,870,872],{"id":871},"see-also","See also",[539,874,875,881,887,893],{},[503,876,877,880],{},[506,878,879],{"href":407},"Feature matrix"," — capabilities by edition.",[503,882,883,886],{},[506,884,885],{"href":427},"Modules → Resolver"," — the GS1 conformance surface.",[503,888,889,892],{},[506,890,891],{"href":439},"Modules → EPCIS Events"," — capture, query, and streaming subscriptions in context.",[503,894,895,897],{},[506,896,412],{"href":413}," — Verifiable Credentials, sub-tenant scoping, event-to-resolver promotion.",[899,900,901],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":669,"searchDepth":682,"depth":682,"links":903},[904,905,908,911,912,917],{"id":534,"depth":682,"text":509},{"id":572,"depth":682,"text":573,"children":906},[907],{"id":619,"depth":688,"text":620},{"id":650,"depth":682,"text":515,"children":909},[910],{"id":722,"depth":688,"text":723},{"id":733,"depth":682,"text":521},{"id":778,"depth":682,"text":527,"children":913},[914,915,916],{"id":791,"depth":688,"text":792},{"id":802,"depth":688,"text":803},{"id":853,"depth":688,"text":854},{"id":871,"depth":682,"text":872},"md","2026-05-12T00:00:00.000Z",{"readingTime":921},{"text":922,"minutes":923,"time":924,"words":925},"5 min read",4.51,270600,902,{"title":400,"description":403},{"loc":401},"Pn13_yKcJGH6jGrAhlEJ-snYe5n7oQmxkxKtA9ivK98",[930],{"title":5,"path":6,"stem":7,"children":931},[932,934,939,944,949,954,959,964,974,979,984,989,1047,1063],{"title":10,"path":6,"stem":11,"description":12,"icon":13,"tags":933},[15,16,17,18,19,20],{"title":22,"path":23,"stem":24,"children":935,"description":27,"icon":28,"tags":938},[936],{"title":22,"path":23,"stem":24,"description":27,"icon":28,"tags":937},[16,30,31,32,33,34,35,36,37],[16,30,31,32,33,34,35,36,37],{"title":40,"path":41,"stem":42,"children":940,"description":45,"icon":46,"tags":943},[941],{"title":40,"path":41,"stem":42,"description":45,"icon":46,"tags":942},[16,30,31,32,48,49],[16,30,31,32,48,49],{"title":52,"path":53,"stem":54,"children":945,"description":57,"icon":58,"tags":948},[946],{"title":52,"path":53,"stem":54,"description":57,"icon":58,"tags":947},[16,60,61,62,63,64,65,20,66,67,68,69,70],[16,60,61,62,63,64,65,20,66,67,68,69,70],{"title":73,"path":74,"stem":75,"children":950,"description":78,"icon":79,"tags":953},[951],{"title":73,"path":74,"stem":75,"description":78,"icon":79,"tags":952},[16,31,60,61,62,63,81,65,20,82,83,84,68,69,70],[16,31,60,61,62,63,81,65,20,82,83,84,68,69,70],{"title":87,"path":88,"stem":89,"children":955,"description":92,"icon":93,"tags":958},[956],{"title":87,"path":88,"stem":89,"description":92,"icon":93,"tags":957},[16,95,96,97,98,99,20,100,101,102,103,104,105,106,107,108,109,110],[16,95,96,97,98,99,20,100,101,102,103,104,105,106,107,108,109,110],{"title":113,"path":114,"stem":115,"children":960,"description":118,"icon":119,"tags":963},[961],{"title":113,"path":114,"stem":115,"description":118,"icon":119,"tags":962},[16,121,60,61,62,63,20,122,123,124,69,70],[16,121,60,61,62,63,20,122,123,124,69,70],{"title":127,"path":128,"stem":129,"children":965,"description":132,"icon":133,"tags":973},[966,968],{"title":127,"path":128,"stem":129,"description":132,"icon":133,"tags":967},[16,121,60,61,62,63,20,122,123,124,69,70],{"title":136,"path":137,"stem":138,"children":969,"description":132,"icon":141,"tags":972},[970],{"title":136,"path":137,"stem":138,"description":132,"icon":141,"tags":971},[16,60,61,143,20,144,145,146,34,147,148,149,150],[16,60,61,143,20,144,145,146,34,147,148,149,150],[16,121,60,61,62,63,20,122,123,124,69,70],{"title":154,"path":155,"stem":156,"children":975,"description":159,"icon":160,"tags":978},[976],{"title":154,"path":155,"stem":156,"description":159,"icon":160,"tags":977},[16,60,61,143,20,162,34,147,148,149,150],[16,60,61,143,20,162,34,147,148,149,150],{"title":165,"path":166,"stem":167,"children":980,"description":170,"icon":171,"tags":983},[981],{"title":165,"path":166,"stem":167,"description":170,"icon":171,"tags":982},[16,173,15,174,20,175,34,176,148,149,177],[16,173,15,174,20,175,34,176,148,149,177],{"title":180,"path":181,"stem":182,"children":985,"description":185,"icon":186,"tags":988},[986],{"title":180,"path":181,"stem":182,"description":185,"icon":186,"tags":987},[188,15,189,190,191,192,193,30,194,195,196,197,198,199,200,201],[188,15,189,190,191,192,193,30,194,195,196,197,198,199,200,201],{"title":204,"path":205,"stem":206,"children":990,"description":209,"icon":210,"tags":1046},[991,993,998,1007,1017,1026,1031,1033,1035,1037],{"title":204,"path":205,"stem":206,"description":209,"icon":210,"tags":992},[212,213,214,30,215,34,216],{"title":218,"path":219,"stem":220,"children":994,"description":223,"icon":224,"tags":997},[995],{"title":218,"path":219,"stem":220,"description":223,"icon":224,"tags":996},[226,227,215,213,214],[226,227,215,213,214],{"title":230,"path":231,"stem":232,"children":999,"description":235,"icon":236,"tags":1006},[1000,1002,1003,1004],{"title":230,"path":231,"stem":232,"description":235,"icon":236,"tags":1001},[238,239,213,30,101,34,215],{"title":241,"path":242,"stem":243,"description":244,"icon":171},{"title":246,"path":247,"stem":248,"description":249,"icon":250},{"title":252,"path":253,"stem":254,"description":255,"icon":13,"tags":1005},[238,257,258,61,259],[238,239,213,30,101,34,215],{"title":262,"path":263,"stem":264,"children":1008,"description":267,"icon":268,"tags":1016},[1009,1011,1012,1013,1014],{"title":262,"path":263,"stem":264,"description":267,"icon":268,"tags":1010},[270,271,272,213,30,101,34,215],{"title":241,"path":274,"stem":275,"description":276,"icon":277},{"title":246,"path":279,"stem":280,"description":281,"icon":277},{"title":283,"path":284,"stem":285,"description":286,"icon":277},{"title":252,"path":288,"stem":289,"description":290,"icon":13,"tags":1015},[270,257,272,292,293],[270,271,272,213,30,101,34,215],{"title":296,"path":297,"stem":298,"children":1018,"description":301,"icon":302,"tags":1025},[1019,1021,1023],{"title":296,"path":297,"stem":298,"description":301,"icon":302,"tags":1020},[304,305,306,213,215,307],{"title":241,"path":309,"stem":310,"description":311,"icon":312,"tags":1022},[304,305,306,314],{"title":252,"path":316,"stem":317,"description":318,"icon":13,"tags":1024},[304,257,305,306,320,61],[304,305,306,213,215,307],{"title":323,"path":324,"stem":325,"children":1027,"description":328,"icon":58,"tags":1030},[1028],{"title":323,"path":324,"stem":325,"description":328,"icon":58,"tags":1029},[330,331,101,332,226,333,334],[330,331,101,332,226,333,334],{"title":337,"path":338,"stem":339,"description":340,"icon":28,"tags":1032},[342,95,343,344],{"title":346,"path":347,"stem":348,"description":349,"icon":350,"tags":1034},[352,95,343],{"title":354,"path":355,"stem":356,"description":357,"icon":358,"tags":1036},[360,361,362,332],{"title":364,"path":365,"stem":366,"children":1038,"description":369,"icon":370,"tags":1045},[1039,1041,1043],{"title":364,"path":365,"stem":366,"description":369,"icon":370,"tags":1040},[372,373,374,375,376],{"title":241,"path":378,"stem":379,"description":380,"icon":171,"tags":1042},[372,314,373,374,375],{"title":252,"path":383,"stem":384,"description":385,"icon":13,"tags":1044},[372,257,387,388,61],[372,373,374,375,376],[212,213,214,30,215,34,216],{"title":392,"path":393,"stem":394,"children":1048,"description":397,"icon":398},[1049,1050,1051,1052,1053],{"title":392,"path":393,"stem":394,"description":397,"icon":398},{"title":400,"path":401,"stem":402,"description":403,"icon":404},{"title":406,"path":407,"stem":408,"description":409,"icon":410},{"title":412,"path":413,"stem":414,"description":415,"icon":416},{"title":418,"path":419,"stem":420,"children":1054,"description":423,"icon":424},[1055,1056,1057,1058,1059,1060,1061,1062],{"title":418,"path":419,"stem":420,"description":423,"icon":424},{"title":426,"path":427,"stem":428,"description":429,"icon":430},{"title":432,"path":433,"stem":434,"description":435,"icon":436},{"title":438,"path":439,"stem":440,"description":441,"icon":442},{"title":444,"path":445,"stem":446,"description":447,"icon":448},{"title":450,"path":451,"stem":452,"description":453,"icon":454},{"title":456,"path":457,"stem":458,"description":459,"icon":460},{"title":462,"path":463,"stem":464,"description":465,"icon":466},{"title":468,"path":469,"stem":470,"children":1064,"description":473,"icon":28,"tags":1067},[1065],{"title":468,"path":469,"stem":470,"description":473,"icon":28,"tags":1066},[475,476,477,478,331,479,480,481],[475,476,477,478,331,479,480,481],{"id":484,"title":400,"body":1069,"description":403,"extension":918,"icon":404,"lastUpdated":919,"meta":1341,"navigation":703,"path":401,"seo":1343,"sitemap":1344,"stem":402,"__hash__":928},{"type":486,"value":1070,"toc":1325},[1071,1075,1077,1095,1097,1099,1101,1115,1117,1121,1123,1133,1141,1145,1147,1151,1163,1165,1167,1173,1205,1207,1209,1213,1215,1219,1243,1245,1247,1249,1255,1257,1261,1263,1293,1295,1301,1303,1305,1323],[489,1072,1073],{},[492,1074],{"alt":494,"src":495},[489,1076,498],{},[500,1078,1079,1083,1087,1091],{},[503,1080,1081],{},[506,1082,509],{"href":508},[503,1084,1085],{},[506,1086,515],{"href":514},[503,1088,1089],{},[506,1090,521],{"href":520},[503,1092,1093],{},[506,1094,527],{"href":526},[529,1096],{},[532,1098,509],{"id":534},[489,1100,537],{},[539,1102,1103,1107,1111],{},[503,1104,1105,547],{},[544,1106,546],{},[503,1108,1109,553],{},[544,1110,552],{},[503,1112,1113,559],{},[544,1114,558],{},[489,1116,562],{},[489,1118,565,1119,569],{},[544,1120,568],{},[532,1122,573],{"id":572},[489,1124,576,1125,580,1127,584,1129,588,1131,592],{},[544,1126,579],{},[544,1128,583],{},[544,1130,587],{},[544,1132,591],{},[489,1134,595,1135,600,1137,604,1139,608],{},[597,1136,599],{},[597,1138,603],{},[597,1140,607],{},[489,1142,611,1143,615],{},[544,1144,614],{},[617,1146,620],{"id":619},[489,1148,623,1149,627],{},[544,1150,626],{},[489,1152,630,1153,604,1155,604,1157,604,1159,643,1161,647],{},[597,1154,633],{},[597,1156,636],{},[597,1158,639],{},[597,1160,642],{},[506,1162,646],{"href":413},[532,1164,515],{"id":650},[489,1166,653],{},[655,1168,1169],{},[489,1170,1171,662],{},[544,1172,661],{},[664,1174,1175],{"className":666,"code":667,"language":668,"meta":669,"style":669},[597,1176,1177,1181,1185,1189,1193,1197,1201],{"__ignoreMap":669},[673,1178,1179],{"class":675,"line":676},[673,1180,679],{},[673,1182,1183],{"class":675,"line":682},[673,1184,685],{},[673,1186,1187],{"class":675,"line":688},[673,1188,691],{},[673,1190,1191],{"class":675,"line":694},[673,1192,697],{},[673,1194,1195],{"class":675,"line":700},[673,1196,704],{"emptyLinePlaceholder":703},[673,1198,1199],{"class":675,"line":707},[673,1200,710],{},[673,1202,1203],{"class":675,"line":713},[673,1204,716],{},[489,1206,719],{},[617,1208,723],{"id":722},[489,1210,726,1211,730],{},[544,1212,729],{},[532,1214,521],{"id":733},[489,1216,736,1217,740],{},[544,1218,739],{},[664,1220,1221],{"className":666,"code":743,"language":668,"meta":669,"style":669},[597,1222,1223,1227,1231,1235,1239],{"__ignoreMap":669},[673,1224,1225],{"class":675,"line":676},[673,1226,679],{},[673,1228,1229],{"class":675,"line":682},[673,1230,754],{},[673,1232,1233],{"class":675,"line":688},[673,1234,759],{},[673,1236,1237],{"class":675,"line":694},[673,1238,764],{},[673,1240,1241],{"class":675,"line":700},[673,1242,769],{},[489,1244,772],{},[489,1246,775],{},[532,1248,527],{"id":778},[489,1250,781,1251,785,1253,788],{},[544,1252,784],{},[544,1254,426],{},[617,1256,792],{"id":791},[489,1258,795,1259,799],{},[597,1260,798],{},[617,1262,803],{"id":802},[489,1264,806,1265,604,1267,604,1269,816,1271,604,1273,604,1275,604,1277,604,1279,604,1281,604,1283,604,1285,604,1287,604,1289,604,1291,850],{},[597,1266,809],{},[597,1268,812],{},[597,1270,815],{},[597,1272,819],{},[597,1274,822],{},[597,1276,825],{},[597,1278,828],{},[597,1280,831],{},[597,1282,834],{},[597,1284,837],{},[597,1286,840],{},[597,1288,843],{},[597,1290,846],{},[597,1292,849],{},[617,1294,854],{"id":853},[489,1296,857,1297,861,1299,866],{},[597,1298,860],{},[863,1300,865],{},[529,1302],{},[532,1304,872],{"id":871},[539,1306,1307,1311,1315,1319],{},[503,1308,1309,880],{},[506,1310,879],{"href":407},[503,1312,1313,886],{},[506,1314,885],{"href":427},[503,1316,1317,892],{},[506,1318,891],{"href":439},[503,1320,1321,897],{},[506,1322,412],{"href":413},[899,1324,901],{},{"title":669,"searchDepth":682,"depth":682,"links":1326},[1327,1328,1331,1334,1335,1340],{"id":534,"depth":682,"text":509},{"id":572,"depth":682,"text":573,"children":1329},[1330],{"id":619,"depth":688,"text":620},{"id":650,"depth":682,"text":515,"children":1332},[1333],{"id":722,"depth":688,"text":723},{"id":733,"depth":682,"text":521},{"id":778,"depth":682,"text":527,"children":1336},[1337,1338,1339],{"id":791,"depth":688,"text":792},{"id":802,"depth":688,"text":803},{"id":853,"depth":688,"text":854},{"id":871,"depth":682,"text":872},{"readingTime":1342},{"text":922,"minutes":923,"time":924,"words":925},{"title":400,"description":403},{"loc":401},1779384036454]