Passport::operator_identifier carries a pinned citation in its own doc comment:
Annex III, point (k) is the data-content basis — "the name, contact details and unique operator identifier of the economic operator established in the Union responsible for carrying out the tasks set out in Article 4 of Regulation (EU) 2019/1020 [...]"
The field is:
pub operator_identifier: Option<String>,
Three things are named in the basis. One is modelled. The name and the contact details have nowhere to live.
Why the manufacturer field does not cover it
ManufacturerInfo carries a name and an address, but the Art. 4 responsible operator is not necessarily the manufacturer — that is the point of the provision. For a product made outside the Union, the responsible operator is typically the importer or an authorised representative, and the passport currently has no way to say who that is, only an opaque identifier for them.
FacilitySnapshot does not cover it either: a facility is where the product was made, not who is answerable for it.
Why it is not urgent, and why it should still be filed
The identifier alone is enough for registry registration, which is the only consumer today, so nothing is broken. The gap shows up the first time a reader of a passport — a market surveillance authority, or anyone following Art. 4 — has to resolve the identifier to a contactable party out of band. The passport is supposed to carry that.
The design question, which is the actual work
Whether to add name and contact alongside the existing identifier, or to introduce a structured economic-operator type that carries all three plus a role, is not obvious and should be settled before any code:
- A structured type with a role also answers "which of these operators is the responsible one" when there is more than one, which the single-field model cannot express at all. That is the shape the provision implies.
- It also has to interact with
TransferChain::current_operator(), which is already the authoritative record of who is responsible now. operator_identifier is deliberately frozen at publish and documented as such. Any new field has to declare which of the two it is, or it will be read as the wrong one.
- Whatever lands is envelope, so it is additive-only, and it is signed content that a transfer cannot rewrite. Getting the frozen-versus-current distinction wrong here is not a bug that can be patched later.
Prerequisite
The citation above is marked confirmed against the verbatim OJ text, but it is a citation to a data-content requirement, not to a field shape. Before modelling, read Annex III point (k) and Art. 4 of 2019/1020 directly and establish what "contact details" is required to contain — a postal address, an email, a named person — because that determines whether this is one optional string or a struct.
Passport::operator_identifiercarries a pinned citation in its own doc comment:The field is:
Three things are named in the basis. One is modelled. The name and the contact details have nowhere to live.
Why the manufacturer field does not cover it
ManufacturerInfocarries a name and an address, but the Art. 4 responsible operator is not necessarily the manufacturer — that is the point of the provision. For a product made outside the Union, the responsible operator is typically the importer or an authorised representative, and the passport currently has no way to say who that is, only an opaque identifier for them.FacilitySnapshotdoes not cover it either: a facility is where the product was made, not who is answerable for it.Why it is not urgent, and why it should still be filed
The identifier alone is enough for registry registration, which is the only consumer today, so nothing is broken. The gap shows up the first time a reader of a passport — a market surveillance authority, or anyone following Art. 4 — has to resolve the identifier to a contactable party out of band. The passport is supposed to carry that.
The design question, which is the actual work
Whether to add name and contact alongside the existing identifier, or to introduce a structured economic-operator type that carries all three plus a role, is not obvious and should be settled before any code:
TransferChain::current_operator(), which is already the authoritative record of who is responsible now.operator_identifieris deliberately frozen at publish and documented as such. Any new field has to declare which of the two it is, or it will be read as the wrong one.Prerequisite
The citation above is marked confirmed against the verbatim OJ text, but it is a citation to a data-content requirement, not to a field shape. Before modelling, read Annex III point (k) and Art. 4 of 2019/1020 directly and establish what "contact details" is required to contain — a postal address, an email, a named person — because that determines whether this is one optional string or a struct.