{
  "version": "vehicle/1.0-draft",
  "date": "2026-10-24",
  "licence": "CC0-1.0",
  "root": "vehicle",
  "markerKey": "vehicle.specificationId",
  "markerGrammar": "^vehicle/[1-9][0-9]*[.](0|[1-9][0-9]*)$",
  "keyGrammar": "^vehicle([.][a-z][A-Za-z0-9]*)+$",
  "keyGrammarAuthoring": "^vehicle([.][a-z][a-z0-9]*([A-Z][a-z0-9]*)*)+$",
  "vendorKeyGrammar": "^[a-z0-9]+(-[a-z0-9]+)*([.][a-z0-9]+(-[a-z0-9]+)*)+[.][a-z][A-Za-z0-9]*$",
  "keyCap": 40,
  "nameCap": 64,
  "iriBase": "https://w3id.org/vinvoice/ns#",
  "counts": {
    "core": 13,
    "recommended": 13,
    "optional": 22
  },
  "keys": [
    {
      "key": "vehicle.specificationId",
      "tier": "core",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Id",
      "labelDe": "VINvoice-Spezifikation",
      "labelEn": "VINvoice specification",
      "definition": "Marker row. Identifies the vehicle data specification and the major.minor version that the vehicle rows of this line follow, and so makes the line a vehicle line. Analogous to EN 16931 BT-24 (Specification identifier) at line level; it is not a BT-24 value and never appears in BT-24.",
      "valueFormat": "^vehicle/[1-9][0-9]*[.](0|[1-9][0-9]*)$, e.g. vehicle/1.0 (no patch number, never a URL)",
      "grammar": "^vehicle/[1-9][0-9]*[.](0|[1-9][0-9]*)$",
      "tokens": [],
      "codeList": "none (version token)",
      "conditionality": "MUST appear exactly once on every vehicle line and SHOULD be the first row; MUST NOT appear on any other line",
      "carrier": "BG-32: BT-160 'VINvoice-Spezifikation [vehicle.specificationId]', BT-161 'vehicle/1.0'",
      "anchors": "EN 16931-1 BT-24 'Specification identifier' (UBL cbc:CustomizationID, CII GuidelineSpecifiedDocumentContextParameter/ID), as an analogy only; KoSIT CIUS XRechnung CVD v0.9 BT-160 'cva' as precedent for a machine token in BT-160"
    },
    {
      "key": "vehicle.roleCode",
      "tier": "core",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Code",
      "labelDe": "Fahrzeugrolle",
      "labelEn": "Vehicle role",
      "definition": "Why the vehicle appears on this line, seen from the issuer. supply: the vehicle is the goods supplied, including self-billed purchases, hire-purchase and leases with agreed transfer of ownership. trade-in: the vehicle is taken in from the buyer in part-exchange; how its value is invoiced follows the issuer's VAT treatment, not this token. service: work, parts, test or repair on the vehicle. rental: a charge for the use of the vehicle for a continuous period of at most 30 days. lease: a periodic charge for use over a longer period without agreed transfer of ownership, including subscriptions. agency: a commission for intermediating the sale or purchase of the vehicle. transport: transfer, delivery or logistics of the vehicle. other. The token states no VAT treatment and no place of supply.",
      "valueFormat": "one token from VEHICLE-ROLE 1.0",
      "grammar": "^(supply|trade-in|service|rental|lease|agency|transport|other)$",
      "tokens": [
        "supply",
        "trade-in",
        "service",
        "rental",
        "lease",
        "agency",
        "transport",
        "other"
      ],
      "codeList": "VEHICLE-ROLE 1.0: supply, trade-in, service, rental, lease, agency, transport, other",
      "conditionality": "MUST on every vehicle line; SHOULD be the second row",
      "carrier": "BG-32: BT-160 'Fahrzeugrolle [vehicle.roleCode]', BT-161 'supply'",
      "anchors": "No EU legal term (EN 16931 BT-3 types the document, not the line); Directive 2006/112/EC Art. 56(3) ('short-term' = continuous possession or use for at most 30 days), used only as the rental/lease boundary; Art. 14(2)(b) (contracts with transfer of ownership), informative; informative: schema.org businessFunction"
    },
    {
      "key": "vehicle.vin",
      "tier": "core",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Number (implicit in the listed abbreviation vin)",
      "labelDe": "Fahrzeug-Identifizierungsnummer (FIN)",
      "labelEn": "Vehicle identification number (VIN)",
      "definition": "Identification number marked on the vehicle: the 17-character VIN (ISO 3779; Reg. (EU) 2021/535 Annex II Part 2). For a vehicle without a VIN, the identifier printed in registration field E (for example a chassis or product identification number); receivers treat only a 17-character value of the expected form as an ISO 3779 VIN. Same value as BT-128 with scheme AKG when both are present. A VIN can be personal data when the holder can be identified.",
      "valueFormat": "^[A-Z0-9]{1,17}$, upper case, no blanks or hyphens; expected form ^[A-HJ-NPR-Z0-9]{17}$ with a valid position-9 check digit (Reg. (EU) 2021/535 Annex II Part 2); deviations are warnings only",
      "grammar": "^[A-Z0-9]{1,17}$",
      "tokens": [],
      "codeList": "none",
      "conditionality": "MUST on every vehicle line whenever an identifier exists (all roles); may be absent only on an order or prepayment invoice before a vehicle is assigned",
      "carrier": "BG-32: BT-160 'Fahrzeug-Identifizierungsnummer (FIN) [vehicle.vin]', BT-161 'TSTVEH016N0000001'. Level 2 also BT-128: CII ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument {ram:IssuerAssignedID, ram:TypeCode 130, ram:ReferenceTypeCode AKG}; UBL cac:InvoiceLine/cac:DocumentReference {cbc:ID schemeID='AKG', cbc:DocumentTypeCode 130}. Optional header BT-18",
      "anchors": "Directive 1999/37/EC Annex I code E; Reg. (EU) 2020/683 Annex VIII CoC item 0.10; Reg. (EU) 2021/535 Annex II Part 2; ISO 3779; Directive 2014/45/EU Annex II item 1 (DE 'Fahrzeug-Identifizierungsnummer (FIN oder Fahrgestellnummer)'); UNTDID 1153 AKG for BT-128-1; CJEU C-319/22 (VIN as personal data)"
    },
    {
      "key": "vehicle.make",
      "tier": "core",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Name (implicit)",
      "labelDe": "Marke",
      "labelEn": "Make",
      "definition": "Trade name of the manufacturer as in registration field D.1 or CoC item 0.1, without model or configuration; not the legal name of the manufacturer (CoC item 0.5).",
      "valueFormat": "text, NFC, trimmed, no control or bidi characters, first character not = + - @, 1-60 characters",
      "grammar": "^(?![=+@\\s-])(?!.*\\s$)[^\\x00-\\x1F\\x7F\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]{1,60}$",
      "tokens": [],
      "codeList": "none",
      "conditionality": "MUST whenever known, all roles",
      "carrier": "BG-32: BT-160 'Marke [vehicle.make]', BT-161 'Volkswagen'. Factur-X EXTENDED MAY also mirror it in ram:BrandName (the row stays)",
      "anchors": "Directive 1999/37/EC code D.1 'make'; CoC item 0.1 'Make (trade name of manufacturer)'; informative: CII BrandName, STAR Make, schema.org brand"
    },
    {
      "key": "vehicle.model",
      "tier": "core",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Name (implicit)",
      "labelDe": "Modell",
      "labelEn": "Model",
      "definition": "Commercial description of the vehicle as printed in registration field D.3 or CoC item 0.2.1 (for example Golf, or Golf Variant), without the make. Configuration details sent in vehicle.configuration SHOULD NOT be repeated here. Not the type-approval type (vehicle.approvedType).",
      "valueFormat": "text, NFC, trimmed, no control or bidi characters, first character not = + - @, 1-60 characters",
      "grammar": "^(?![=+@\\s-])(?!.*\\s$)[^\\x00-\\x1F\\x7F\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]{1,60}$",
      "tokens": [],
      "codeList": "none",
      "conditionality": "MUST whenever known, all roles",
      "carrier": "BG-32: BT-160 'Modell [vehicle.model]', BT-161 'Golf'. Factur-X EXTENDED MAY also mirror it in ram:ModelName (the row stays); the full marketing name stays in BT-153",
      "anchors": "Directive 1999/37/EC code D.3 'commercial description(s)' (DE 'Handelsbezeichnung(en)'); CoC item 0.2.1 'commercial name(s)'; informative: CII ModelName, schema.org model, COVESA VSS Model, STAR Model"
    },
    {
      "key": "vehicle.conditionCode",
      "tier": "core",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Code",
      "labelDe": "Fahrzeugzustand",
      "labelEn": "Vehicle condition",
      "definition": "Commercial condition at supply, as a partition of all vehicles. new: not registered before this supply, other than in the buyer's name for this supply, and not used except for delivery, transfer and pre-delivery checks. used: every other vehicle, including vehicles pre-registered by a manufacturer, importer or dealer and demonstration vehicles. Not the VAT notions 'new means of transport' (vehicle.newMeansOfTransportIndicator) and 'second-hand goods' (Art. 311(1)), and not 'new passenger car' of Directive 1999/94/EC Art. 2(2).",
      "valueFormat": "one token from VEHICLE-CONDITION 1.0",
      "grammar": "^(new|used)$",
      "tokens": [
        "new",
        "used"
      ],
      "codeList": "VEHICLE-CONDITION 1.0: new, used",
      "conditionality": "MUST for roles supply and trade-in; omit for all other roles",
      "carrier": "BG-32: BT-160 'Fahrzeugzustand [vehicle.conditionCode]', BT-161 'used'",
      "anchors": "No EU legal term for this partition. Related but different notions: Directive 1999/94/EC Art. 2(2) ('new passenger car': not previously sold to a person who bought it other than for resale); Directive 2006/112/EC Art. 2(2)(b) and Art. 311(1)(1). Informative: schema.org itemCondition (NewCondition, UsedCondition)"
    },
    {
      "key": "vehicle.firstRegistrationDate",
      "tier": "core",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Date",
      "labelDe": "Datum der Erstzulassung",
      "labelEn": "Date of first registration",
      "definition": "Date of first registration of the vehicle as printed in registration field B of the registration document the issuer relies on; for an imported vehicle, the date that document shows. An absent row makes no statement.",
      "valueFormat": "YYYY-MM-DD; YYYY-MM only if the day is genuinely unknown (reduced-precision date)",
      "grammar": "^([0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])|[0-9]{4}-(0[1-9]|1[0-2]))$",
      "tokens": [],
      "codeList": "none",
      "conditionality": "MUST for roles supply and trade-in whenever the vehicle has been registered; SHOULD on service lines; MAY with conditionCode new when the registration was made in the buyer's name for this supply",
      "carrier": "BG-32: BT-160 'Datum der Erstzulassung [vehicle.firstRegistrationDate]', BT-161 '2022-03-18'",
      "anchors": "Directive 1999/37/EC Art. 2(b) ('registration') and Annex I code B 'date of first registration of the vehicle' (DE 'Datum der Erstzulassung des Fahrzeugs'); UN/EDIFACT 2005 qualifier 375 'Date of first registration' (VDA 4938 DTM+375); schema.org dateVehicleFirstRegistered; COVESA VSS DateVehicleFirstRegistered; STAR FirstRegistrationDate"
    },
    {
      "key": "vehicle.odometerReadingKm",
      "tier": "core",
      "status": "draft",
      "statutory": true,
      "repeatable": false,
      "unit": "KMT",
      "representationTerm": "Measure, unit km (Rec 20 KMT)",
      "labelDe": "Kilometerstand (km)",
      "labelEn": "Odometer reading (km)",
      "definition": "Reading of an odometer that reads in kilometres, in whole kilometres, as displayed at the reference date (vehicle.odometerReadingDate, else BT-72, else BT-2). Never converted from miles and never estimated. It is the displayed reading, not a statement of the distance actually travelled; vehicle.odometerReadingStatusCode qualifies it. For the 6 000 km test of Art. 2(2)(b)(i) the issuer relies on it, and it SHOULD then be the reading at delivery.",
      "valueFormat": "integer ^(0|[1-9][0-9]{0,6})$, no group separator, no unit text; 0 is valid",
      "grammar": "^(0|[1-9][0-9]{0,6})$",
      "tokens": [],
      "codeList": "unit fixed: kilometre (Rec 20 KMT)",
      "conditionality": "For roles supply and trade-in of used vehicles fitted with an odometer (normally categories M, N and L), exactly one of odometerReadingKm and odometerReadingMi MUST be present unless odometerReadingStatusCode is inoperative or unknown; SHOULD on service lines and for new vehicles; with newMeansOfTransportIndicator = true, an odometer reading or firstEntryIntoServiceDate MUST be present (Art. 226(12)); omitted for vehicles without an odometer (categories O, R, S and hour-metered machines)",
      "carrier": "BG-32: BT-160 'Kilometerstand (km) [vehicle.odometerReadingKm]', BT-161 '48200'. Labelled name mandatory (statutory feature)",
      "anchors": "Directive 2006/112/EC Art. 2(2)(b)(i) (6 000 km) and Art. 226(12); Directive 2014/45/EU Annex II item 4 'odometer reading' (DE 'Kilometerstand'); COM(2025) 180 (proposal); national guidance: DE KoSIT/FeRD Pflichtangaben row 'Laufleistung'; HU NAV kms; PL KSeF P_22B; IT FatturaPA DatiVeicoli/TotalePercorso; UN/ECE Rec 20 KMT"
    },
    {
      "key": "vehicle.odometerReadingMi",
      "tier": "core",
      "status": "draft",
      "statutory": true,
      "repeatable": false,
      "unit": "SMI",
      "representationTerm": "Measure, unit mi (Rec 20 SMI)",
      "labelDe": "Meilenstand (mi)",
      "labelEn": "Odometer reading (mi)",
      "definition": "As vehicle.odometerReadingKm, for an odometer that reads in statute miles; never converted. Receivers that apply the 6 000 km test convert with 1 mi = 1.609344 km.",
      "valueFormat": "integer ^(0|[1-9][0-9]{0,6})$",
      "grammar": "^(0|[1-9][0-9]{0,6})$",
      "tokens": [],
      "codeList": "unit fixed: statute mile (Rec 20 SMI)",
      "conditionality": "Instead of odometerReadingKm, never together with it; same conditions",
      "carrier": "BG-32: BT-160 'Meilenstand (mi) [vehicle.odometerReadingMi]', BT-161 '30000'. Labelled name mandatory (statutory feature)",
      "anchors": "As odometerReadingKm; Reg. (EU) 2020/683 Annex VIII (CoC statement whether the odometer has metric or imperial units); UN/ECE Rec 20 SMI"
    },
    {
      "key": "vehicle.maximumNetPowerKw",
      "tier": "core",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": "KWT",
      "representationTerm": "Measure, unit kW (Rec 20 KWT)",
      "labelDe": "Höchste Nutzleistung (kW)",
      "labelEn": "Maximum net power (kW)",
      "definition": "Maximum net power in kilowatts: CoC item 27.1 (internal combustion engine) where the vehicle has one; otherwise CoC item 27.3 (electric motors, consolidated for several motors). Registration field P.2 normally shows this value; where it shows another quantity, such as the maximum 30-minute power of an electric motor (CoC item 27.4), the CoC value is sent. Never a combined system power, a 30-minute power or PS/hp.",
      "valueFormat": "decimal ^(0|[1-9][0-9]{0,3})([.][0-9])?$",
      "grammar": "^(0|[1-9][0-9]{0,3})([.][0-9])?$",
      "tokens": [],
      "codeList": "unit fixed: kilowatt (Rec 20 KWT)",
      "conditionality": "MUST whenever known for motor vehicles on supply and trade-in; with newMeansOfTransportIndicator = true this key or engineCapacityCm3 SHOULD be present (more-than-7.2-kW threshold of Art. 2(2)(a)(i)), and MUST where national law makes it an invoice particular (DE)",
      "carrier": "BG-32: BT-160 'Höchste Nutzleistung (kW) [vehicle.maximumNetPowerKw]', BT-161 '110'",
      "anchors": "Directive 1999/37/EC code P.2 'maximum net power (in kW) (if available)'; Reg. (EU) 2020/683 Annex VIII CoC items 27.1, 27.3, 27.4 and footnotes 112 and 159 (DE 'Höchste Nutzleistung'); Reg. (EU) 2017/1151 Art. 2 ('net power', 'maximum 30 minutes power'); Directive 2006/112/EC Art. 2(2)(a)(i) (7.2 kW threshold); national invoice particular: DE UStG §14a(4) with §1b(2); HU NAV enginePower; UN/ECE Rec 20 KWT"
    },
    {
      "key": "vehicle.newMeansOfTransportIndicator",
      "tier": "core",
      "status": "draft",
      "statutory": true,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Indicator",
      "labelDe": "Neues Fahrzeug (USt)",
      "labelEn": "New means of transport",
      "definition": "Issuer's statement that at the time of supply the vehicle is a 'new means of transport' for VAT: a motorised land vehicle intended for the transport of persons or goods, of more than 48 cm3 or more than 7.2 kW (Art. 2(2)(a)(i)), supplied within six months of the date of first entry into service or having travelled no more than 6 000 km (Art. 2(2)(b)(i)), with the facts established under the rules of the Member State (Art. 2(2)(c)). A statement of fact, not a VAT determination; the VAT treatment stays in the VAT terms. 'Neues Fahrzeug' is the VAT term, not the commercial condition (vehicle.conditionCode). Land vehicles only in 1.0.",
      "valueFormat": "true | false",
      "grammar": "^(true|false)$",
      "tokens": [
        "true",
        "false"
      ],
      "codeList": "Indicator values: true, false",
      "conditionality": "MUST be true on every line whose supply is exempt under Art. 138(1) and (2)(a) as a supply of a new means of transport, and that line MUST then carry firstEntryIntoServiceDate or an odometer reading (Art. 226(12)); MAY as a factual statement on other supplies; false only as an active statement",
      "carrier": "BG-32: BT-160 'Neues Fahrzeug (USt) [vehicle.newMeansOfTransportIndicator]', BT-161 'true'. Labelled name mandatory (statutory feature)",
      "anchors": "Directive 2006/112/EC Art. 2(1)(b)(ii), 2(2)(a)-(c), 138(1) and (2)(a), 226(12) (DE 'neue Fahrzeuge'); national transposition e.g. DE UStG §1b and §14a(4); PL KSeF NowySrodekTransportu; HU NAV newTransportMean"
    },
    {
      "key": "vehicle.firstEntryIntoServiceDate",
      "tier": "core",
      "status": "draft",
      "statutory": true,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Date",
      "labelDe": "Erste Inbetriebnahme",
      "labelEn": "First entry into service",
      "definition": "Date of first entry into service of the vehicle for the six-month test of Directive 2006/112/EC Art. 2(2)(b)(i), as the issuer establishes it under the rules of the Member State concerned (Art. 2(2)(c)). It can be earlier or later than the first registration date: use before registration makes it earlier, and under some national rules a registration without use makes it later. An absent row makes no statement.",
      "valueFormat": "YYYY-MM-DD",
      "grammar": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$",
      "tokens": [],
      "codeList": "none",
      "conditionality": "With newMeansOfTransportIndicator = true: SHOULD whenever the vehicle was put into service before the supply, and this key or an odometer reading MUST be present; otherwise MAY",
      "carrier": "BG-32: BT-160 'Erste Inbetriebnahme [vehicle.firstEntryIntoServiceDate]', BT-161 '2026-09-30'. Labelled name mandatory (statutory feature)",
      "anchors": "Directive 2006/112/EC Art. 2(2)(b)(i) 'date of first entry into service' (DE 'erste Inbetriebnahme') and Art. 226(12); national transposition e.g. DE UStG §1b(3); HU NAV firstEntryIntoService; PL KSeF P_22A; informative only: Reg. (EU) 2018/858 Art. 3(52) (type-approval meaning, limited to first use 'in the Union')"
    },
    {
      "key": "vehicle.marginSchemeIndicator",
      "tier": "core",
      "status": "draft",
      "statutory": true,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Indicator",
      "labelDe": "Differenzbesteuerung",
      "labelEn": "Margin scheme",
      "definition": "The supply on this line falls under one of the special arrangements of Directive 2006/112/EC Title XII Chapter 4 for second-hand goods, works of art, collectors' items and antiques, for which Art. 226(14) requires the mention 'Margin scheme - Second-hand goods' or its equivalent. Not the travel agents' margin scheme (Art. 306, Art. 226(13)). A structured hint only: it never replaces the VAT category code, the exemption reason (BT-120) or the Art. 226(14) mention.",
      "valueFormat": "true | false",
      "grammar": "^(true|false)$",
      "tokens": [
        "true",
        "false"
      ],
      "codeList": "Indicator values: true, false",
      "conditionality": "MUST be true on every vehicle line supplied under such an arrangement, whatever VAT category code the issuer's national rules or CIUS prescribe for it; MUST NOT be true with category K (Art. 139(3)); false only as an active statement",
      "carrier": "BG-32: BT-160 'Differenzbesteuerung [vehicle.marginSchemeIndicator]', BT-161 'true'. Labelled name mandatory (statutory feature)",
      "anchors": "Directive 2006/112/EC Title XII Chapter 4 (Arts. 311-343), Art. 139(3) and Art. 226(14) as amended by Directive 2010/45/EU ('Margin scheme - Second-hand goods', '- Works of art', '- Collector's items and antiques'; DE 'Differenzbesteuerung'); HU NAV marginSchemeIndicator; PL KSeF P_PMarzy; IT FatturaPA Natura N5 with RF14; ES Veri*Factu ClaveRegimen 03; national transposition e.g. DE UStG §25a"
    },
    {
      "key": "vehicle.registrationNumber",
      "tier": "recommended",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Number",
      "labelDe": "Amtliches Kennzeichen",
      "labelEn": "Registration number",
      "definition": "Registration number as printed in registration field A, without the country sign, including temporary, export and trade (dealer) registration numbers. It identifies the registration, not the vehicle, and is personal data when it can be linked to a natural person.",
      "valueFormat": "1-15 characters as printed, NFC, upper case: letters (Unicode category Lu), digits 0-9, blank and hyphen, first character a letter or digit; XSD or ECMAScript (u flag): ^[\\p{Lu}0-9][\\p{Lu}0-9 -]{0,14}$; engines without \\p{Lu} (Python re) test unicodedata.category per character; e.g. XX-VE 1, AB-123-CD; receivers compare after removing blanks and hyphens",
      "grammar": "^[\\p{Lu}0-9][\\p{Lu}0-9 -]{0,14}$",
      "tokens": [],
      "codeList": "none",
      "conditionality": "SHOULD on service, lease and rental lines when the vehicle is registered; otherwise only when the receiver needs it (data minimisation)",
      "carrier": "BG-32: BT-160 'Amtliches Kennzeichen [vehicle.registrationNumber]', BT-161 'XX-VE 1'. Only when no VIN is known, BT-128 MAY carry the registration number with scheme ABZ; the row then repeats it (V-18)",
      "anchors": "Directive 1999/37/EC Art. 2(b) and code A 'registration number' (DE 'Zulassungsnummer (amtliches Kennzeichen)'); Reg. (EU) 2018/858 Art. 3(53) (registration on a permanent or temporary basis); Directive 2014/45/EU Annex II item 2; UN/EDIFACT 7405 BL 'Vehicle registration number'; UNTDID 1153 ABZ 'Vehicle licence number' (BT-128); PL KSeF P_22BNR"
    },
    {
      "key": "vehicle.registrationCountryCode",
      "tier": "recommended",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Code",
      "labelDe": "Zulassungsland",
      "labelEn": "Country of registration",
      "definition": "State that issued vehicle.registrationNumber, as a code from the EN 16931 country code list (ISO 3166-1 alpha-2, plus XI and 1A). Greece is GR, not the VAT prefix EL. Not the distinguishing sign on plates (D, A, F).",
      "valueFormat": "^([A-Z]{2}|1A)$, value in the EN 16931 country code list",
      "grammar": "^([A-Z]{2}|1A)$",
      "tokens": [],
      "codeList": "EN 16931 country code list (ISO 3166-1 alpha-2, plus XI and 1A)",
      "conditionality": "SHOULD whenever vehicle.registrationNumber is present",
      "carrier": "BG-32: BT-160 'Zulassungsland [vehicle.registrationCountryCode]', BT-161 'DE'",
      "anchors": "Directive 1999/37/EC Annex I II.4 (Member State issuing); ISO 3166-1; EN 16931 country code list (BT-40, BR-CL-14); informative: STAR RegistrationCountry"
    },
    {
      "key": "vehicle.odometerReadingStatusCode",
      "tier": "recommended",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Code",
      "labelDe": "Status des Zählerstands",
      "labelEn": "Odometer reading status",
      "definition": "Issuer's statement on how the odometer reading of this line is to be read. displayed: the reading as displayed; the total distance is not verified. replaced: the instrument or its display was replaced, so the reading is not the total distance. rolled-over: the counter passed its maximum and restarted. inoperative: the issuer states that the odometer cannot be read. unknown: no reading is available to the issuer. other. An absent row makes no statement. There is no 'verified' status in 1.0.",
      "valueFormat": "one token from VEHICLE-ODOMETER-STATUS 1.0",
      "grammar": "^(displayed|replaced|rolled-over|inoperative|unknown|other)$",
      "tokens": [
        "displayed",
        "replaced",
        "rolled-over",
        "inoperative",
        "unknown",
        "other"
      ],
      "codeList": "VEHICLE-ODOMETER-STATUS 1.0: displayed, replaced, rolled-over, inoperative, unknown, other",
      "conditionality": "SHOULD whenever the reading is not a plain displayed reading; MUST be inoperative or unknown when an odometer reading is required but none is given; MUST NOT be inoperative or unknown together with a reading",
      "carrier": "BG-32: BT-160 'Status des Zählerstands [vehicle.odometerReadingStatusCode]', BT-161 'replaced'",
      "anchors": "No EU status list; Directive 2014/45/EU Annex I item 7.11 (test-centre findings 'obviously inoperative', 'obviously manipulated') as related wording only; informative: ADF odometer status, RDW tellerstandoordeel"
    },
    {
      "key": "vehicle.odometerReadingDate",
      "tier": "recommended",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Date",
      "labelDe": "Datum des Zählerstands",
      "labelEn": "Date of odometer reading",
      "definition": "Date the odometer reading was taken, when it differs from the reference date (BT-72, else BT-2), for example at workshop intake or trade-in appraisal.",
      "valueFormat": "YYYY-MM-DD",
      "grammar": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$",
      "tokens": [],
      "codeList": "none",
      "conditionality": "SHOULD whenever the reading date differs from the reference date; SHOULD on service lines",
      "carrier": "BG-32: BT-160 'Datum des Zählerstands [vehicle.odometerReadingDate]', BT-161 '2026-10-20'",
      "anchors": "Directive 2014/45/EU Annex II item 4 (reading at the time of the test); COM(2025) 180 (proposal); informative: STAR OdometerReading/Date"
    },
    {
      "key": "vehicle.configuration",
      "tier": "recommended",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Text (implicit)",
      "labelDe": "Modellausführung",
      "labelEn": "Vehicle configuration",
      "definition": "Commercial configuration of the model (engine, gearbox, equipment line), for example '2.0 TDI Life'. Not the type-approval type, variant or version (vehicle.approvedType, approvedVariant, approvedVersion) and not the interior trim.",
      "valueFormat": "text, NFC, trimmed, no control or bidi characters, first character not = + - @, 1-100 characters",
      "grammar": "^(?![=+@\\s-])(?!.*\\s$)[^\\x00-\\x1F\\x7F\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]{1,100}$",
      "tokens": [],
      "codeList": "none",
      "conditionality": "SHOULD whenever known",
      "carrier": "BG-32: BT-160 'Modellausführung [vehicle.configuration]', BT-161 '2.0 TDI Life'",
      "anchors": "No EU legal term; schema.org vehicleConfiguration; COVESA VSS VehicleIdentification.VehicleConfiguration"
    },
    {
      "key": "vehicle.engineCapacityCm3",
      "tier": "recommended",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": "CMQ",
      "representationTerm": "Measure, unit cm3 (Rec 20 CMQ)",
      "labelDe": "Hubraum (cm3)",
      "labelEn": "Engine capacity (cm3)",
      "definition": "Capacity of the internal combustion engine in cubic centimetres as in registration field P.1 or CoC item 25. Omitted, never 0, for vehicles without a combustion engine.",
      "valueFormat": "integer ^[1-9][0-9]{0,5}$",
      "grammar": "^[1-9][0-9]{0,5}$",
      "tokens": [],
      "codeList": "unit fixed: cubic centimetre (Rec 20 CMQ)",
      "conditionality": "SHOULD for vehicles with a combustion engine; with newMeansOfTransportIndicator = true this key or maximumNetPowerKw SHOULD be present (more-than-48-cm3 threshold of Art. 2(2)(a)(i)), and MUST where national law makes it an invoice particular (DE)",
      "carrier": "BG-32: BT-160 'Hubraum (cm3) [vehicle.engineCapacityCm3]', BT-161 '1968'",
      "anchors": "Directive 1999/37/EC code P.1 'capacity (in cm3)'; CoC item 25 'Engine capacity' (DE 'Hubraum'); Directive 2006/112/EC Art. 2(2)(a)(i) (48 cubic centimetres threshold); national invoice particular: DE UStG §14a(4) with §1b(2); HU NAV engineCapacity; UN/ECE Rec 20 CMQ"
    },
    {
      "key": "vehicle.energySourceCode",
      "tier": "recommended",
      "status": "draft",
      "statutory": false,
      "repeatable": true,
      "unit": null,
      "representationTerm": "Code",
      "labelDe": "Kraftstoffart oder Energiequelle",
      "labelEn": "Fuel or power source",
      "definition": "Fuel or power source the vehicle is approved for, one row per source, in the order the registration document (P.3) or CoC (item 26) lists them. A blend or renewable variant used under an approved fuel type (E10, B7, paraffinic diesel) is reported as that fuel type. cng and lng: natural gas or biomethane stored compressed or liquefied (CoC 26 'NG - Biomethane'). electricity: electric energy from an external source (pure electric and off-vehicle charging vehicles). The hybrid architecture goes into vehicle.powertrainTypeCode; the fuel mode of CoC item 26.1 is not part of 1.0.",
      "valueFormat": "one token from VEHICLE-ENERGY-SOURCE 1.0 per row; repeatable; rows in source-document order",
      "grammar": "^(petrol|diesel|lpg|cng|lng|ethanol|biodiesel|hydrogen|electricity|other)$",
      "tokens": [
        "petrol",
        "diesel",
        "lpg",
        "cng",
        "lng",
        "ethanol",
        "biodiesel",
        "hydrogen",
        "electricity",
        "other"
      ],
      "codeList": "VEHICLE-ENERGY-SOURCE 1.0: petrol, diesel, lpg, cng, lng, ethanol, biodiesel, hydrogen, electricity, other",
      "conditionality": "SHOULD for motor vehicles on supply and trade-in",
      "carrier": "BG-32: BT-160 'Kraftstoffart oder Energiequelle [vehicle.energySourceCode]', BT-161 'diesel' (repeatable: one row per source, in source-document order)",
      "anchors": "Directive 1999/37/EC code P.3 'type of fuel or power source' (DE 'Kraftstoffart oder Energiequelle'); Reg. (EU) 2020/683 Annex VIII CoC items 23, 26 and 26.1; Reg. (EU) 2023/1804 (AFIR) Art. 2(4) 'alternative fuels' (electricity, hydrogen, CNG, LNG, LPG, biofuels, synthetic and paraffinic fuels), which replaced Directive 2014/94/EU; IVI 2.0 EnergySource (published mapping only); informative: schema.org fuelType"
    },
    {
      "key": "vehicle.powertrainTypeCode",
      "tier": "recommended",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Code",
      "labelDe": "Antriebsart",
      "labelEn": "Powertrain type",
      "definition": "Powertrain architecture by the class the approval assigns (CoC items 23 and 23.1). internal-combustion: internal combustion engine(s) only. hybrid-electric: NOVC-HEV. plug-in-hybrid-electric: OVC-HEV, including range-extender vehicles. pure-electric: PEV (CoC 23 'pure electric: yes'). fuel-cell: FCV, NOVC-FCHV and OVC-FCHV; the off-vehicle charging of an OVC-FCHV is not expressed in 1.0. other. Marketing terms such as 'mild hybrid' do not decide the token.",
      "valueFormat": "one token from VEHICLE-POWERTRAIN 1.0",
      "grammar": "^(internal-combustion|hybrid-electric|plug-in-hybrid-electric|pure-electric|fuel-cell|other)$",
      "tokens": [
        "internal-combustion",
        "hybrid-electric",
        "plug-in-hybrid-electric",
        "pure-electric",
        "fuel-cell",
        "other"
      ],
      "codeList": "VEHICLE-POWERTRAIN 1.0: internal-combustion, hybrid-electric, plug-in-hybrid-electric, pure-electric, fuel-cell, other",
      "conditionality": "SHOULD for hybrid, electric and fuel-cell vehicles; MAY otherwise",
      "carrier": "BG-32: BT-160 'Antriebsart [vehicle.powertrainTypeCode]', BT-161 'plug-in-hybrid-electric'",
      "anchors": "Reg. (EU) 2017/1151 Annex XXI points 3.3.15-3.3.20 (NOVC-HEV, OVC-HEV, PEV, FCV, FCHV) and 3.4.1 'powertrain'; Reg. (EU) 2020/683 Annex VIII CoC items 23 and 23.1; informative: COVESA VSS Powertrain.Type"
    },
    {
      "key": "vehicle.categoryCode",
      "tier": "recommended",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Code",
      "labelDe": "Fahrzeugklasse",
      "labelEn": "Vehicle category",
      "definition": "EU vehicle category as in registration field J or CoC item 0.4, with the official suffixes G (off-road, M and N only) and S (special purpose, incomplete). Not a body style or listing class, and not the VAT category (BT-151). Omitted when the vehicle has no EU category or the document does not print J.",
      "valueFormat": "^((M[1-3]|N[1-3])G?S?|O[1-4]S?|L(1e(-[AB])?|2e(-[PU])?|3e(-A[123][ET]?)?|4e|5e(-[AB])?|6e(-A|-B[PU]?)?|7e(-(A[12]?|B[12]?|C[PU]?))?)|[TC]([1-4](\\.[1-3])?[ab]?)?|T5|R([1-4][ab]?)?|S([12][ab]?)?)$ (T5: legacy category of Directive 2003/37/EC)",
      "grammar": "^((M[1-3]|N[1-3])G?S?|O[1-4]S?|L(1e(-[AB])?|2e(-[PU])?|3e(-A[123][ET]?)?|4e|5e(-[AB])?|6e(-A|-B[PU]?)?|7e(-(A[12]?|B[12]?|C[PU]?))?)|[TC]([1-4](\\.[1-3])?[ab]?)?|T5|R([1-4][ab]?)?|S([12][ab]?)?)$",
      "tokens": [],
      "codeList": "EU vehicle categories: Reg. (EU) 2018/858 Art. 4; Reg. (EU) 168/2013 Art. 4; Reg. (EU) 167/2013 Art. 4",
      "conditionality": "SHOULD; especially on invoices to public buyers (Clean Vehicles Directive reporting)",
      "carrier": "BG-32: BT-160 'Fahrzeugklasse [vehicle.categoryCode]', BT-161 'M1'. In a CIUS XRechnung CVD invoice the CVD BT-158 'CVD' and the 'cva' row stay; vehicle.categoryCode then repeats the CVD class",
      "anchors": "Directive 1999/37/EC code J 'vehicle category' (DE 'Fahrzeugklasse'); CoC item 0.4; Reg. (EU) 2018/858 Art. 4 and Annex I Part A 2.1-2.3 (G and S); Reg. (EU) 168/2013 Art. 4 (L); Reg. (EU) 167/2013 Art. 4 (T, C, R, S); KoSIT CIUS XRechnung CVD v0.9"
    },
    {
      "key": "vehicle.basicColourCode",
      "tier": "recommended",
      "status": "draft",
      "statutory": false,
      "repeatable": true,
      "unit": null,
      "representationTerm": "Code",
      "labelDe": "Grundfarbe",
      "labelEn": "Basic colour",
      "definition": "Basic colour of the vehicle as printed in CoC item 40 or registration field R, one row per basic colour for multi-coloured vehicles. National register colours outside the ten (for example beige or cream) are mapped by the registry's published mapping table. The manufacturer's paint name or code is not part of 1.0.",
      "valueFormat": "one token from VEHICLE-COLOUR 1.0 per row; repeatable",
      "grammar": "^(white|yellow|orange|red|violet|blue|green|grey|brown|black|other)$",
      "tokens": [
        "white",
        "yellow",
        "orange",
        "red",
        "violet",
        "blue",
        "green",
        "grey",
        "brown",
        "black",
        "other"
      ],
      "codeList": "VEHICLE-COLOUR 1.0: white, yellow, orange, red, violet, blue, green, grey, brown, black, other",
      "conditionality": "SHOULD on supply and trade-in",
      "carrier": "BG-32: BT-160 'Grundfarbe [vehicle.basicColourCode]', BT-161 'grey' (repeatable: one row per basic colour)",
      "anchors": "Reg. (EU) 2020/683 Annex VIII CoC item 40 and footnote 114 ('Indicate only the basic colour(s): white, yellow, orange, red, violet, blue, green, grey, brown or black'); Directive 1999/37/EC code R 'colour of the vehicle'; UN/CEFACT vocabulary colourCode"
    },
    {
      "key": "vehicle.nextRoadworthinessTestDate",
      "tier": "recommended",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Date",
      "labelDe": "Nächste technische Prüfung",
      "labelEn": "Next roadworthiness test",
      "definition": "Date by which the next periodic roadworthiness test is due: the date of the next test or the expiry date of the current certificate, as shown on the registration document (code X), the last roadworthiness certificate or the inspection mark. A month value (YYYY-MM) means due by the last day of that month.",
      "valueFormat": "YYYY-MM-DD or YYYY-MM",
      "grammar": "^([0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])|[0-9]{4}-(0[1-9]|1[0-2]))$",
      "tokens": [],
      "codeList": "none",
      "conditionality": "SHOULD on supply of used vehicles and on service documents that include a periodic test",
      "carrier": "BG-32: BT-160 'Nächste technische Prüfung [vehicle.nextRoadworthinessTestDate]', BT-161 '2027-03'",
      "anchors": "Directive 1999/37/EC code X ('proof of having passed the roadworthiness test, date of next roadworthiness test or expiry of current certificate'); Directive 2014/45/EU Art. 8 and Annex II item 8 ('date of the next roadworthiness test or date of expiry of the current certificate'); COM(2025) 179 Annex I (proposal)"
    },
    {
      "key": "vehicle.usableBatteryEnergyKwh",
      "tier": "recommended",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": "KWH",
      "representationTerm": "Measure, unit kWh (Rec 20 KWH)",
      "labelDe": "Nutzbare Batterieenergie (kWh)",
      "labelEn": "Usable battery energy (kWh)",
      "definition": "Certified usable energy of the battery (NR-25) when new, as declared by the manufacturer (often called net capacity). Not the state of health.",
      "valueFormat": "decimal ^[0-9]{1,3}([.][0-9]{1,2})?$",
      "grammar": "^[0-9]{1,3}([.][0-9]{1,2})?$",
      "tokens": [],
      "codeList": "unit fixed: kilowatt hour (Rec 20 KWH)",
      "conditionality": "SHOULD for pure-electric and plug-in-hybrid-electric vehicles",
      "carrier": "BG-32: BT-160 'Nutzbare Batterieenergie (kWh) [vehicle.usableBatteryEnergyKwh]', BT-161 '64.5'",
      "anchors": "UN GTR No. 22 'usable battery energy' (certified UBE); Reg. (EU) 2017/1151 Annex XXI (usable REESS energy); Reg. (EU) 2023/1542 Annex XIII uses 'rated capacity' in Ah (hence not 'capacity'); informative: COVESA VSS TractionBattery.NetCapacity"
    },
    {
      "key": "vehicle.typeApprovalNumber",
      "tier": "recommended",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Number",
      "labelDe": "Typgenehmigungsnummer",
      "labelEn": "Type-approval number",
      "definition": "Approval number as printed in registration field K, including the extension number: the EU whole-vehicle type-approval number, or a national or individual approval number, which is accepted as printed and not validated.",
      "valueFormat": "text, NFC, trimmed, no control or bidi characters, first character not = + - @, 1-60 characters as printed (e.g. e1*2018/858*00123*01)",
      "grammar": "^(?![=+@\\s-])(?!.*\\s$)[^\\x00-\\x1F\\x7F\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]{1,60}$",
      "tokens": [],
      "codeList": "none",
      "conditionality": "SHOULD on supply of new vehicles; MAY otherwise",
      "carrier": "BG-32: BT-160 'Typgenehmigungsnummer [vehicle.typeApprovalNumber]', BT-161 'e1*2018/858*00123*01'",
      "anchors": "Directive 1999/37/EC code K 'type-approval number (if available)'; CoC certificate number; IVI 2.0 TypeApprovalNumber"
    },
    {
      "key": "vehicle.de.hsn",
      "tier": "optional",
      "status": "provisional",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Number (implicit in the national abbreviation hsn)",
      "labelDe": "Herstellerschlüsselnummer (HSN)",
      "labelEn": "German manufacturer key number (HSN)",
      "definition": "German KBA manufacturer key number, national field 2.1 of registration certificate Part I; exists only for vehicles with a German registration document. Provisional until checked against the KBA key directory; deviations are warnings.",
      "valueFormat": "^[0-9A-Z]{4}$ (provisional; deviations are warnings)",
      "grammar": "^[0-9A-Z]{4}$",
      "tokens": [],
      "codeList": "none",
      "conditionality": "SHOULD for vehicles with a German registration certificate; otherwise omit",
      "carrier": "BG-32: BT-160 'Herstellerschlüsselnummer (HSN) [vehicle.de.hsn]', BT-161 '8004'",
      "anchors": "German registration certificate Part I field 2.1 (national code allowed by Directive 1999/37/EC Annex I II.7); KBA key directory (format unverified)"
    },
    {
      "key": "vehicle.de.tsn",
      "tier": "optional",
      "status": "provisional",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Number (implicit in the national abbreviation tsn)",
      "labelDe": "Typschlüsselnummer (TSN)",
      "labelEn": "German type key number (TSN)",
      "definition": "German KBA type key: the first three characters of national field 2.2 of registration certificate Part I, without the check characters. Not the type-approval number (field K). Provisional until checked against the KBA key directory.",
      "valueFormat": "^[0-9A-Z]{3}$ (provisional; deviations are warnings)",
      "grammar": "^[0-9A-Z]{3}$",
      "tokens": [],
      "codeList": "none",
      "conditionality": "SHOULD together with vehicle.de.hsn",
      "carrier": "BG-32: BT-160 'Typschlüsselnummer (TSN) [vehicle.de.tsn]', BT-161 'BHR'. Never BT-158 with UNTDID 7143 'TSN' (Taxonomic Serial Number)",
      "anchors": "German registration certificate Part I field 2.2 (national code allowed by Directive 1999/37/EC Annex I II.7); KBA key directory (format unverified)"
    },
    {
      "key": "vehicle.exhaustEmissionLevelCode",
      "tier": "optional",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Code",
      "labelDe": "Abgasnorm",
      "labelEn": "Exhaust emission level",
      "definition": "Exhaust emission level of the type approval as printed in CoC item 47 or registration field V.9: the emission standard designation, for light-duty vehicles the 'Emission standard' names of Reg. (EU) 2017/1151 Annex I Appendix 6 (for example Euro 6d-ISC-FCM), lower-cased and joined with hyphens. Light-duty and L-category levels use Arabic numerals (euro-6d), heavy-duty levels Roman numerals (euro-vi-e), as their instruments do; receivers compare strings and do not equate euro-6 with euro-vi. The Appendix 6 character code (for example AX) is not sent. Designators: temp (temporary), evap (evaporative emissions), isc (in-service conformity), fcm (fuel consumption monitoring), bis (second step), plus (Euro 5+ of L-category).",
      "valueFormat": "^(euro-([1-7][a-z0-9]*(-[a-z0-9]+)*|(i|ii|iii|iv|v|vi)(-[a-e])?)|stage-(i|ii|iiia|iiib|iv|v)|other)$",
      "grammar": "^(euro-([1-7][a-z0-9]*(-[a-z0-9]+)*|(i|ii|iii|iv|v|vi)(-[a-e])?)|stage-(i|ii|iiia|iiib|iv|v)|other)$",
      "tokens": [],
      "codeList": "VEHICLE-EMISSION-LEVEL 1.0 (grammar over the Reg. (EU) 2017/1151 Annex I Appendix 6 names, not an enumeration)",
      "conditionality": "MAY; useful for used vehicles and fleets",
      "carrier": "BG-32: BT-160 'Abgasnorm [vehicle.exhaustEmissionLevelCode]', BT-161 'euro-4'",
      "anchors": "Reg. (EU) 2020/683 Annex VIII CoC item 47 and footnote 116 (DE 'Abgasnorm'); Directive 1999/37/EC code V.9; Reg. (EU) 2017/1151 Annex I Appendix 6 Table 1 ('Emission standard'); Reg. (EC) 715/2007; Reg. (EC) 595/2009 (heavy duty); Reg. (EU) 168/2013 (L-category); Reg. (EU) 2024/1257 (Euro 7); Reg. (EU) 2016/1628 (stages); IVI 2.0 ExhaustEmissionLevel"
    },
    {
      "key": "vehicle.wltpCo2EmissionsGPerKm",
      "tier": "optional",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Measure, unit g/km (no Rec 20 code)",
      "labelDe": "CO2-Emissionen WLTP (g/km)",
      "labelEn": "WLTP CO2 emissions (g/km)",
      "definition": "CO2 emissions in g/km determined under the WLTP (Reg. (EU) 2017/1151), as printed in CoC item 49 or registration field V.7: the combined value, or the weighted combined value for OVC-HEV. A type-approval value, not real-world emissions. NEDC values go into vehicle.nedcCo2EmissionsGPerKm.",
      "valueFormat": "integer ^(0|[1-9][0-9]{0,3})$",
      "grammar": "^(0|[1-9][0-9]{0,3})$",
      "tokens": [],
      "codeList": "unit fixed: g/km (no Rec 20 code, so never BT-212); test procedure fixed: WLTP",
      "conditionality": "MAY; useful for M1 and N1 fleets",
      "carrier": "BG-32: BT-160 'CO2-Emissionen WLTP (g/km) [vehicle.wltpCo2EmissionsGPerKm]', BT-161 '132'",
      "anchors": "Directive 1999/37/EC code V.7 'CO2 (in g/km)'; Reg. (EU) 2020/683 Annex VIII CoC item 49 (WLTP values; DE 'CO2-Emissionen'); Reg. (EU) 2017/1151 Annex XXI; informative: schema.org emissionsCO2"
    },
    {
      "key": "vehicle.nedcCo2EmissionsGPerKm",
      "tier": "optional",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Measure, unit g/km (no Rec 20 code)",
      "labelDe": "CO2-Emissionen NEFZ (g/km)",
      "labelEn": "NEDC CO2 emissions (g/km)",
      "definition": "CO2 emissions in g/km determined under the NEDC (UN Regulation No 101), including NEDC values obtained by correlation from WLTP results, as printed in CoC item 49 or registration field V.7: the combined value, or the weighted combined value for OVC-HEV. A type-approval value, not real-world emissions.",
      "valueFormat": "integer ^(0|[1-9][0-9]{0,3})$",
      "grammar": "^(0|[1-9][0-9]{0,3})$",
      "tokens": [],
      "codeList": "unit fixed: g/km (no Rec 20 code, so never BT-212); test procedure fixed: NEDC",
      "conditionality": "MAY; only for vehicles whose CoC or registration document gives an NEDC value",
      "carrier": "BG-32: BT-160 'CO2-Emissionen NEFZ (g/km) [vehicle.nedcCo2EmissionsGPerKm]', BT-161 '128'",
      "anchors": "Directive 1999/37/EC code V.7; Reg. (EU) 2020/683 Annex VIII CoC item 49 (NEDC block; DE 'NEFZ'); UN Regulation No 101; Reg. (EU) 2017/1152 and 2017/1153 (correlated NEDC values)"
    },
    {
      "key": "vehicle.bodyworkCode",
      "tier": "optional",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Code",
      "labelDe": "Code des Aufbaus",
      "labelEn": "Code for bodywork",
      "definition": "EU code for bodywork (CoC item 38): AA-AG passenger cars, BA-BE and BX goods vehicles, CA-CJ and CX buses, DA, DB, DC and DE trailers, SA-SH and SJ special purpose vehicles; with two supplementary digits where Appendix 2 applies.",
      "valueFormat": "^(A[A-G]|B[A-E]|BX|C[A-J]|CX|D[ABCE]|S[A-HJ])([0-9]{2})?$",
      "grammar": "^(A[A-G]|B[A-E]|BX|C[A-J]|CX|D[ABCE]|S[A-HJ])([0-9]{2})?$",
      "tokens": [],
      "codeList": "EU bodywork codes: Reg. (EU) 2018/858 Annex I Part C and Appendix 2",
      "conditionality": "MAY; useful for vans, trucks, buses and trailers",
      "carrier": "BG-32: BT-160 'Code des Aufbaus [vehicle.bodyworkCode]', BT-161 'AA'",
      "anchors": "Reg. (EU) 2018/858 Annex I Part C and Appendix 2, Part A point 5; CoC item 38 'Code for bodywork' (DE 'Code des Aufbaus'); COM(2025) 179 code J.1 (proposal)"
    },
    {
      "key": "vehicle.seatingPositionCount",
      "tier": "optional",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Count",
      "labelDe": "Anzahl der Sitzplätze",
      "labelEn": "Number of seating positions",
      "definition": "Number of seating positions including the driver, as in CoC item 42 (excluding seats for use only when the vehicle is stationary and wheelchair positions, footnote 115). Where only the registration document is available, its field S.1 (seats including the driver's seat) is used; on conflict the CoC value governs. Standing places (S.2) are not part of 1.0.",
      "valueFormat": "integer ^[1-9][0-9]{0,2}$",
      "grammar": "^[1-9][0-9]{0,2}$",
      "tokens": [],
      "codeList": "none",
      "conditionality": "MAY",
      "carrier": "BG-32: BT-160 'Anzahl der Sitzplätze [vehicle.seatingPositionCount]', BT-161 '5'",
      "anchors": "Reg. (EU) 2018/858 Annex I Part A 1.1 'seating position'; CoC item 42 and footnote 115 (DE 'Anzahl der Sitzplätze'); Directive 1999/37/EC code S.1"
    },
    {
      "key": "vehicle.modelYear",
      "tier": "optional",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Year",
      "labelDe": "Modelljahr",
      "labelEn": "Model year",
      "definition": "Model year designated by the manufacturer: a trade designation with no EU legal definition, which can differ from the year of manufacture. Where the manufacturer encodes a model year in the VIN under ISO 3779:2009 section 5.4, the two agree.",
      "valueFormat": "^(19|20)[0-9]{2}$",
      "grammar": "^(19|20)[0-9]{2}$",
      "tokens": [],
      "codeList": "none",
      "conditionality": "MAY",
      "carrier": "BG-32: BT-160 'Modelljahr [vehicle.modelYear]', BT-161 '2022'",
      "anchors": "ISO 3779:2009 section 5.4 (model year in the vehicle descriptor section, referenced in Reg. (EU) 2020/683 Annex I item 9.17.4.2); informative: STAR ModelYear, NHTSA vPIC Model Year, COVESA VSS VehicleIdentification.Year"
    },
    {
      "key": "vehicle.manufactureDate",
      "tier": "optional",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Date",
      "labelDe": "Herstellungsdatum",
      "labelEn": "Date of manufacture",
      "definition": "Date on which manufacture of the vehicle was finalised in accordance with its approval, as in CoC item 0.11.",
      "valueFormat": "YYYY-MM-DD, YYYY-MM or YYYY (reduced-precision date)",
      "grammar": "^([0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])|[0-9]{4}-(0[1-9]|1[0-2])|[0-9]{4})$",
      "tokens": [],
      "codeList": "none",
      "conditionality": "MAY; SHOULD on manufacturer and importer invoices for new vehicles",
      "carrier": "BG-32: BT-160 'Herstellungsdatum [vehicle.manufactureDate]', BT-161 '2022-01-14'",
      "anchors": "Reg. (EU) 2018/858 Art. 3(58) 'date of manufacture of the vehicle'; CoC item 0.11 (DE 'Herstellungsdatum des Fahrzeugs'); UN/EDIFACT 2005 code 94; PL KSeF P_22BRP (year)"
    },
    {
      "key": "vehicle.wltpElectricRangeKm",
      "tier": "optional",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": "KMT",
      "representationTerm": "Measure, unit km (Rec 20 KMT)",
      "labelDe": "Elektrische Reichweite WLTP (km)",
      "labelEn": "WLTP electric range (km)",
      "definition": "Electric range determined under the WLTP (Reg. (EU) 2017/1151 Annex XXI), combined: the pure electric range (PER) for pure electric vehicles, the all-electric range (AER) for OVC-HEV. Not the equivalent all-electric range (EAER). A type-approval value, not a promise of real-world range.",
      "valueFormat": "integer ^[1-9][0-9]{0,3}$",
      "grammar": "^[1-9][0-9]{0,3}$",
      "tokens": [],
      "codeList": "unit fixed: kilometre (Rec 20 KMT)",
      "conditionality": "MAY for pure-electric and plug-in-hybrid-electric vehicles",
      "carrier": "BG-32: BT-160 'Elektrische Reichweite WLTP (km) [vehicle.wltpElectricRangeKm]', BT-161 '420'",
      "anchors": "Reg. (EU) 2020/683 Annex VIII CoC item 49 ('Electric range of pure electric vehicles', 'Electric range of OVC hybrid electric vehicles'; DE 'Elektrische Reichweite'); Reg. (EU) 2017/1151 Annex XXI (PER, AER, EAER); UN/ECE Rec 20 KMT"
    },
    {
      "key": "vehicle.batteryStateOfHealthPercent",
      "tier": "optional",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": "P1",
      "representationTerm": "Percent",
      "labelDe": "Alterungszustand (%)",
      "labelEn": "State of health (%)",
      "definition": "State of health of the battery (NR-25) in percent of its initial condition (Reg. (EU) 2023/1542 Art. 3(28)), as determined on vehicle.batteryStateOfHealthDate by the method in vehicle.batteryStateOfHealthMethodCode; with the on-board method, the state of certified energy (SOCE, Annex VII Part A). A figure produced by the stated method, not a guarantee of capacity or lifetime.",
      "valueFormat": "decimal ^(100([.]0)?|[1-9]?[0-9]([.][0-9])?)$",
      "grammar": "^(100([.]0)?|[1-9]?[0-9]([.][0-9])?)$",
      "tokens": [],
      "codeList": "unit fixed: percent (Rec 20 P1)",
      "conditionality": "MAY for used pure-electric and plug-in-hybrid-electric vehicles; requires vehicle.batteryStateOfHealthDate and vehicle.batteryStateOfHealthMethodCode",
      "carrier": "BG-32: BT-160 'Alterungszustand (%) [vehicle.batteryStateOfHealthPercent]', BT-161 '91.5'",
      "anchors": "Reg. (EU) 2023/1542 Art. 3(14) 'electric vehicle battery', Art. 3(28) 'state of health' (DE 'Alterungszustand'), Art. 14 and Annex VII Part A (SOCE); UN GTR No. 22; UN/ECE Rec 20 P1; informative: COVESA VSS TractionBattery.StateOfHealth"
    },
    {
      "key": "vehicle.batteryStateOfHealthDate",
      "tier": "optional",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Date",
      "labelDe": "Alterungszustand ermittelt am",
      "labelEn": "State of health date",
      "definition": "Date of the determination stated in vehicle.batteryStateOfHealthPercent: the read-out date for the on-board method, otherwise the test date.",
      "valueFormat": "YYYY-MM-DD",
      "grammar": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$",
      "tokens": [],
      "codeList": "none",
      "conditionality": "MUST when vehicle.batteryStateOfHealthPercent is present",
      "carrier": "BG-32: BT-160 'Alterungszustand ermittelt am [vehicle.batteryStateOfHealthDate]', BT-161 '2026-10-20'",
      "anchors": "Reg. (EU) 2023/1542 Art. 3(28) (term); no legal term exists for the date"
    },
    {
      "key": "vehicle.batteryStateOfHealthMethodCode",
      "tier": "optional",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Code",
      "labelDe": "Ermittlungsmethode",
      "labelEn": "State of health method",
      "definition": "How the state of health in vehicle.batteryStateOfHealthPercent was determined. on-board: read from the vehicle's battery management system (the data of Reg. (EU) 2023/1542 Art. 14, for example the SOCE). manufacturer-test: determined with the manufacturer's diagnostic procedure. independent-test: determined with the test procedure of a party other than the manufacturer. other.",
      "valueFormat": "one token from VEHICLE-STATE-OF-HEALTH-METHOD 1.0",
      "grammar": "^(on-board|manufacturer-test|independent-test|other)$",
      "tokens": [
        "on-board",
        "manufacturer-test",
        "independent-test",
        "other"
      ],
      "codeList": "VEHICLE-STATE-OF-HEALTH-METHOD 1.0: on-board, manufacturer-test, independent-test, other",
      "conditionality": "MUST when vehicle.batteryStateOfHealthPercent is present",
      "carrier": "BG-32: BT-160 'Ermittlungsmethode [vehicle.batteryStateOfHealthMethodCode]', BT-161 'on-board'",
      "anchors": "Reg. (EU) 2023/1542 Art. 3 ('battery management system'), Art. 14 (read-only access) and Annex VII Part A; UN GTR No. 22 (on-board battery durability monitor)"
    },
    {
      "key": "vehicle.batteryPassportUrl",
      "tier": "optional",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Url",
      "labelDe": "Batteriepass-Link",
      "labelEn": "Battery passport link",
      "definition": "HTTPS link to the battery passport of the battery (NR-25), that is the content of the passport QR code. A link only; no passport content is copied into the invoice.",
      "valueFormat": "^https://[^\\s]{1,240}$",
      "grammar": "^https://[^\\s]{1,240}$",
      "tokens": [],
      "codeList": "none",
      "conditionality": "MAY for vehicles whose battery has a passport (from 2027-02-18)",
      "carrier": "BG-32: BT-160 'Batteriepass-Link [vehicle.batteryPassportUrl]', BT-161 'https://passport.example/b/0001'",
      "anchors": "Reg. (EU) 2023/1542 Art. 77; informative: schema.org hasDigitalProductPassport"
    },
    {
      "key": "vehicle.maximumMassKg",
      "tier": "optional",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": "KGM",
      "representationTerm": "Measure, unit kg (Rec 20 KGM)",
      "labelDe": "Technisch zulässige Gesamtmasse (kg)",
      "labelEn": "Maximum mass (kg)",
      "definition": "Technically permissible maximum laden mass in kg ('maximum mass', Reg. (EU) 2018/858 Annex I Part A 1.4), as in registration field F.1 or CoC item 16.1; for motorcycles, where F.1 is not printed, the CoC value. Not the permissible maximum laden mass in the state of registration (F.2, vehicle.registeredMaximumMassKg), the mass of the whole combination (F.3) or the mass in service (G).",
      "valueFormat": "integer ^[1-9][0-9]{0,5}$",
      "grammar": "^[1-9][0-9]{0,5}$",
      "tokens": [],
      "codeList": "unit fixed: kilogram (Rec 20 KGM)",
      "conditionality": "MAY; SHOULD for categories N, O, M2, M3 and T",
      "carrier": "BG-32: BT-160 'Technisch zulässige Gesamtmasse (kg) [vehicle.maximumMassKg]', BT-161 '2100'",
      "anchors": "Reg. (EU) 2018/858 Annex I Part A 1.4 ('Maximum mass' means the 'technically permissible maximum laden mass'; DE 'Gesamtmasse'); Directive 1999/37/EC code F.1 (DE 'Technisch zulässige Gesamtmasse'); CoC item 16.1; UN/ECE Rec 20 KGM"
    },
    {
      "key": "vehicle.registeredMaximumMassKg",
      "tier": "optional",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": "KGM",
      "representationTerm": "Measure, unit kg (Rec 20 KGM)",
      "labelDe": "Zulässige Gesamtmasse (kg)",
      "labelEn": "Registered maximum mass (kg)",
      "definition": "Maximum permissible laden mass of the vehicle in service in the Member State of registration, in kg, as in registration field F.2. It can be lower than the technical maximum mass (vehicle.maximumMassKg) when a vehicle is registered below it; national rules commonly refer to this mass.",
      "valueFormat": "integer ^[1-9][0-9]{0,5}$",
      "grammar": "^[1-9][0-9]{0,5}$",
      "tokens": [],
      "codeList": "unit fixed: kilogram (Rec 20 KGM)",
      "conditionality": "MAY; SHOULD for categories M2, M3, N2, N3, O3 and O4 when F.2 differs from F.1",
      "carrier": "BG-32: BT-160 'Zulässige Gesamtmasse (kg) [vehicle.registeredMaximumMassKg]', BT-161 '1800'",
      "anchors": "Directive 1999/37/EC Annex I II.6 code F.2 'maximum permissible laden mass of the vehicle in service in the Member State of registration' (DE 'Im Zulassungsmitgliedstaat zulässige Gesamtmasse des in Betrieb befindlichen Fahrzeugs'); UN/ECE Rec 20 KGM"
    },
    {
      "key": "vehicle.catalogueId",
      "tier": "optional",
      "status": "draft",
      "statutory": false,
      "repeatable": true,
      "unit": null,
      "representationTerm": "Id",
      "labelDe": "Katalogkennung",
      "labelEn": "Catalogue identifier",
      "definition": "Reference into a vehicle data catalogue as scheme:id; identifiers only, never catalogue content; one row per scheme. Scheme 'manufacturer' carries the make's own model or sales code for the vehicle.",
      "valueFormat": "scheme:id; scheme ^[a-z][a-z0-9-]{1,19}$ from the VEHICLE-CATALOGUE-SCHEME register, id ^[A-Za-z0-9._-]{1,40}$; repeatable",
      "grammar": "^[a-z][a-z0-9-]{1,19}:[A-Za-z0-9._][A-Za-z0-9._-]{0,39}$",
      "tokens": [],
      "codeList": "VEHICLE-CATALOGUE-SCHEME 1.0 (open register): manufacturer",
      "conditionality": "MAY; scheme 'manufacturer' is open to every issuer; other schemes only after their owner has cleared printing identifiers on invoices",
      "carrier": "BG-32: BT-160 'Katalogkennung [vehicle.catalogueId]', BT-161 'manufacturer:5NA1X2' (repeatable: one row per scheme)",
      "anchors": "No EU term; EN 16931 identifier-with-scheme pattern (BT-157 with BT-157-1, BT-158)"
    },
    {
      "key": "vehicle.approvedType",
      "tier": "optional",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Name (implicit)",
      "labelDe": "Typ (Typgenehmigung)",
      "labelEn": "Type (type-approval)",
      "definition": "Type designation of the approval, as in CoC item 0.2 or registration field D.2: the first part of type-variant-version and the EU-wide type identity. Sent only when the source document shows the parts separately (the CoC always does); an undivided D.2 string is not split by guesswork.",
      "valueFormat": "text, NFC, trimmed, no control or bidi characters, first character not = + - @, 1-25 characters as printed",
      "grammar": "^(?![=+@\\s-])(?!.*\\s$)[^\\x00-\\x1F\\x7F\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]{1,25}$",
      "tokens": [],
      "codeList": "none",
      "conditionality": "MAY; SHOULD on supply of new vehicles by manufacturers and importers",
      "carrier": "BG-32: BT-160 'Typ (Typgenehmigung) [vehicle.approvedType]', BT-161 'TYP-X'",
      "anchors": "Reg. (EU) 2018/858 Art. 3(32) and Annex I Part B; Directive 1999/37/EC code D.2 'type, variant (if available), version (if available)'; CoC item 0.2; IVI 2.0 Type"
    },
    {
      "key": "vehicle.approvedVariant",
      "tier": "optional",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Name (implicit)",
      "labelDe": "Variante (Typgenehmigung)",
      "labelEn": "Variant (type-approval)",
      "definition": "Variant designation within the approved type, as in CoC item 0.2 or registration field D.2; same rule for undivided strings as vehicle.approvedType.",
      "valueFormat": "text, NFC, trimmed, no control or bidi characters, first character not = + - @, 1-25 characters as printed",
      "grammar": "^(?![=+@\\s-])(?!.*\\s$)[^\\x00-\\x1F\\x7F\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]{1,25}$",
      "tokens": [],
      "codeList": "none",
      "conditionality": "Same as vehicle.approvedType",
      "carrier": "BG-32: BT-160 'Variante (Typgenehmigung) [vehicle.approvedVariant]', BT-161 'V01'",
      "anchors": "Reg. (EU) 2018/858 Annex I Part B 1.2; Directive 1999/37/EC code D.2; CoC item 0.2; IVI 2.0 Variant"
    },
    {
      "key": "vehicle.approvedVersion",
      "tier": "optional",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Name (implicit)",
      "labelDe": "Version (Typgenehmigung)",
      "labelEn": "Version (type-approval)",
      "definition": "Version designation within the approved variant, as in CoC item 0.2 or registration field D.2; same rule for undivided strings as vehicle.approvedType.",
      "valueFormat": "text, NFC, trimmed, no control or bidi characters, first character not = + - @, 1-35 characters as printed",
      "grammar": "^(?![=+@\\s-])(?!.*\\s$)[^\\x00-\\x1F\\x7F\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]{1,35}$",
      "tokens": [],
      "codeList": "none",
      "conditionality": "Same as vehicle.approvedType",
      "carrier": "BG-32: BT-160 'Version (Typgenehmigung) [vehicle.approvedVersion]', BT-161 'N1'",
      "anchors": "Reg. (EU) 2018/858 Annex I Part B 1.3; Directive 1999/37/EC code D.2; CoC item 0.2; IVI 2.0 Version"
    },
    {
      "key": "vehicle.axleCount",
      "tier": "optional",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": null,
      "representationTerm": "Count",
      "labelDe": "Anzahl der Achsen",
      "labelEn": "Number of axles",
      "definition": "Number of axles as in registration field L or CoC item 1.",
      "valueFormat": "integer ^[1-9]$",
      "grammar": "^[1-9]$",
      "tokens": [],
      "codeList": "none",
      "conditionality": "MAY; SHOULD for categories M2, M3, N, O, T and R",
      "carrier": "BG-32: BT-160 'Anzahl der Achsen [vehicle.axleCount]', BT-161 '2'",
      "anchors": "Directive 1999/37/EC code L 'number of axles'; CoC item 1 'Number of axles'"
    },
    {
      "key": "vehicle.cumulativeOperatingHours",
      "tier": "optional",
      "status": "draft",
      "statutory": false,
      "repeatable": false,
      "unit": "HUR",
      "representationTerm": "Measure, unit h (Rec 20 HUR)",
      "labelDe": "Betriebsstundenstand",
      "labelEn": "Cumulative operating hours",
      "definition": "Hour-meter reading in whole hours (lifetime operating time) of a vehicle or non-road mobile machine whose use is measured in hours, at the reference date (BT-72, else BT-2), or on vehicle.odometerReadingDate when the line also carries an odometer reading.",
      "valueFormat": "integer ^(0|[1-9][0-9]{0,6})$",
      "grammar": "^(0|[1-9][0-9]{0,6})$",
      "tokens": [],
      "codeList": "unit fixed: hour (Rec 20 HUR)",
      "conditionality": "MAY; SHOULD on supply and service of categories T, C, R and S and of non-road mobile machinery",
      "carrier": "BG-32: BT-160 'Betriebsstundenstand [vehicle.cumulativeOperatingHours]', BT-161 '4210'",
      "anchors": "ISO 15143-3 (AEMP 2.0) element CumulativeOperatingHours (name seen in implementer documentation only); Reg. (EU) 2016/1628 Art. 3 'non-road mobile machinery'; UN/ECE Rec 20 HUR"
    }
  ],
  "reserved": [
    {
      "key": "vehicle.previousHolderCount",
      "labelEn": "Number of previous holders",
      "labelDe": "Anzahl der Vorhalter"
    },
    {
      "key": "vehicle.knownAccidentDamageIndicator",
      "labelEn": "Known accident damage",
      "labelDe": "Bekannter Unfallschaden"
    },
    {
      "key": "vehicle.knownUnrepairedDamageIndicator",
      "labelEn": "Known unrepaired damage",
      "labelDe": "Unreparierter Schaden"
    }
  ],
  "tokenLists": [
    {
      "list": "VEHICLE-ROLE 1.0 (vehicle.roleCode)",
      "tokens": [
        "supply",
        "trade-in",
        "service",
        "rental",
        "lease",
        "agency",
        "transport",
        "other"
      ],
      "source": "Registry-owned; there is no EU list. The rental/lease boundary of 30 days follows Directive 2006/112/EC Art. 56(3) as a boundary only; the tokens state no VAT treatment. Informative alignment: schema.org businessFunction."
    },
    {
      "list": "VEHICLE-CONDITION 1.0 (vehicle.conditionCode), partition without other",
      "tokens": [
        "new",
        "used"
      ],
      "source": "Registry-owned partition of all vehicles by observable facts (registration before the supply, use before the supply). Related legal notions, documented but not equal: Directive 1999/94/EC Art. 2(2) 'new passenger car', Directive 2006/112/EC Art. 2(2)(b) and Art. 311(1)(1). The draft tokens pre-registered and demonstrator are withdrawn; prior use is deferred under the reserved name vehicle.priorUseCode."
    },
    {
      "list": "VEHICLE-ODOMETER-STATUS 1.0 (vehicle.odometerReadingStatusCode)",
      "tokens": [
        "displayed",
        "replaced",
        "rolled-over",
        "inoperative",
        "unknown",
        "other"
      ],
      "source": "Registry-owned issuer statements. Related wording only: Directive 2014/45/EU Annex I item 7.11 (test-centre findings); informative parallels: ADF odometer status, RDW tellerstandoordeel. 'manipulated' is reserved for testing bodies and not issued in 1.0."
    },
    {
      "list": "VEHICLE-ENERGY-SOURCE 1.0 (vehicle.energySourceCode, repeatable)",
      "tokens": [
        "petrol",
        "diesel",
        "lpg",
        "cng",
        "lng",
        "ethanol",
        "biodiesel",
        "hydrogen",
        "electricity",
        "other"
      ],
      "source": "Directive 1999/37/EC code P.3; CoC item 26 ('Diesel/petrol/LPG/NG - Biomethane/Ethanol/Biodiesel/Hydrogen') and item 23 (pure electric); Reg. (EU) 2023/1804 Art. 2(4) for electricity, CNG and LNG. cng and lng include biomethane. Published mapping to IVI 2.0 EnergySource (after the licence check): petrol 10 (11, 12), ethanol 15 (16), diesel 20, biodiesel 21, lpg 30, cng 40 and 44, hydrogen 50, lng 60, electricity 95, other 90 (19, 22, 55, 91)."
    },
    {
      "list": "VEHICLE-POWERTRAIN 1.0 (vehicle.powertrainTypeCode)",
      "tokens": [
        "internal-combustion",
        "hybrid-electric",
        "plug-in-hybrid-electric",
        "pure-electric",
        "fuel-cell",
        "other"
      ],
      "source": "Reg. (EU) 2017/1151 Annex XXI points 3.3.15-3.3.20; CoC items 23 and 23.1. Published mapping: hybrid-electric = NOVC-HEV; plug-in-hybrid-electric = OVC-HEV, including range extenders; pure-electric = PEV (CoC 23 'pure electric: yes'); fuel-cell = FCV, NOVC-FCHV, OVC-FCHV."
    },
    {
      "list": "VEHICLE-COLOUR 1.0 (vehicle.basicColourCode, repeatable)",
      "tokens": [
        "white",
        "yellow",
        "orange",
        "red",
        "violet",
        "blue",
        "green",
        "grey",
        "brown",
        "black",
        "other"
      ],
      "source": "Reg. (EU) 2020/683 Annex VIII CoC item 40 footnote 114 ('Indicate only the basic colour(s)'; DE 'Grundfarben'); Directive 1999/37/EC code R. National register colours outside the ten map through the registry's published mapping table."
    },
    {
      "list": "VEHICLE-STATE-OF-HEALTH-METHOD 1.0 (vehicle.batteryStateOfHealthMethodCode)",
      "tokens": [
        "on-board",
        "manufacturer-test",
        "independent-test",
        "other"
      ],
      "source": "Registry-owned. on-board refers to the battery management system data of Reg. (EU) 2023/1542 Art. 14 and Annex VII Part A (SOCE for electric vehicle batteries) and the on-board monitor of UN GTR No. 22."
    },
    {
      "list": "VEHICLE-EMISSION-LEVEL 1.0 (vehicle.exhaustEmissionLevelCode), grammar not enumeration; examples",
      "tokens": [
        "euro-4",
        "euro-5",
        "euro-5-plus",
        "euro-6b",
        "euro-6c",
        "euro-6d-temp",
        "euro-6d-temp-evap-isc",
        "euro-6d",
        "euro-6d-isc-fcm",
        "euro-6e",
        "euro-6e-bis",
        "euro-6e-bis-fcm",
        "euro-7",
        "euro-vi-e",
        "stage-v",
        "other"
      ],
      "source": "CoC item 47 and footnote 116; Reg. (EU) 2017/1151 Annex I Appendix 6 Table 1 'Emission standard' names; Reg. (EC) 715/2007; Reg. (EC) 595/2009 (heavy duty, Roman numerals); Reg. (EU) 168/2013 (L-category, Euro 5+); Reg. (EU) 2024/1257 (Euro 7); Reg. (EU) 2016/1628 (stages). Grammar in the key's valueFormat."
    },
    {
      "list": "EU vehicle categories (vehicle.categoryCode), external; base codes, plus suffixes and sub-categories per grammar",
      "tokens": [
        "M1",
        "M2",
        "M3",
        "N1",
        "N2",
        "N3",
        "O1",
        "O2",
        "O3",
        "O4",
        "L1e",
        "L2e",
        "L3e",
        "L4e",
        "L5e",
        "L6e",
        "L7e",
        "T1",
        "T2",
        "T3",
        "T4",
        "T5",
        "C1",
        "C2",
        "C3",
        "C4",
        "R1",
        "R2",
        "R3",
        "R4",
        "S1",
        "S2"
      ],
      "source": "Reg. (EU) 2018/858 Art. 4 and Annex I Part A 2.1-2.3 (G for M and N; S for incomplete special purpose vehicles); Reg. (EU) 168/2013 Art. 4 (L sub-categories); Reg. (EU) 167/2013 Art. 4 (T, C, R, S with a/b); T5 is the legacy category of Directive 2003/37/EC still printed on older documents."
    },
    {
      "list": "EU bodywork codes (vehicle.bodyworkCode), external; optional two supplementary digits per Appendix 2",
      "tokens": [
        "AA",
        "AB",
        "AC",
        "AD",
        "AE",
        "AF",
        "AG",
        "BA",
        "BB",
        "BC",
        "BD",
        "BE",
        "BX",
        "CA",
        "CB",
        "CC",
        "CD",
        "CE",
        "CF",
        "CG",
        "CH",
        "CI",
        "CJ",
        "CX",
        "DA",
        "DB",
        "DC",
        "DE",
        "SA",
        "SB",
        "SC",
        "SD",
        "SE",
        "SF",
        "SG",
        "SH",
        "SJ"
      ],
      "source": "Reg. (EU) 2018/858 Annex I Part C points 2-5 and Appendix 2 (digits), Part A point 5 (special purpose vehicles); the trailer codes are DA, DB, DC and DE."
    },
    {
      "list": "EN 16931 country code list (vehicle.registrationCountryCode), external",
      "tokens": [
        "DE",
        "AT",
        "FR",
        "NL",
        "IT",
        "ES",
        "PL",
        "GR",
        "XI",
        "1A",
        "..."
      ],
      "source": "The country code list EN 16931 uses for BT-40 and the other country codes (ISO 3166-1 alpha-2 plus XI for Northern Ireland and 1A for Kosovo). Greece is GR, not EL. Not the distinguishing signs of vehicles."
    },
    {
      "list": "VEHICLE-CATALOGUE-SCHEME 1.0 (vehicle.catalogueId), open register",
      "tokens": [
        "manufacturer"
      ],
      "source": "Opened with one scheme: 'manufacturer', whose id is the make's own model or sales code for the vehicle. Third-party schemes are added only with the catalogue owner's written confirmation, each with a licence note; candidates are kept in the non-normative implementation notes (NR-16)."
    },
    {
      "list": "Indicator values (all ...Indicator keys)",
      "tokens": [
        "true",
        "false"
      ],
      "source": "NR-08. Lower case only; 'false' is an active statement; an absent row means no statement."
    }
  ],
  "namingRules": [
    {
      "id": "NR-01",
      "rule": "Key grammar. A registry key is the root 'vehicle' plus one or more dot-separated lowerCamelCase ASCII segments: ^vehicle([.][a-z][a-z0-9]*([A-Z][a-z0-9]*)*)+$. Initialisms and unit symbols are cased as words (vin, co2, wltp, Kw, Kwh, Cm3); two capitals stand next to each other only inside the unit token GPerKm. Digits appear only in the registered symbols co2 and Cm3. No hyphen, underscore or space. Keys are case-sensitive and at most 40 characters including the root. The root word is never repeated inside a key (vehicle.categoryCode, not vehicle.vehicleCategoryCode). The adjacency and digit limits are registry checks, because no portable regular expression states them.",
      "rationale": "The UN/CEFACT JSON Schema NDR prescribes lowerCamel ASCII names with acronyms cased as words, and schema.org and vocabulary.uncefact.org use the same casing. ISO/IEC 11179-5 and the NDR drop the object-class word from property names. The 40-character limit leaves at least 21 characters for a label under the 64-character cap; the longest key has 38.",
      "source": "UN/CEFACT JSON Schema NDR 1.0 R13-R16; ISO/IEC 11179-5 (committee draft read); Microsoft Azure/Graph REST guidelines; vocabulary.uncefact.org"
    },
    {
      "id": "NR-02",
      "rule": "Reserved segments. A middle segment of exactly two lower-case letters is a country scope: the ISO 3166-1 alpha-2 code in lower case (gr for Greece, gb for the United Kingdom; never the EU-internal forms el and uk). It is never a language code: vehicle.de.hsn means Germany, not German. Registry property names have at least three characters. There is no 'x', 'ext' or 'experimental' segment.",
      "rationale": "Keeps country scopes unambiguous and aligned with the EN 16931 country code list. RFC 6648 deprecates X-style markers because unstandardised names leak into the standard namespace and force renames.",
      "source": "RFC 6648 (BCP 178); RFC 6838 s3.4; ISO 3166-1; EN 16931 country code list; EU Interinstitutional Style Guide (EL and UK as EU-internal codes)"
    },
    {
      "id": "NR-03",
      "rule": "Composition. A key is [qualifiers] + property term + representation term (+ unit). Qualifiers precede what they qualify (firstRegistrationDate, maximumNetPowerKw, registeredMaximumMassKg, wltpCo2EmissionsGPerKm). No word appears twice. Only nouns, adjectives and participles are used; a preposition appears only inside an official legal term (firstEntryIntoServiceDate) or inside a unit token (GPerKm).",
      "rationale": "This is the ISO/IEC 11179-5 naming structure (object class, qualifiers, property, representation term), which CCTS also uses.",
      "source": "ISO/IEC 11179-5; UN/CEFACT CCTS 3.0 [C6], [C9], [B7]"
    },
    {
      "id": "NR-04",
      "rule": "Controlling term. The property term comes from the highest source that names the fact: (1) the EU legal text that defines or prints it (Directive 1999/37/EC Annex I codes, Reg. (EU) 2018/858, the CoC of Reg. (EU) 2020/683, Reg. (EU) 2017/1151, Directive 2006/112/EC, Directive 2014/45/EU, Reg. (EU) 2023/1542, Reg. (EU) 2023/1804); (2) EN 16931, UN/CEFACT, UNECE and ISO; (3) the open vocabularies schema.org, COVESA VSS and IVI 2.0; (4) sector standards (STAR, VDA 4938). A vendor's or marketplace's field name is never a source. A key may coincide with a vendor name only when a source from (1)-(3) independently gives the same word. Each key records its anchor.",
      "rationale": "The legal term is the least contestable name and gives the reader a citation. Requiring independent attestation guards against a vendor-shaped schema: 18 of the 43 draft names were verbatim field names of one vendor's data model. After this revision 7 active names still coincide exactly (vin, make, model, modelYear, batteryStateOfHealthPercent, de.hsn, de.tsn), and each has its own legal or standards anchor. Near-coincidences (firstRegistrationDate, conditionCode, cumulativeOperatingHours) follow from NR-03 to NR-07. Token coincidences (petrol, diesel, lpg, cng, electricity, ethanol, other; nine of the ten CoC colours; new, used) arise because the vendor and the registry use the same legal or common wording, which is allowed.",
      "source": "EReg IVI 2.0 Guideline s2.2 (tag names follow the regulation); Directive 1999/37/EC; Reg. (EU) 2018/858; Reg. (EU) 2020/683; mechanical comparison of the catalogue with the vendor model (check.py)"
    },
    {
      "id": "NR-05",
      "rule": "Collision and generic-word test. The test reads the property term together with the root ('vehicle category', 'vehicle role'). A key is rejected if that term is a defined term with a different meaning in EU vehicle or VAT law or in the host e-invoice formats, or if a bare generic noun (power, status, date, capacity, mass, type, description) forms the whole property term. A legal term used in its own legal meaning passes: approvedType, approvedVariant and approvedVersion use the words as Reg. (EU) 2018/858 defines them. Avoided: profile (Factur-X profile, BT-23), description (BT-154 Item description, hence model), variant and trim for the configuration (D.2; a seat is a structure 'with trim'), colour code and powertrain code (manufacturer codes), capacity (ampere-hours in Reg. (EU) 2023/1542), inspection (workshop service), keeper (absent from EU texts). Checked and kept with a glossary line (NR-25): category, role, registration.",
      "rationale": "A homonym in a statutory or legal field invites wrong data and blocks adding the legal concept later; for example, the D.2 type-variant-version is mandatory in the EU eCoC (IVI 2.0). Testing single words instead of terms would reject every key, since date, code and number all occur in EN 16931 terms.",
      "source": "Reg. (EU) 2018/858 Art. 3 and Annex I; Directive 1999/37/EC code D.2; Factur-X 1.09 profiles; EN 16931 BT-23, BT-24, BT-30, BT-118, BT-151, BT-154; CII D16B RoleCode; OpenTelemetry naming guidance on generic names"
    },
    {
      "id": "NR-06",
      "rule": "Representation terms (closed list). Every key ends in a term from a closed VINvoice list derived from the CCTS Data Type Catalogue: Date, Code, Indicator, Number, Id (for Identifier), Percent, a unit token for Measure (NR-10), and three terms CCTS does not have: Year, Count and Url. Number is an identifier that an authority or manufacturer assigns and prints on the vehicle or its documents (vin, registrationNumber, typeApprovalNumber). Id is an identifier in a registry-defined scheme or the specification marker (specificationId, catalogueId). Two implicit classes carry no suffix: names and designations, whose CCTS term is Name or Text (make, model, configuration, approvedType, approvedVariant, approvedVersion), and listed abbreviations whose expansion ends in a representation term (vin, de.hsn, de.tsn). Primitive type names (Bool, String) are never appended.",
      "rationale": "A checker reads the value type from the last word of the key, and EN 16931 business terms also end in such terms ('Invoice issue date', 'Seller country code'). The list does not claim CCTS conformance: it adds Year, Count and Url, writes Id for Identifier, puts units into the key and allows digits in unit symbols, where CCTS [C8] allows letters only.",
      "source": "UN/CEFACT CCTS Data Type Catalogue 3.1 s4.4 (Amount ... Video); CCTS 3.0 [C8], [C10]; UN/CEFACT JSON Schema NDR Table 4; EN 16931-1 business term names"
    },
    {
      "id": "NR-07",
      "rule": "Dates. A key whose value is a calendar date ends in Date, including reduced-precision values (YYYY-MM, or YYYY where the key allows it). 'Due', 'On' and 'At' are not date terms. Year is reserved for a year designation that is not a calendar date (modelYear only). No DateTime: the vocabulary carries no time of day.",
      "rationale": "Every EN 16931 date term ends in 'date' (BT-2, BT-7, BT-72), and the EU texts say 'date of first registration', 'date of manufacture', 'date of first entry into service' and 'date of next roadworthiness test'. CCTS Date allows reduced precision. Microsoft Graph, Google AIP-142 and Zalando also require a date term. This is why the key is vehicle.firstRegistrationDate, not vehicle.firstRegistration, which names the event and not its date.",
      "source": "EN 16931-1 BT-2/BT-72; Directive 1999/37/EC codes B and X; Reg. (EU) 2018/858 Art. 3(58); Directive 2006/112/EC Art. 2(2)(b); UN/EDIFACT 2005 code 375; CCTS DTC 3.1 s5.4"
    },
    {
      "id": "NR-08",
      "rule": "Booleans. A boolean key is a positive statement ending in Indicator (newMeansOfTransportIndicator, marginSchemeIndicator), with no is/has prefix and no negative name. Values are 'true' or 'false' in lower case; 'false' is always an active statement; an absent row means no statement and never false. There are no true-only indicators.",
      "rationale": "Indicator is the CCTS representation term for booleans and the word the e-invoice syntaxes use (CII/UBL ChargeIndicator), as do the UN/CEFACT vocabulary (126 ...Indicator terms), the Hungarian NAV e-invoice (marginSchemeIndicator) and the EU eCoC (IVI 2.0 PureElectricVehicleIndicator). As a suffix it keeps the last word as the type. Dissent: the UN/CEFACT JSON NDR, schema.org and COVESA VSS use an is-prefix.",
      "source": "UN/CEFACT CCTS DTC 3.1 s5.9; CII/UBL ChargeIndicator; vocabulary.uncefact.org; HU NAV invoiceData.xsd; IVI 2.0 change overview"
    },
    {
      "id": "NR-09",
      "rule": "Codes. A key whose value comes from a closed list, from a grammar defined by an instrument, or from an external code list (EN 16931 country codes, EU vehicle categories, EU bodywork codes) ends in Code (roleCode, energySourceCode, registrationCountryCode, exhaustEmissionLevelCode).",
      "rationale": "EN 16931 coded terms end in 'code' (BT-3, BT-5, BT-40), and the UN/CEFACT vocabulary has 455 ...Code terms. The suffix tells implementers the value is from a closed list. Accepted cost: schema.org, COVESA VSS and marketplaces use no suffix.",
      "source": "EN 16931-1 BT-3/BT-5/BT-40; CCTS DTC 3.1 s5.3; vocabulary.uncefact.org"
    },
    {
      "id": "NR-10",
      "rule": "Measures. A quantity key ends in the token of its fixed unit: Km, Mi, Kw, Kwh, Cm3, Kg, GPerKm; Hours and Percent are spelled out, because the Rec 20 symbols h and % cannot be cased as words. Where tokens overlap, the longest wins (GPerKm before Km). The unit never changes, and a new unit means a new key. The same holds for the test procedure that determines a type-approval value (wltp, nedc): a new procedure means a new key. Values never contain unit text and are never converted. Unit tokens map to UN/ECE Rec 20: KMT, SMI, KWT, KWH, CMQ, KGM, HUR, P1 (g/km has no Rec 20 code).",
      "rationale": "The EN 16931:2017 BG-32 group has no unit slot (BT-160 and BT-161 are Text), so the unit must live in the name. Google AIP-141, Azure (ttlSeconds) and IVI 2.0 s2.10 do the same. CO2 and range values differ by test procedure in the documents (CoC item 49 has NEDC and WLTP blocks), so the procedure is fixed in the key for the same reason as the unit.",
      "source": "EN 16931:2017 BG-32; XRechnung 3.0.2; Google AIP-141; EReg IVI 2.0 Guideline s2.10; UN/ECE Rec 20 (EN 16931 code list v18); Reg. (EU) 2020/683 Annex VIII item 49"
    },
    {
      "id": "NR-11",
      "rule": "Counts. A dimensionless count ends in Count, after a singular noun (seatingPositionCount, axleCount). Its English label reads 'Number of ...'.",
      "rationale": "A bare plural ('seats', 'registeredKeepers') reads as a list, in one case a list of persons. The schema.org style guide and Google AIP-141 prefer <thing>Count; the EU texts say 'number of', which is why the label uses it.",
      "source": "schema.org style guide; Google AIP-141; CCTS [C7]; Directive 1999/37/EC codes L, S.1"
    },
    {
      "id": "NR-12",
      "rule": "Singular names; multi-valued facts. Names are singular nouns, except a plural-only legal term (co2Emissions) and the unit word Hours (NR-10). A multi-valued fact repeats the singular key, one value per row: energySourceCode (in source-document order), basicColourCode and catalogueId (one row per scheme). Only these keys repeat; comma lists are not used.",
      "rationale": "CCTS [C7] and ISO/IEC 11179-5 call for singular terms. Repeated rows reuse a mechanism BG-32 already allows (BR-54 requires only name and value) and avoid splitting values on a delimiter.",
      "source": "UN/CEFACT CCTS 3.0 [C7]; XML NDR R 8D9F; EN 16931 BR-54"
    },
    {
      "id": "NR-13",
      "rule": "Abbreviations (closed list). Allowed: vin; co2; Id; Url; the unit tokens of NR-10; the test-procedure acronyms wltp and nedc; acronyms and designators defined inside a token list or grammar (lpg, cng, lng; the Euro-level designators temp, evap, isc, fcm, bis and plus); and an authority's official abbreviation only inside its country scope (de.hsn, de.tsn). Every allowed abbreviation is expanded in the definition that uses it. Everything else is spelled out: maximum not max, stateOfHealth not soh, Percent not Pct. Adding to the list needs a registry release.",
      "rationale": "ISO/IEC 11179-5, CCTS [C10] and XML NDR R 9009 allow abbreviations only from an approved list that expands them. VIN is the defined term of ISO 3779, Reg. (EU) 2021/535 and UNTDID 1153 AKG; WLTP and NEDC are the labels printed in CoC item 49; the Euro-level designators are the 'Emission standard' names of Reg. (EU) 2017/1151 Annex I Appendix 6.",
      "source": "ISO/IEC 11179-5; UN/CEFACT CCTS 3.0 [C10]; XML NDR 3.0 R 9009 and Appendix C; JSON NDR Table 4; Reg. (EU) 2020/683 Annex VIII item 49; Reg. (EU) 2017/1151 Annex I Appendix 6"
    },
    {
      "id": "NR-14",
      "rule": "Spelling. Keys, English labels and registry tokens use the English of the Official Journal as the EU Interinstitutional Style Guide prescribes it (colour, catalogue, licence, petrol, -ise), consistently across the registry; a legal text's own spelling wins. American forms (color, catalog) appear only in informative crosswalks, and no alias keys are issued.",
      "rationale": "The concept names come from EU law (NR-04), whose English is British. CCTS [C1] (primary British spelling of the Oxford English Dictionary) agrees for colour and catalogue but prefers -ize; the registry follows the EU style guide. EN 16931 writes 'Colour', and the UN/CEFACT vocabulary has colourCode. The draft mixed the two spellings (catalogId with the label 'Catalogue').",
      "source": "EU Interinstitutional Style Guide; UN/CEFACT CCTS 3.0 [C1]; EN 16931-1 BT-160 usage note"
    },
    {
      "id": "NR-15",
      "rule": "Namespaces and vendor rows. The root 'vehicle.' is reserved for registry keys and registered country keys. A vendor's private rows use the reverse-DNS name of a domain the vendor controls, never 'vehicle.': ^[a-z0-9]+(-[a-z0-9]+)*([.][a-z0-9]+(-[a-z0-9]+)*)+[.][a-z][A-Za-z0-9]*$ (for example com.example.stockNumber), at most 64 characters, with a lowerCamel last segment; the full BT-160 name SHOULD stay within 64 characters. There is no x segment and no vendor token registry. Receivers ignore any BT-160 whose bracketed key does not start with 'vehicle.'. A vendor concept is promoted by defining a new registry key, never by aliasing or renaming the vendor key.",
      "rationale": "RFC 6648 and RFC 6838 recommend that vendor names carry the organisation's own name or domain and discourage x-trees. Domain names are already unique, so no first-come registry or governance is needed, and a stated grammar keeps vendor names inside the same budgets as registry names.",
      "source": "RFC 6648 s3 and Appendix B; RFC 6838 s3.2-3.4; OpenTelemetry (reverse-domain vendor attributes); Azure guidelines (no x- prefixes)"
    },
    {
      "id": "NR-16",
      "rule": "Neutrality. Normative content (keys, labels, tokens, definitions, anchors, examples, JSON-LD, catalogue, token-list sources) names no vendor, product, marketplace or commercial data provider. Implementer mappings and candidate third-party catalogue schemes go in a non-normative, multi-vendor implementation notes page. The brand VINvoice appears only in the human label of the marker row, in the specification title and on the website.",
      "rationale": "A standard 'that works for everyone' cannot carry one implementer's field mapping in every row. The draft registry had an implementer column, implementer anchor suffixes, an implementer vendor-key example and named commercial catalogue candidates in a normative list.",
      "source": "Owner brief; RFC 6648 rationale"
    },
    {
      "id": "NR-17",
      "rule": "Label form. A label is the human-readable term in the invoice language, in sentence case, with no trailing punctuation, no '[' or ']', no control characters and no slash except in the unit g/km. Parentheses hold only a unit symbol in ASCII (km, mi, kW, kWh, cm3, kg, g/km, %), an official abbreviation of the term (VIN, FIN, HSN, TSN, USt) or a legal context that disambiguates it (type-approval). An 'or' alternative appears only where the legal term itself has it (Fuel or power source, code P.3). The label body contains no abbreviation except the official designations CO2, WLTP, NEDC (DE NEFZ) and the brand. A label never cites a national statute section, and is never a bare generic noun (Vehicle role, Vehicle condition, Vehicle category).",
      "rationale": "Brackets delimit the key inside BT-160. Invented alternatives ('Variant / trim') signal an under-defined key. Superscripts and '§' risk being mangled by intermediaries. A statute section would put German law onto Austrian or Luxembourg invoices written in German. A bare 'Role' or 'Condition' in an item-attribute table does not say whose.",
      "source": "EN 16931-1 business-term style; CCTS [C10]; Directive 1999/37/EC code P.3; draft risk register"
    },
    {
      "id": "NR-18",
      "rule": "Label wording. The English label is the official English term of the key's anchor (without 'of the vehicle' and '(if available)'), or its shortened form under NR-19, or else the key's own words. The German label is the official German term of the same instrument (registration certificate, CoC or Directive in German), shortened the same way. Where the official term names a unit that contradicts the key's unit, the unit word is replaced (Meilenstand for odometerReadingMi). Statutory keys follow the same rule; national guidance labels (such as the KoSIT/FeRD row titles) are not normative, because receivers ignore labels. Further languages may register a short form of the official term (FR 'Première mise en service').",
      "rationale": "For statutory particulars the structured part must be unambiguous to a tax reader, and the official term of the same instrument gives that in each language. Labels that use another stem than the key split the vocabulary, because people search the label and machines the key. Official terms of FR, IT and PL often exceed the label budget, so a registered short form is needed.",
      "source": "UN/CEFACT CCTS [C5]; Directive 1999/37/EC Annex I (EN/DE); Reg. (EU) 2020/683 Annex VIII (EN/DE); Directive 2006/112/EC (EN/DE); Directive 2014/45/EU Annex II (EN/DE)"
    },
    {
      "id": "NR-19",
      "rule": "Length. The full BT-160 name '<label> [<key>]' is at most 64 Unicode characters (after NFC) in every registry language, and the key at most 40 characters. If a name is too long, the label is shortened by dropping words the key already carries ('Date of', the object word, a unit the label already names), never by shortening the key. Receivers MUST NOT truncate, reject or reroute an invoice for length.",
      "rationale": "No normative limit exists, so the cap is a registry authoring budget (see nameLengthCap). The longest names of the catalogue have 64 characters.",
      "source": "EN 16931-1, XRechnung 3.0.2, Peppol BIS 3.0 and Factur-X 1.09.2 XSDs (BT-160 Text, no length facet); owner's earlier request to shorten the one label that exceeded 64"
    },
    {
      "id": "NR-20",
      "rule": "Token form. Registry-owned tokens are lower-case ASCII kebab-case ^[a-z0-9]+(-[a-z0-9]+)*$, at most 32 characters. Values from an external code list keep that list's own form (DE, 1A, M1, L3e-A1, AB). Emitters write the exact form. Receivers match ASCII case-insensitively.",
      "rationale": "These tokens are invoice text that people read in viewers. The closest BT-161 precedent (KoSIT CIUS XRechnung CVD) uses lower-case hyphenated values. Case-insensitive matching protects against ERP systems that upper-case text.",
      "source": "KoSIT CIUS XRechnung CVD v0.9; Zalando rule 240 (external values keep their form)"
    },
    {
      "id": "NR-21",
      "rule": "Token wording. Registry tokens are in EU English and singular. Tokens of an energy-source list name the source (electricity, not electric). Tokens of other lists use the legal wording where one exists (pure-electric, hybrid-electric, the ten CoC basic colours) and otherwise a plain adjective, participle or noun (new, used, displayed, on-board). A token never repeats the key stem.",
      "rationale": "The controlling-term logic of NR-04 applies to tokens as to keys. Reg. (EU) 2023/1804 lists electricity as an alternative fuel; Reg. (EU) 2017/1151 Annex XXI defines PEV, NOVC-HEV and OVC-HEV.",
      "source": "Reg. (EU) 2023/1804 Art. 2(4); Reg. (EU) 2017/1151 Annex XXI 3.3; Reg. (EU) 2020/683 CoC items 23, 26, 40; IVI 2.0 EnergySource"
    },
    {
      "id": "NR-22",
      "rule": "Token governance. Each open list has exactly one catch-all 'other'. A list that partitions a defined test into all its outcomes is complete and has none (VEHICLE-CONDITION: new, used); a receiver treats an unknown token in such a list as no statement. 'unknown' appears only where 'no information available' is an observed state (VEHICLE-ODOMETER-STATUS). 'none' and 'n/a' are never tokens. From 1.0, tokens are added only in minor releases and are never removed, renamed or re-purposed. A receiver keeps an unknown token raw and treats it as 'other'. List identifiers follow the root: VEHICLE-<NAME> <major.minor>. Mappings to official numeric or class codes are published in the registry and never written into BT-161.",
      "rationale": "Extensible lists cannot break old receivers. The draft list identifiers (VEH-*) carried the abandoned prefix, and two draft lists lacked a catch-all.",
      "source": "Microsoft Azure guidelines (extensible enums); Zalando rule 240"
    },
    {
      "id": "NR-23",
      "rule": "Stability and reservation. Frozen keys and tokens are never renamed, reused or redefined; a correction adds a new key and deprecates the old one. Before 1.0 names may still change. Reserved forever: the names of removed keys (previousHolderCount, knownAccidentDamageIndicator, knownUnrepairedDamageIndicator), the deferred name vehicle.priorUseCode, and every draft name that appeared in a published version (website, public example, a page shared beyond the editors). The editor lists those draft names in a retired-name register before the 1.0 freeze.",
      "rationale": "Name migrations create interoperability problems when old and new software disagree, and IVI 2.0 forbids re-using outdated element names. Reserving names that were never published would only remove good names; reserving published ones protects receivers that already saw them.",
      "source": "RFC 6648 s1; EReg IVI 2.0 Guideline s2.12"
    },
    {
      "id": "NR-24",
      "rule": "Invoice-fact test. A key belongs in the registry only if the fact is required or defined by EU or national tax or registration law, or is needed by at least three participant classes (retail dealer, OEM/importer, leasing/fleet/rental, truck/bus/trailer, L-category, agricultural/construction machinery, EV, workshop/test centre). Listing, marketing and warranty-relevant seller declarations fail the test. A key that passes on participant classes names them in its change reason.",
      "rationale": "An e-invoice is a tax document. A declaration such as accident-free can become an agreed quality, and its legal effect differs by jurisdiction without any EU harmonised definition.",
      "source": "Coverage audit; Directive 2006/112/EC Art. 226; schema.org knownVehicleDamages note on differing national rules"
    },
    {
      "id": "NR-25",
      "rule": "Glossary words. Within the vehicle. namespace, 'battery' means the electric vehicle battery of Reg. (EU) 2023/1542 Art. 3(14) (the traction battery), never a starter battery; 'registration' means vehicle registration under Directive 1999/37/EC Art. 2(b), never a party's legal registration (BT-30); 'category' means the EU vehicle category, never the VAT category (BT-118, BT-151); 'role' means the vehicle's role on the invoice line, never a party role.",
      "rationale": "One fixed meaning per word keeps keys short (no 'traction' qualifier, which would push battery keys over 40 characters) and settles the collisions NR-05 found without renaming legal terms.",
      "source": "Reg. (EU) 2023/1542 Art. 3(14); Directive 1999/37/EC Art. 2(b); EN 16931-1 BT-30, BT-118, BT-151"
    },
    {
      "id": "NR-26",
      "rule": "Definitions and legal effect. Every definition names the fact, its source field and its unit or list. A row is the issuer's statement of a fact as its source shows it: not a warranty, an agreed quality, a guarantee or a tax determination. The sale or service contract governs the condition of the vehicle, and the invoice's VAT terms (BG-23, BT-118, BT-120, BT-151) prevail over any row. An absent row makes no statement; no key has a default value. Definitions of liability-sensitive keys (odometer reading and status, conditionCode, state of health, CO2, electric range, firstRegistrationDate, modelYear) state what the figure is not.",
      "rationale": "On consumer sales, public statements and descriptions can shape conformity, so a structured row without a stated legal effect invites disputes. The draft hardened some keys (odometer status) and not others, and two of its definitions turned an absent row into a statement.",
      "source": "Directive (EU) 2019/771 Art. 6 and 7; Directive 2006/112/EC Art. 226; legal review of the draft"
    },
    {
      "id": "NR-27",
      "rule": "Statutory flag. statutory is true only where Directive 2006/112/EC Art. 226 makes the fact an invoice particular in the line's case: the Art. 226(12) characteristics of a new means of transport (odometerReadingKm, odometerReadingMi, firstEntryIntoServiceDate), the condition that triggers them (newMeansOfTransportIndicator), and the Art. 226(14) fact (marginSchemeIndicator). A particular required only by national law (for example power and capacity under DE UStG §14a(4)) is false and is named in anchors as 'national invoice particular'. Spec R3 then requires the labelled name for statutory keys and, in the issuer's state, for that state's national particulars.",
      "rationale": "The draft flagged the seven particulars of one national guidance table as statutory, which told implementers in other states that a duty exists where it does not. Power and capacity are thresholds of the definition in Art. 2(2)(a), not Art. 226(12) characteristics.",
      "source": "Directive 2006/112/EC Art. 2(2), 226(12), 226(14); DE UStG §14a(4) with §1b(2) and (3)"
    }
  ],
  "nameLengthCap": "The cap is 64 Unicode characters (after NFC) for the complete BT-160 name '<label> [<key>]' in every registry language, and 40 characters for the key including the 'vehicle.' root, so that every key leaves at least 21 characters for its label; the longest key has 38 characters and leaves 23. It is an authoring rule for the registry, not a receiver limit: receivers MUST NOT truncate, reject or reroute an invoice for length. Why 64. No normative maximum exists: BT-160 is Text without a length facet in EN 16931, XRechnung 3.0.2, Peppol BIS 3.0 and the Factur-X 1.09.2 XSDs. The cap is therefore a readability budget for viewer table columns and a margin against undocumented receiver field limits, and it keeps the owner's earlier decision to shorten the one label that went over 64. All 51 catalogue names fit in EN and DE (recomputed by check.py): the longest are 64 ('Alterungszustand ermittelt am [vehicle.batteryStateOfHealthDate]' and 'Known unrepaired damage [vehicle.knownUnrepairedDamageIndicator]'), then 63 (two DE names and 'State of health method [vehicle.batteryStateOfHealthMethodCode]'). Fitting meant shortening labels, never keys. Review fixes were checked against the cap: a 'traction' qualifier on the battery keys (43 characters) and technicallyPermissibleMaximumLadenMassKg (48 with the root) break the key cap and were not adopted; 'Bekannter unreparierter Schaden' would make that name 72; the full EN form of F.1 would make 71. The open risk is further languages: the smallest label budgets are 23 (batteryStateOfHealthMethodCode), 25 (newMeansOfTransportIndicator), 26 (batteryStateOfHealthPercent) and 27 to 29 (nextRoadworthinessTestDate, firstEntryIntoServiceDate, odometerReadingStatusCode, batteryStateOfHealthDate, cumulativeOperatingHours); FR, IT and PL labels must use registered short forms there (NR-18). Italy's SdI maps BT-160 to a 10-character TipoDato, which no descriptive name can meet; the mapping is non-fatal, so it is not a design input. Rejected alternatives: 48 local / 100 total and 80 (no source, and they would admit long legal keys); 72 (revisit only if registered short forms fail for FR, IT or PL); raising the key cap to 44 (no key needs it).",
  "nationalKeysPattern": "Pattern: vehicle.<cc>.<name>. <cc> is the ISO 3166-1 alpha-2 code, in lower case, of the state whose law or authority defines the concept (gr, not el; gb, not uk); it is a country, never a language. <name> follows NR-01 to NR-14 with one exception: it may be that authority's official abbreviation, in lower case, when the expansion already ends in a representation term. Examples are hsn (Herstellerschlüsselnummer) and tsn (Typschlüsselnummer) for the German KBA keys in registration certificate Part I fields 2.1 and 2.2, both provisional until checked against the KBA key directory. The pattern is used only when no EU-harmonised fact exists. A national particular with an EU equivalent uses the EU key: the German HU becomes nextRoadworthinessTestDate, a Tageszulassung is conditionCode used with firstRegistrationDate, and national approval numbers go into typeApprovalNumber. Country keys enter the CC0 registry with their national anchor and labels in every registry language, proposed by that state's authority or by a national industry body citing the authority's document. They are always tier optional and never statutory at EU level, and receivers that do not know them ignore them. A national abbreviation is legal only inside its country scope. Candidates listed in the implementation notes, not yet defined: FR field D.2.1 (CNIT) and FR field P.6 (administrative power). Vendors never use a country scope; their private rows use their own reverse-DNS root outside 'vehicle.' (NR-15). Rejected alternative: a single scheme-qualified key such as vehicle.nationalTypeCode with values like de-kba:0603-BDE. It would mean two mechanisms for one problem and values a person cannot read on the invoice.",
  "tokenPolicy": "There are two kinds of value, with one rule each. (1) Where an EU or international instrument itself publishes the identifier as a code, the value is that code, verbatim and in its own form: the EN 16931 country code list (ISO 3166-1 alpha-2 plus XI and 1A), EU vehicle categories (M1, N1G, M1S, L3e-A1, T1b) and EU bodywork codes (AB, BA03). (2) Otherwise the registry owns the tokens: lower-case ASCII kebab-case (^[a-z0-9]+(-[a-z0-9]+)*$, at most 32 characters), in EU English and singular, taken from the legal wording where one exists (electricity, pure-electric, hybrid-electric, the ten CoC basic colours). Designations that follow a legislative sequence, such as Euro levels, are defined by a grammar over the instrument's own names (the 'Emission standard' names of Reg. (EU) 2017/1151 Annex I Appendix 6, e.g. euro-6d-isc-fcm), not by a closed enumeration. Official numeric or class codes are never written into BT-161; this covers IVI 2.0 EnergySource (10, 20, 95), CoC 23.1 classes (OVC-HEV, NOVC-HEV), the Appendix 6 character codes and KBA codes. The registry publishes versioned, machine-readable mappings to them instead, plus a mapping from national register colours (e.g. beige, cream) to the ten basic colours; the IVI mapping only after its licence is checked. Every open list has exactly one 'other'. VEHICLE-CONDITION partitions its test (new, used) and has none; a receiver treats an unknown token there as no statement. 'unknown' appears only in VEHICLE-ODOMETER-STATUS. Emitters write the exact form. Receivers match ASCII case-insensitively, keep an unknown token raw and treat it as 'other'. From 1.0, tokens are only added (in minor releases) and never removed, renamed or re-purposed. Booleans are 'true' or 'false' in lower case, 'false' is an active statement, and an absent row means no statement. Multi-valued facts repeat the key, one token per row; energySourceCode rows follow the order of the source document. List identifiers follow the root: VEHICLE-<NAME> <major.minor>. No list copies a vendor or marketplace enumeration: the draft colour, fuel, emission and condition lists were mapped 1:1 from such enumerations and have been rebuilt from the legal lists.",
  "refs": {
    "marker": "vehicle.specificationId",
    "role": "vehicle.roleCode",
    "vin": "vehicle.vin",
    "make": "vehicle.make",
    "model": "vehicle.model",
    "condition": "vehicle.conditionCode",
    "firstRegistrationDate": "vehicle.firstRegistrationDate",
    "odometerKm": "vehicle.odometerReadingKm",
    "odometerMi": "vehicle.odometerReadingMi",
    "odometerStatus": "vehicle.odometerReadingStatusCode",
    "power": "vehicle.maximumNetPowerKw",
    "engineCapacity": "vehicle.engineCapacityCm3",
    "newMeansOfTransport": "vehicle.newMeansOfTransportIndicator",
    "firstEntryIntoService": "vehicle.firstEntryIntoServiceDate",
    "marginScheme": "vehicle.marginSchemeIndicator",
    "registrationNumber": "vehicle.registrationNumber",
    "registrationCountry": "vehicle.registrationCountryCode",
    "category": "vehicle.categoryCode",
    "stateOfHealth": "vehicle.batteryStateOfHealthPercent",
    "stateOfHealthDate": "vehicle.batteryStateOfHealthDate",
    "stateOfHealthMethod": "vehicle.batteryStateOfHealthMethodCode"
  }
}
