Skip to content

A mandatory GTIN forecloses four of the five UPI schemes EN 18219 admits — and locks out operators without GS1 membership #257

Description

@LKSNDRTMLKV

Every product-group payload declares pub gtin: Gtinnot Option<Gtin>. A GTIN is structurally mandatory to create a passport in this workspace.

EN 18219:2026Digital product passport: Unique identifiers, one of the six standards cited by Commission Implementing Decision (EU) 2026/1736, and a presumption route under ESPR Art. 41(2) — does not require anything of the kind.

What the standard actually admits

Its clause 5.1 requires a unique product identifier to satisfy the general principles in its Clause 4 and comply with one of the ID schemes in Clause 5. They are alternatives. There are five:

# Basis External dependency
1 Web-enabled structured-path/query — GS1 Digital Link or ASC MH10.8.2 Data Identifiers a registered Issuing Agency Code
2 Identification Link (IL), EN IEC 61406-1/-2, URL format none — self-issuing
3 Decentralized Identifiers — did:web, did:ethr, did:ebsi none — self-issuing
4 Limited-capacity carriers: RAIN RFID (ISO/IEC 18000-63) and 2D codes, resolver-based an Issuing Agency Code
5 DOI (ISO 26324) an issuing agency

We implement the GS1 branch of scheme 1, and the domain type makes it the only possibility.

🚨 A GTIN requires GS1 membership, which is a recurring commercial subscription. Schemes 2 and 3 are described by the standard as self-issuing systems without external dependencies. So the model forecloses four of five admissible routes, and the one it keeps is the only one with a paid third-party dependency.

Why this is a product question, not a tidiness question

An operator who cannot obtain a GTIN cannot create a passport here at all — not a degraded one, not one with a warning. The type system refuses.

That is a real segment. A small manufacturer, or a non-EU manufacturer placing product on the EU market under its own brand, carries the DPP duty and is among the least likely to hold GS1 membership. EN 18219 says such an operator can have a fully conformant unique product identifier. We say they cannot have a passport.

The cheapest route in is one we already ship

dpp-vc already produces did:web documents, and dpp-crypto already does Ed25519 and JWS.

Scheme 3 requires conformance with W3C Decentralized Identifiers v1.0:2022, and names did:web as the lightweight non-DLT option. It also records that a DID can represent any granularity — model, batch or item, which is the same flexibility scheme 1 gets from AI qualifiers.

So the distance from what is built to a second admissible scheme is smaller than it looks, and it runs through a crate that exists for another reason.

⚠️ One property of scheme 3 worth noting for transfer of responsibility: the standard records that DLT-backed DID methods enable dynamic updates of the deep link to the passport, explicitly including the case where the economic operator responsible for the passport changes. Scheme 1 has no equivalent mechanism. That is a surface this workspace already models.

What this issue asks for

A decision, taken deliberately, on whether gtin stays mandatory.

It is a persisted-shape change, so docs/architecture/PERSISTED-SHAPES.md governs it: a non-additive change to ProductGroupData makes already-written documents undeserialisable at runtime. That cost is zero today and rises monotonically. The project's own record is that breaking changes are free precisely while nothing depends on them, and that the window closes on the first real operator.

Three shapes, for whoever takes it:

  1. Leave it. Defensible if GS1 is the deliberate target market. Should then be written down as a market choice rather than left as a type-level accident.
  2. Option<Gtin> plus a scheme discriminant. The identifier becomes "which scheme, and its value", with GTIN one variant. Mirrors what LegalEntityIdentifier already does for EUID-or-other in the unsold-goods payload — the pattern exists in this crate.
  3. Full identifier enum covering schemes 1–3. More work, and it is what conformance across schemes eventually needs.

I would take 2. It is the smallest change that stops foreclosing the other schemes, it reuses a pattern already in the crate, and it leaves 3 reachable without another persisted-shape break.

Not in scope here

Scheme 4 (RFID) and scheme 5 (DOI) — no pull for either, and scheme 4's territory belongs to EN 18220 (data carriers), which is a separate standard.

Also related but separate: #256, the unpinned GS1 Digital Link version. EN 18219 clause 6.3.2 names it as 1.6.0:2022.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    complianceRegulatory/compliance correctness issuesurface/schemaMoves a JSON schema, instrument manifest or product grouptype/defectSomething published or encoded here is wrong or unbackable nowurgency/nextBlocks work already scheduled

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions