vehicles 0.6.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +164 -0
  3. data/CHANGELOG.md +274 -0
  4. data/README.md +55 -10
  5. data/data/PROVENANCE-vehicles.md +12 -0
  6. data/data/plates/PROVENANCE.md +5 -4
  7. data/data/plates/_decode/at-districts.yml +287 -0
  8. data/data/plates/_decode/ch-cantons.yml +110 -0
  9. data/data/plates/_decode/cn-issuing-offices.yml +463 -0
  10. data/data/plates/_decode/cn-provinces.yml +614 -0
  11. data/data/plates/_decode/cz-kraj.yml +159 -0
  12. data/data/plates/_decode/dk-serial-blocks.yml +327 -0
  13. data/data/plates/_decode/fr-departements.yml +191 -0
  14. data/data/plates/_decode/gb-age-identifiers.yml +170 -0
  15. data/data/plates/_decode/gb-memory-tags.yml +202 -0
  16. data/data/plates/_decode/gr-prefectures.yml +1408 -0
  17. data/data/plates/_decode/hr-cities.yml +315 -0
  18. data/data/plates/_decode/ie-counties.yml +227 -0
  19. data/data/plates/_decode/in-state-codes.yml +169 -0
  20. data/data/plates/_decode/is-districts-1938.yml +116 -0
  21. data/data/plates/_decode/it-provinces.yml +348 -0
  22. data/data/plates/_decode/jp-office-marks.yml +960 -0
  23. data/data/plates/_decode/jp-use-marks.yml +205 -0
  24. data/data/plates/_decode/kr-authority-marks.yml +146 -0
  25. data/data/plates/_decode/kr-use-syllables.yml +194 -0
  26. data/data/plates/_decode/lu-series-order.yml +638 -0
  27. data/data/plates/_decode/mx-entity-series.yml +380 -0
  28. data/data/plates/_decode/my-index-marks.yml +271 -0
  29. data/data/plates/_decode/no-counties-1913.yml +148 -0
  30. data/data/plates/_decode/no-districts.yml +901 -0
  31. data/data/plates/_decode/pl-powiats.yml +567 -0
  32. data/data/plates/_decode/pt-trailer-services.yml +96 -0
  33. data/data/plates/_decode/ro-counties.yml +213 -0
  34. data/data/plates/_decode/se-diplomatic.yml +220 -0
  35. data/data/plates/_decode/si-regions.yml +123 -0
  36. data/data/plates/_decode/sk-districts.yml +314 -0
  37. data/data/plates/_decode/th-registration-elements.yml +208 -0
  38. data/data/plates/_decode/ua-regions.yml +393 -0
  39. data/data/plates/_decode/za-licence-marks.yml +215 -0
  40. data/data/plates/_meta/classes.yml +1 -0
  41. data/data/plates/_meta/separators.yml +102 -0
  42. data/data/plates/ad.yml +961 -0
  43. data/data/plates/ar.yml +762 -0
  44. data/data/plates/at.yml +1424 -0
  45. data/data/plates/au-act.yml +472 -0
  46. data/data/plates/au-nsw.yml +282 -0
  47. data/data/plates/au-nt.yml +431 -0
  48. data/data/plates/au-qld.yml +272 -0
  49. data/data/plates/au-sa.yml +248 -0
  50. data/data/plates/au-tas.yml +302 -0
  51. data/data/plates/au-vic.yml +215 -0
  52. data/data/plates/au-wa.yml +309 -0
  53. data/data/plates/be.yml +1840 -0
  54. data/data/plates/br.yml +1152 -0
  55. data/data/plates/ca-ab.yml +430 -0
  56. data/data/plates/ca-bc.yml +697 -0
  57. data/data/plates/ca-mb.yml +499 -0
  58. data/data/plates/ca-nb.yml +537 -0
  59. data/data/plates/ca-nl.yml +743 -0
  60. data/data/plates/ca-ns.yml +808 -0
  61. data/data/plates/ca-nt.yml +610 -0
  62. data/data/plates/ca-nu.yml +280 -0
  63. data/data/plates/ca-on.yml +881 -0
  64. data/data/plates/ca-pe.yml +592 -0
  65. data/data/plates/ca-qc.yml +1036 -0
  66. data/data/plates/ca-sk.yml +256 -0
  67. data/data/plates/ca-yt.yml +656 -0
  68. data/data/plates/ch.yml +1273 -0
  69. data/data/plates/cn.yml +1431 -0
  70. data/data/plates/cy.yml +688 -0
  71. data/data/plates/cz.yml +1179 -0
  72. data/data/plates/de.yml +553 -118
  73. data/data/plates/dk.yml +1647 -0
  74. data/data/plates/ee.yml +1275 -0
  75. data/data/plates/es.yml +228 -32
  76. data/data/plates/fi.yml +1271 -0
  77. data/data/plates/fr.yml +1265 -0
  78. data/data/plates/gb.yml +1188 -0
  79. data/data/plates/gr.yml +721 -0
  80. data/data/plates/hr.yml +860 -0
  81. data/data/plates/hu.yml +959 -0
  82. data/data/plates/ie.yml +775 -0
  83. data/data/plates/in.yml +1172 -0
  84. data/data/plates/is.yml +667 -0
  85. data/data/plates/it.yml +1317 -0
  86. data/data/plates/jp.yml +3650 -0
  87. data/data/plates/kr.yml +1375 -0
  88. data/data/plates/li.yml +1010 -0
  89. data/data/plates/lt.yml +879 -0
  90. data/data/plates/lu.yml +842 -0
  91. data/data/plates/lv.yml +924 -0
  92. data/data/plates/mc.yml +1024 -0
  93. data/data/plates/mt.yml +854 -0
  94. data/data/plates/mx.yml +1372 -0
  95. data/data/plates/my.yml +685 -0
  96. data/data/plates/nl.yml +44 -0
  97. data/data/plates/no.yml +1018 -0
  98. data/data/plates/nz.yml +1699 -0
  99. data/data/plates/pl.yml +1296 -0
  100. data/data/plates/pt.yml +847 -0
  101. data/data/plates/ro.yml +785 -0
  102. data/data/plates/se.yml +1091 -0
  103. data/data/plates/si.yml +1105 -0
  104. data/data/plates/sk.yml +1439 -0
  105. data/data/plates/sm.yml +1119 -0
  106. data/data/plates/th.yml +1150 -0
  107. data/data/plates/ua.yml +1672 -0
  108. data/data/plates/us-ak.yml +763 -0
  109. data/data/plates/us-al.yml +457 -0
  110. data/data/plates/us-ar.yml +427 -0
  111. data/data/plates/us-as.yml +454 -0
  112. data/data/plates/us-az.yml +430 -0
  113. data/data/plates/us-ca.yml +892 -0
  114. data/data/plates/us-co.yml +452 -0
  115. data/data/plates/us-ct.yml +427 -0
  116. data/data/plates/us-dc.yml +614 -0
  117. data/data/plates/us-de.yml +551 -0
  118. data/data/plates/us-fl.yml +319 -96
  119. data/data/plates/us-ga.yml +644 -0
  120. data/data/plates/us-gu.yml +658 -0
  121. data/data/plates/us-hi.yml +585 -0
  122. data/data/plates/us-ia.yml +438 -0
  123. data/data/plates/us-id.yml +531 -0
  124. data/data/plates/us-il.yml +516 -0
  125. data/data/plates/us-in.yml +324 -0
  126. data/data/plates/us-ks.yml +351 -0
  127. data/data/plates/us-ky.yml +770 -0
  128. data/data/plates/us-la.yml +568 -0
  129. data/data/plates/us-ma.yml +379 -0
  130. data/data/plates/us-md.yml +536 -0
  131. data/data/plates/us-me.yml +445 -0
  132. data/data/plates/us-mi.yml +408 -0
  133. data/data/plates/us-mn.yml +411 -0
  134. data/data/plates/us-mo.yml +356 -0
  135. data/data/plates/us-mp.yml +402 -0
  136. data/data/plates/us-ms.yml +432 -0
  137. data/data/plates/us-mt.yml +619 -0
  138. data/data/plates/us-nc.yml +602 -0
  139. data/data/plates/us-nd.yml +419 -0
  140. data/data/plates/us-ne.yml +483 -0
  141. data/data/plates/us-nh.yml +394 -0
  142. data/data/plates/us-nj.yml +547 -0
  143. data/data/plates/us-nm.yml +574 -0
  144. data/data/plates/us-nv.yml +655 -0
  145. data/data/plates/us-ny.yml +592 -0
  146. data/data/plates/us-oh.yml +404 -0
  147. data/data/plates/us-ok.yml +513 -0
  148. data/data/plates/us-or.yml +392 -0
  149. data/data/plates/us-pa.yml +506 -0
  150. data/data/plates/us-pr.yml +507 -0
  151. data/data/plates/us-ri.yml +445 -0
  152. data/data/plates/us-sc.yml +605 -0
  153. data/data/plates/us-sd.yml +428 -0
  154. data/data/plates/us-tn.yml +471 -0
  155. data/data/plates/us-tx.yml +535 -0
  156. data/data/plates/us-ut.yml +384 -0
  157. data/data/plates/us-va.yml +567 -0
  158. data/data/plates/us-vi.yml +489 -0
  159. data/data/plates/us-vt.yml +458 -0
  160. data/data/plates/us-wa.yml +484 -0
  161. data/data/plates/us-wi.yml +509 -0
  162. data/data/plates/us-wv.yml +446 -0
  163. data/data/plates/us-wy.yml +523 -0
  164. data/data/plates/va.yml +604 -0
  165. data/data/plates/za.yml +1141 -0
  166. data/data/vehicles.json +160653 -105090
  167. data/lib/vehicles/configuration.rb +17 -3
  168. data/lib/vehicles/dataset.rb +73 -18
  169. data/lib/vehicles/fuzzy.rb +115 -0
  170. data/lib/vehicles/http.rb +48 -0
  171. data/lib/vehicles/make.rb +36 -6
  172. data/lib/vehicles/mcp_server.rb +5 -5
  173. data/lib/vehicles/model.rb +21 -2
  174. data/lib/vehicles/plates/series.rb +172 -18
  175. data/lib/vehicles/plates/template_fill.rb +188 -0
  176. data/lib/vehicles/plates/templates.rb +162 -0
  177. data/lib/vehicles/plates.rb +12 -0
  178. data/lib/vehicles/providers/hosted_provider.rb +28 -55
  179. data/lib/vehicles/validators/vehicle_make_validator.rb +3 -1
  180. data/lib/vehicles/validators/vehicle_model_validator.rb +1 -1
  181. data/lib/vehicles/version.rb +1 -1
  182. data/lib/vehicles.rb +32 -16
  183. data/rakelib/data_refresh.rake +109 -0
  184. data/rakelib/plates_refresh.rake +29 -0
  185. data/sig/vehicles.rbs +18 -0
  186. metadata +164 -2
data/data/plates/de.yml CHANGED
@@ -40,16 +40,45 @@
40
40
  # enforces with a negative lookahead (the only illegal combination the
41
41
  # quantifiers alone would admit is 3 letters + 2 letters + 4 digits = 9).
42
42
  #
43
- # 3. PERIOD CLAIMS ARE INSTRUMENT-DATED, AND SAY SO. The German
44
- # Unterscheidungszeichen + Erkennungsnummer system, and the Euro-Feld
45
- # design, both predate the FZV 2023 by decades. NO PRIMARY for either origin
46
- # date was secured in this pass (see the L0 report's gap list), so every
47
- # entry carries `period_evidence: instrument-in-force` and a note saying in
48
- # terms that the year is the date of the instrument that STATES the rule, not
49
- # the date the series began. The two exceptions are dated from their own
50
- # enabling statute: the E-Kennzeichen (Elektromobilitätsgesetz of
51
- # 5 June 2015) and the moped insurance-plate colour cycle (anchored on the
52
- # Verkehrsjahr the FZV names).
43
+ # 3. PERIOD CLAIMS ARE DATED FROM THE CREATING INSTRUMENTS (L1 redate pass,
44
+ # 2026-08-02). The L0 file carried FZV-2023 consolidation dates as series
45
+ # starts and said so; this pass replaced them with the actual era
46
+ # boundaries, each pinned to its Bundesgesetzblatt instrument (official
47
+ # scans via offenegesetze.de, all fetched 2026-08-02):
48
+ # * 1956 — Verordnung zur Änderung von Vorschriften des
49
+ # Straßenverkehrsrechts vom 14. März 1956 (BGBl. I S. 199; issue Nr. 15,
50
+ # ausgegeben 9.4.1956): creates the Unterscheidungszeichen +
51
+ # Erkennungsnummer system (§ 23 Abs. 2 StVZO), black-on-white AND the
52
+ # green tax-exempt colour (§ 60 Abs. 1), the Anlage IV official/
53
+ # diplomatic/military codes, and — Anlage II — the SAME five serial
54
+ # shapes FZV 2023 Anlage 1 still prints. In force 1.7.1956 for newly
55
+ # plated vehicles; old-system plates until 1.7.1958.
56
+ # * 1995 — 21. ÄndVstVR vom 6. Januar 1995 (BGBl. I S. 8): inserts § 60
57
+ # Abs. 1b StVZO ("Einführung des Euro-Kennzeichens", auf Antrag) +
58
+ # Anlage Va. In force 15.1.1995.
59
+ # * 1996/97 — 23. ÄndVstVR vom 12. November 1996 (BGBl. I S. 1738):
60
+ # Saisonkennzeichen (§ 23 Abs. 1b + Anlage Vb), in force 1.3.1997.
61
+ # * 1997 — 25. ÄndVstVR vom 22. Juli 1997 (BGBl. I S. 1889):
62
+ # Oldtimerkennzeichen with the H (§ 21c, § 23 Abs. 1c, Anlage Vc),
63
+ # in force 29.7.1997 (day after Verkündung 28.7.1997).
64
+ # * 1998 — 27. ÄndVstVR vom 9. März 1998 (BGBl. I S. 441):
65
+ # Kurzzeitkennzeichen (§ 28 StVZO + Anlage Vd), Art. 1 in force
66
+ # 14.3.1998 (day after Verkündung 13.3.1998), remainder 1.5.1998.
67
+ # * 2000 — 32. ÄndVstVR vom 20. Juli 2000 (BGBl. I S. 1090): Euro plate
68
+ # mandatory for plates newly fitted from 1.11.2000; pre-existing
69
+ # plates "gelten weiter"; § 60 Abs. 1b repealed.
70
+ # * 2006/07 — FZV vom 25. April 2006 (BGBl. I S. 988, Art. 1 of the
71
+ # Neuordnungs-VO), in force 1.3.2007: first FZV codification; the
72
+ # "03"/"04", "06", "07" numbering rules and the export digits-then-
73
+ # letter rule verbatim — the honest UPPER BOUND where no creating
74
+ # instrument was secured (dealer-red, oldtimer-red, export).
75
+ # * 2015 — EmoG vom 5. Juni 2015 (BGBl. I S. 898) + 50. ÄndVstVR vom
76
+ # 15. September 2015 (BGBl. I S. 1573, § 9a FZV 2011), in force
77
+ # 26.9.2015: the E-Kennzeichen. The one L0 date that was already true.
78
+ # Where only a consolidation evidences a rule, the series says so with
79
+ # `period_evidence: instrument-in-force-upper-bound` and a gap note at the
80
+ # point of use; folklore years are flagged, never asserted, and conflicts
81
+ # between an instrument and a secondary are RECORDED, not averaged.
53
82
  #
54
83
  # REGEX POLICY: as in plates/nl.yml, `format.regex` is the lint-round-trippable
55
84
  # regex and `format.regex_strict` (proposed schema addition) carries the
@@ -72,6 +101,156 @@ instrument:
72
101
  replaces: "FZV 2011 (V 9232-14 v. 3.2.2011 I 139)"
73
102
  source: "https://www.gesetze-im-internet.de/fzv_2023/FZV.pdf # front matter: Ausfertigungsdatum, Vollzitat, Stand, 'Ersetzt V 9232-14 v. 3.2.2011 I 139 (FZV 2011)', 'Textnachweis ab: 1.9.2023'"
74
103
 
104
+ # ---------------------------------------------------------------------------
105
+ # The era instruments (L1 redate pass, 2026-08-02) — each cited ONCE here with
106
+ # its verbatim key passage; per-series sources point at the same URLs. All
107
+ # URLs are the official Bundesgesetzblatt scans republished at
108
+ # media.offenegesetze.de (stable, unpaywalled); the citation of record is the
109
+ # BGBl page. All fetched and read 2026-08-02.
110
+ # ---------------------------------------------------------------------------
111
+ era_instruments:
112
+ v1956:
113
+ citation: "Verordnung zur Änderung von Vorschriften des Straßenverkehrsrechts vom 14. März 1956, BGBl. 1956 I S. 199 (Nr. 15, ausgegeben zu Bonn am 9. April 1956)"
114
+ url: "https://media.offenegesetze.de/bgbl1/1956/bgbl1_1956_15.pdf # fetched 2026-08-02"
115
+ creates: >-
116
+ The district-prefix system. § 23 Abs. 2 StVZO (new version), verbatim:
117
+ "Das von der Zulassungsstelle zuzuteilende Kennzeichen enthält das
118
+ Unterscheidungszeichen für den Verwaltungsbezirk und die
119
+ Erkennungsnummer, unter der das Fahrzeug bei der Zulassungsstelle
120
+ eingetragen ist. Das Unterscheidungszeichen für den Verwaltungsbezirk
121
+ besteht aus einem bis drei Buchstaben nach dem Plan in Anlage I. Die
122
+ Erkennungsnummer besteht aus Buchstaben und Zahlen." § 60 Abs. 1 (new
123
+ version), verbatim: "Unterscheidungszeichen und Erkennungsnummern (§ 23
124
+ Abs. 2) sind in schwarzer Schrift auf weißem Grund anzugeben. Bei
125
+ Fahrzeugen, deren Halten von der Kraftfahrzeugsteuer befreit ist, ist
126
+ die Beschriftung grün auf weißem Grund ... Form, Größe und Ausgestaltung
127
+ von Kennzeichen müssen den Mustern und Angaben in Anlage V entsprechen."
128
+ grammar_continuity: >-
129
+ Anlage II (1956), "Reihenfolge für die Ausgabe der ... Fahrzeugerkennungs-
130
+ nummern": Gruppe I a) "A 1 - A 999 bis Z 1 - Z 999", b) "AA 1 - AA 99 bis
131
+ ZZ 1 - ZZ 99"; Gruppe II "AA 100 - AA 999 bis ZZ 100 - ZZ 999"; Gruppe
132
+ III a) "A 1000 - A 9999 bis Z 1000 - Z 9999", b) "AA 1000 - AA 9999 bis
133
+ ZZ 1000 - ZZ 9999" — the SAME five shapes as FZV 2023 Anlage 1, with
134
+ every block starting at 1, 100 or 1000 (no leading zeros), 70 years
135
+ earlier. The 1956 alphabet was narrower (20 letters; per the main
136
+ Wikipedia locator J replaced I from 7.11.1956, B/F/G added 12.8.1992,
137
+ I/O/Q added 26.5.2000 — SECONDARY, recorded not asserted).
138
+ commencement: >-
139
+ § 72a StVZO (inserted), verbatim: "§ 60 Abs. 1 und 4 sowie die Anlagen I
140
+ bis V | am 1. Juli 1956 für Fahrzeuge, denen die Zulassungsstelle ein
141
+ Kennzeichen neuen Rechts zuteilt, | am 1. Juli 1958 für die übrigen
142
+ kennzeichenpflichtigen Fahrzeuge" (same staging for § 23 Abs. 2). So the
143
+ system starts 1.7.1956 and the pre-1956 occupation-era plates end by
144
+ 1.7.1958.
145
+ v1995_euro:
146
+ citation: "Einundzwanzigste Verordnung zur Änderung straßenverkehrsrechtlicher Vorschriften (21. ÄndVstVR) vom 6. Januar 1995, BGBl. 1995 I S. 8 (Nr. 1, ausgegeben zu Bonn am 12. Januar 1995)"
147
+ url: "https://media.offenegesetze.de/bgbl1/1995/bgbl1_1995_1.pdf # fetched 2026-08-02"
148
+ creates: >-
149
+ The Euro-Kennzeichen. Inserts § 60 Abs. 1b StVZO, verbatim: "(1b)
150
+ Abweichend von Absatz 1 Satz 5 Halbsatz 1 und Absatz 1a Satz 1 dürfen
151
+ auf Antrag Kennzeichen zugeteilt werden, die mit einem blauen Euro-Feld
152
+ und mit einer Beschriftung nach Anlage Va versehen sind. Die Kennzeichen
153
+ müssen reflektierend sein und nach Maßgabe der Anlage Va dem Normblatt
154
+ DIN 74 069, Ausgabe Mai 1989, entsprechen sowie auf der Vorderseite das
155
+ DIN-Prüf- und Überwachungszeichen mit der zugehörigen Registernummer
156
+ tragen." Inserts Anlage Va, "Muster und Maße der Euro-Kennzeichen"
157
+ (published in an Anlageband to BGBl 1995 I Nr. 1 — the Anlageband
158
+ itself, which carries the Schriftmuster, was NOT fetched: recorded gap).
159
+ Closing formula, verbatim: "Diese Verordnung tritt am 15. Januar 1995
160
+ in Kraft." AUF ANTRAG — the Euro plate is optional from 15.1.1995 and
161
+ only becomes mandatory for newly fitted plates on 1.11.2000 (v2000).
162
+ v2000_mandate:
163
+ citation: "Zweiunddreißigste Verordnung zur Änderung straßenverkehrsrechtlicher Vorschriften (32. ÄndVStVR) vom 20. Juli 2000, BGBl. 2000 I S. 1090 (Nr. 34)"
164
+ url: "https://media.offenegesetze.de/bgbl1/2000/bgbl1_2000_34.pdf # fetched 2026-08-02"
165
+ creates: >-
166
+ The Euro-plate mandate and the DIN-era issuance cutoff. New transitional
167
+ provision in § 72 Abs. 2 StVZO, verbatim: "§ 60 Abs. 1 Satz 5 erster
168
+ Halbsatz (Form, Größe und Ausgestaltung einschließlich Beschriftung der
169
+ Euro-Kennzeichen) ist spätestens ab dem 1. November 2000 auf
170
+ Kraftfahrzeuge und Anhänger anzuwenden, die von diesem Tag ab erstmals
171
+ in den Verkehr kommen oder aus anderem Anlass mit einem neuen
172
+ Kennzeichen ausgerüstet werden. Kennzeichen, die vor dem 1. November
173
+ 2000 zugeteilt worden sind und in Form, Größe und Ausgestaltung § 60
174
+ Abs. 1 Satz 5 erster Halbsatz und Anlage V in der vor diesem Termin
175
+ geltenden Fassung entsprechen, gelten weiter." And: "Die
176
+ Übergangsvorschrift '§ 60 Abs. 1b (Einführung des Euro-Kennzeichens)'
177
+ wird aufgehoben." Also repeals the Deutsche-Bundespost successor-company
178
+ registration transitional — the tail end of the 1956 Anlage IV's BP/DB
179
+ world.
180
+ v1996_saison:
181
+ citation: "Dreiundzwanzigste Verordnung zur Änderung straßenverkehrsrechtlicher Vorschriften (23. ÄndVstVR) vom 12. November 1996, BGBl. 1996 I S. 1738 (Nr. 60, ausgegeben zu Bonn am 21. November 1996)"
182
+ url: "https://media.offenegesetze.de/bgbl1/1996/bgbl1_1996_60.pdf # fetched 2026-08-02"
183
+ creates: >-
184
+ The Saisonkennzeichen. Art. 1 Nr. 2 Buchstabe a inserts § 23 Abs. 1b
185
+ StVZO, verbatim: "(1b) Auf Antrag wird für ein Fahrzeug ein auf einen
186
+ nach vollen Monaten bemessenen Zeitraum (Zulassungszeitraum) befristetes
187
+ amtliches Kennzeichen nach Anlage Vb zugeteilt, das jedes Jahr in diesem
188
+ Zeitraum auch wiederholt verwendet werden darf (Saisonkennzeichen). Das
189
+ Fahrzeug darf auf öffentlichen Straßen nur während des auf diesem
190
+ Kennzeichen angegebenen Zeitraums in Betrieb gesetzt oder abgestellt
191
+ werden." Plus Anlage Vb "Muster und Maße der Saisonkennzeichen".
192
+ Art. 4, verbatim: "Artikel 1 Nr. 1, 2 Buchstabe a, Nr. 3, 6, 7
193
+ Buchstabe d, Nr. 9, 13 Buchstabe b Doppelbuchstabe bb, Nr. 14 Buchstabe
194
+ b Doppelbuchstabe bb, Nr. 15, 17 Buchstabe b, Artikel 2 und 3 treten am
195
+ 1. März 1997 in Kraft" — the Saison provisions are in that list, so
196
+ issuance begins 1.3.1997.
197
+ v1997_oldtimer:
198
+ citation: "Fünfundzwanzigste Verordnung zur Änderung straßenverkehrsrechtlicher Vorschriften (25. ÄndVstVR) vom 22. Juli 1997, BGBl. 1997 I S. 1889 (Nr. 52, ausgegeben zu Bonn am 28. Juli 1997)"
199
+ url: "https://media.offenegesetze.de/bgbl1/1997/bgbl1_1997_52.pdf # fetched 2026-08-02"
200
+ creates: >-
201
+ The Oldtimerkennzeichen (H). Inserts § 21c StVZO (Betriebserlaubnis als
202
+ Oldtimer) and § 23 Abs. 1c StVZO ("... zugeteilt (Oldtimerkennzeichen)",
203
+ per Anlage Vc). Anlage Vc "Muster und Maße der Oldtimerkennzeichen",
204
+ verbatim: "Der Kennbuchstabe 'H' nach der Zahl in der Erkennungsnummer
205
+ gibt an, daß für das Fahrzeug eine Betriebserlaubnis als Oldtimer gemäß
206
+ § 21c erteilt worden ist." and "Mehr als sieben Stellen (Buchstaben und
207
+ Ziffern ohne Kennbuchstabe 'H') auf einem Kennzeichen ..." — the
208
+ seven-position cap is 1997-original. Art. 3, verbatim: "Diese Verordnung
209
+ tritt am Tage nach der Verkündung in Kraft." — i.e. 29 July 1997.
210
+ Also (Nr. 8) inserts "der Bundesanstalt Technisches Hilfswerk," into the
211
+ Anlage IV heading — THW joins the official-plate table in 1997.
212
+ v1998_kurzzeit:
213
+ citation: "Siebenundzwanzigste Verordnung zur Änderung straßenverkehrsrechtlicher Vorschriften (27. ÄndVstVR) vom 9. März 1998, BGBl. 1998 I S. 441 (Nr. 14, ausgegeben zu Bonn am 13. März 1998)"
214
+ url: "https://media.offenegesetze.de/bgbl1/1998/bgbl1_1998_14.pdf # fetched 2026-08-02"
215
+ creates: >-
216
+ The Kurzzeitkennzeichen. Art. 1 amends § 28 StVZO ("Kurzzeitkennzeichen
217
+ zuzuteilen und besondere Fahrzeugscheine nach Muster 4, auch ohne
218
+ vorherige Bezeichnung des Fahrzeugs ..."; "(5) Kurzzeitkennzeichen sind
219
+ in schwarzer [Schrift] ... herzustellen") and adds Anlage Vd "Muster und
220
+ Maße der Kurzzeitkennzeichen". Art. 5, verbatim: "Die Artikel 1 und 3
221
+ Nr. 2b und 2g sowie Artikel 4 treten am Tage nach der Verkündung in
222
+ Kraft. Im übrigen tritt die Verordnung am 1. Mai 1998 in Kraft." — the
223
+ creating StVZO provisions are in force 14.3.1998. Art. 4 amends § 7
224
+ Abs. 2 Nr. 5 IntKfzV (export plates): the Dienstsiegel becomes "mit
225
+ einem Durchmesser von 35 mm" beside the existing "(RAL 2002)" — proof
226
+ the red-sealed export regime predates the FZV.
227
+ v2006_fzv:
228
+ citation: "Verordnung zur Neuordnung des Rechts der Zulassung von Fahrzeugen zum Straßenverkehr und zur Änderung straßenverkehrsrechtlicher Vorschriften vom 25. April 2006, BGBl. 2006 I S. 988 (Nr. 21, ausgegeben zu Bonn am 29. April 2006) — Art. 1 = FZV 2006"
229
+ url: "https://media.offenegesetze.de/bgbl1/2006/bgbl1_2006_21.pdf # fetched 2026-08-02"
230
+ creates: >-
231
+ The first FZV. Art. 12 Abs. 2, verbatim: "Im Übrigen tritt diese
232
+ Verordnung am 1. März 2007 in Kraft." Verbatim rules used as UPPER
233
+ BOUNDS in this file: Kurzzeitkennzeichen "besteht die Erkennungsnummer
234
+ nur aus Ziffern und beginnt mit '03' oder '04'. Das Kurzzeitkennzeichen
235
+ enthält außerdem ein Ablaufdatum, das längstens auf fünf Tage ab der
236
+ Zuteilung zu bemessen [ist]"; rotes Kennzeichen "... nur aus Ziffern und
237
+ beginnt mit '06'"; rotes Oldtimerkennzeichen "... nur aus Ziffern und
238
+ beginnt mit '07'"; Ausfuhrkennzeichen "aus einer ein- bis vierstelligen
239
+ Zahl und einem nachfol[genden Buchstaben]". Anlage 3 already lists THW,
240
+ X ("Dienstfahrzeuge der auf Grund des Nordatlantikvertrages errichteten
241
+ internationalen militärischen Hauptquartiere ...") and the five new-Land
242
+ codes.
243
+ v2015_e:
244
+ citation: "Fünfzigste Verordnung zur Änderung straßenverkehrsrechtlicher Vorschriften (50. ÄndVstVR) vom 15. September 2015, BGBl. 2015 I S. 1573 (Nr. 36, ausgegeben zu Bonn am 25. September 2015)"
245
+ url: "https://media.offenegesetze.de/bgbl1/2015/bgbl1_2015_36.pdf # fetched 2026-08-02"
246
+ creates: >-
247
+ The E-Kennzeichen's issuing rule. Inserts § 9a FZV 2011 ("Kennzeichnung
248
+ elektrisch betriebener Fahrzeuge" — "den Kennbuchstaben 'E' im Anschluss
249
+ an die Er[kennungsnummer]") and Anlage 3a (the badge for foreign
250
+ electric vehicles, "zu § 9a Absatz 4"). "Diese Verordnung tritt am Tag
251
+ nach der Verkündung in Kraft." — i.e. 26 September 2015, the first day
252
+ an E plate could issue. § 9a FZV 2011 is today's § 11 FZV 2023.
253
+
75
254
  # ---------------------------------------------------------------------------
76
255
  # Jurisdiction-wide facts, cited once.
77
256
  # ---------------------------------------------------------------------------
@@ -173,8 +352,9 @@ series:
173
352
  - id: de-standard
174
353
  class: standard
175
354
  categories: [car, van, truck, bus, motorcycle, trailer]
176
- period: { start: 2023 }
177
- period_evidence: instrument-in-force
355
+ period: { start: 1995 } # 15.1.1995 — 21. ÄndVstVR in force (era_instruments.v1995_euro)
356
+ period_evidence: enabling-instrument
357
+ matching: strict
178
358
  format:
179
359
  pattern: "LL-LL 9999"
180
360
  regex: '\A(?![A-Z]{3}-[A-Z]{2} ?\d{4}\z)[A-Z]{1,3}-[A-Z]{1,2} ?\d{1,4}\z'
@@ -215,10 +395,14 @@ series:
215
395
  foreground: "#000000"
216
396
  border: { color: "#000000", note: "Anlage 4 permits black, GREEN or RED borders depending on plate type" }
217
397
  band: { side: left, color: "#003399", content: eu-stars+D, hex_basis: observed, note: "the FZV states the star-wreath ratio and cross-references Reg. 2411/98 for the 'D', but gives no RGB/RAL for the blue field" }
218
- emblem: { present: true, rendered: placeholder, note: "the Stempelplakette carries the FARBIGES WAPPEN DES LANDES (§ 12 Abs. 3) — a coat of arms per Land. PRD-PLATES §3 placeholder rule applies: 16 Land arms, none licence-cleared." }
398
+ emblem: { present: true, rendered: placeholder, note: "the Stempelplakette carries the FARBIGES WAPPEN DES LANDES (§ 12 Abs. 3) — a coat of arms per Land. PRD-PLATES §3 placeholder rule applied at write time; SUPERSEDED 2026-08-03: ALL 16 Land arms are licence-cleared in plates/_art/de-<land>/ (PD family, extmetadata-verified, ledgered) — depiction consumers may render the coloured arms in the seal. The remaining gap is the district→Land mapping (the future de-districts table) for serial-driven resolution." }
219
399
  seal: { name: Stempelplakette, diameter_mm: null, content: "coloured Land arms, Land name, registration authority name, unique Druckstücknummer, and a CONCEALED security code that can only be revealed irreversibly; self-destroying on removal", source_note: "§ 12 Abs. 3 FZV + Anlage 5" }
220
400
  rear_differs: false
221
401
  display: "front and rear on motor vehicles; rear only on trailers, motorcycles and class L5e vehicles; front only on single-axle tractors (§ 12 Abs. 5 FZV)"
402
+ spec_history:
403
+ - { from: 1995, to: 2000, basis: "§ 60 Abs. 1b StVZO (21. ÄndVstVR, in force 15.1.1995): Euro-Feld plates AUF ANTRAG — optional, parallel with DIN-era issuance; reflective per DIN 74069 Ausgabe Mai 1989 (updated to Ausgabe Juli 1996 by the 23. ÄndVstVR)" }
404
+ - { from: 2000, basis: "32. ÄndVStVR: Euro plate mandatory for vehicles first coming into traffic from 1.11.2000 and for ANY plate newly fitted from that day; pre-1.11.2000 plates 'gelten weiter'" }
405
+ - { from: 2023, basis: "FZV 2023 (BGBl. 2023 I Nr. 199): the consolidation this file's format and design claims cite; reflective per DIN 74069 Oct 2022" }
222
406
  region_encoding: "plates/_decode/de-districts.yml"
223
407
  region_encoding_mechanism: >-
224
408
  The Unterscheidungszeichen is 1-3 letters identifying the Verwaltungsbezirk of
@@ -250,25 +434,121 @@ series:
250
434
  - "https://www.gesetze-im-internet.de/fzv_2023/anlage_1.html # Anlage 1: the five Erkennungsnummer shapes and the umlaut exclusion, verbatim"
251
435
  - "https://www.gesetze-im-internet.de/fzv_2023/__12.html # § 12 Abs. 1: black on white, black-bordered; Abs. 2: reflective + DIN 74069; Abs. 5: front/rear rules"
252
436
  - "https://www.gesetze-im-internet.de/fzv_2023/anlage_4.html # Anlage 4 Abschnitt 1: dimensions, FE-Schrift, Euro-Feld, the eight-position cap; Abschnitt 2: the general plates"
437
+ - "https://media.offenegesetze.de/bgbl1/1995/bgbl1_1995_1.pdf # 21. ÄndVstVR vom 6.1.1995, BGBl. I S. 8 — § 60 Abs. 1b StVZO + Anlage Va 'Muster und Maße der Euro-Kennzeichen'; 'Diese Verordnung tritt am 15. Januar 1995 in Kraft.' PERIOD START. Fetched 2026-08-02"
438
+ - "https://media.offenegesetze.de/bgbl1/2000/bgbl1_2000_34.pdf # 32. ÄndVStVR vom 20.7.2000, BGBl. I S. 1090 — Euro plate mandatory for newly fitted plates from 1.11.2000; pre-existing plates 'gelten weiter'. Fetched 2026-08-02"
253
439
  notes: >-
254
- THE GERMAN STANDARD SERIES — the strongest region signal in the L0 pilot and
255
- the only one of the four pilot jurisdictions whose plate names its place of
256
- registration. PERIOD CAVEAT, stated plainly: 2023 is the date of the FZV that
257
- STATES this format, not the date the system began. The
258
- Unterscheidungszeichen + Erkennungsnummer system and the Euro-Feld design both
259
- long predate it (FZV 2011 before, StVZO before that); no primary for either
260
- origin date was secured, and inventing one was declined. No age is encoded on a
261
- German plate at all — unlike the UK, a German plate string carries region but
440
+ THE GERMAN STANDARD SERIES (Euro-Feld era) — the strongest region signal in
441
+ the pilot and the only pilot jurisdiction whose plate names its place of
442
+ registration. period.start 1995 is the CREATING instrument's own
443
+ commencement: the 21. ÄndVstVR of 6.1.1995 inserted § 60 Abs. 1b StVZO
444
+ ("auf Antrag ... blauen Euro-Feld ... nach Anlage Va") and entered force
445
+ 15.1.1995 (era_instruments.v1995_euro, quoted). Optional until 1.11.2000,
446
+ mandatory for newly fitted plates from that day (v2000_mandate, quoted) —
447
+ recorded in design.spec_history, not cut as a separate series, because
448
+ mark, serial grammar and colours did not change (the gb-standard-2001
449
+ BS-AU-145d/e precedent). FOLKLORE/SECONDARY, recorded not asserted: the
450
+ German Wikipedia locator and the enthusiast site kennzeichen-guide.de
451
+ report staged pre-instrument issuance — Berlin and Brandenburg from
452
+ January 1994, Sachsen from July 1994 — "auf Basis der abzusehenden
453
+ Bundesverordnung"; no instrument authorising 1994 issuance was located in
454
+ this pass, so 1994 is NOT this series' start and the conflict is recorded
455
+ here rather than averaged. The SERIAL GRAMMAR is far older than the
456
+ design: Anlage 1's five shapes are verbatim descendants of Anlage II of
457
+ the 1956 instrument (see de-standard-1956 and
458
+ era_instruments.v1956.grammar_continuity). No age is encoded on a German
459
+ plate at all — unlike the UK, a German plate string carries region but
262
460
  never date.
263
461
 
462
+ # =========================================================================
463
+ # THE PRE-EURO STANDARD SERIES, 1956-2000 (DIN-Schrift era). Added by the
464
+ # L1 redate pass under the "current + one back" rule.
465
+ # =========================================================================
466
+ - id: de-standard-1956
467
+ class: standard
468
+ categories: [car, van, truck, bus, motorcycle, trailer]
469
+ period: { start: 1956, end: 2000 } # 1.7.1956 (v1956 § 72a) — 31.10.2000
470
+ # (v2000_mandate: Euro mandatory for
471
+ # plates fitted from 1.11.2000)
472
+ period_evidence: instrument-dated-both-ends
473
+ matching: strict
474
+ format:
475
+ pattern: "LL-LL 9999"
476
+ regex: '\A(?![A-Z]{3}-[A-Z]{2} ?\d{4}\z)[A-Z]{1,3}-[A-Z]{1,2} ?\d{1,4}\z'
477
+ regex_strict: '\A(?![A-Z]{3}-[A-Z]{2} ?\d{4}\z)[A-Z]{1,3}-[A-Z]{1,2} ?(?:[1-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3})\z'
478
+ charset:
479
+ notes: >-
480
+ 1956 grammar, Anlage II verbatim (era_instruments.v1956): the same
481
+ five blocks as today's Anlage 1, every block starting at 1, 100 or
482
+ 1000 — no leading zeros, which regex_strict carries. CAVEAT: the
483
+ 1956-era LETTER SET was narrower than A-Z (20 letters at launch; per
484
+ the Wikipedia locator J replaced I from 7.11.1956, B/F/G were added
485
+ 12.8.1992 and I/O/Q on 26.5.2000 — secondary, recorded not
486
+ asserted), so regex_strict is deliberately NOT narrowed to a
487
+ period-specific alphabet no primary was secured for.
488
+ max_positions_note: >-
489
+ No "acht Stellen" rule exists in the 1956 text; total length was
490
+ governed by which Anlage II GRUPPEN a district was allocated (the
491
+ Anlage I plan marks each district Gruppe I/II/III), which kept
492
+ combinations within the plate. The negative lookahead is retained from
493
+ de-standard as the de-facto outer bound; it is a modelling choice
494
+ here, not a quoted 1956 rule.
495
+ separator_note: >-
496
+ As on the Euro series: the gap between Unterscheidungszeichen and
497
+ Erkennungsnummer held the Stempelplakette; the hyphen and space are
498
+ the conventional textual rendering.
499
+ design:
500
+ plate: { w: 520, h: 110, unit: mm, note: "Anlage V (1956), 'c) Andere Kraftfahrzeuge und Anhänger, einzeilig': the 520 x 110 einzeilig drawing is 1956-original — the dimension predates the Euro plate by four decades" }
501
+ background: { color: "#FFFFFF", finish: painted, hex_basis: spec, spec_note: "§ 60 Abs. 1 StVZO (1956), verbatim: 'Unterscheidungszeichen und Erkennungsnummern (§ 23 Abs. 2) sind in schwarzer Schrift auf weißem Grund anzugeben.' Reflective sheeting only became required for new plates on 29.9.1989 per the Wikipedia locator — SECONDARY, recorded not asserted (no instrument secured); hence finish: painted with this note rather than an unsourced reflectivity claim." }
502
+ foreground: "#000000"
503
+ border: { color: "#000000" }
504
+ band: { side: none }
505
+ band_note: "no Euro-Feld — that is the boundary with de-standard; late DIN-era plates (1995-2000) ran in parallel with optional Euro plates"
506
+ font:
507
+ name: "DIN 1451 Mittelschrift (attribution); statutory object = the Anlage V (1956) Schriftmuster drawings"
508
+ note: >-
509
+ The 1956 instrument prescribes plate lettering by DRAWING (Anlage V),
510
+ exactly as the FZV 2023 does for FE-Schrift. "DIN-Kennzeichen" and
511
+ the DIN 1451 attribution are the universal secondary name for the
512
+ era's lettering (and FZV 2023 still names DIN 1451-2:1986-02 for
513
+ Bundeswehr plates); the 1956 gazette scan's drawings were not
514
+ measured in this pass, so the FONT NAME is recorded as attribution,
515
+ not as a quoted statutory name.
516
+ region_encoding: "plates/_decode/de-districts.yml"
517
+ region_encoding_mechanism: >-
518
+ § 23 Abs. 2 StVZO (1956), verbatim: the Kennzeichen contains "das
519
+ Unterscheidungszeichen für den Verwaltungsbezirk", "aus einem bis drei
520
+ Buchstaben nach dem Plan in Anlage I" — the district list was IN the
521
+ StVZO in 1956 (Anlage I, ~600 codes printed in BGBl. 1956 I Nr. 15) and
522
+ only later delegated to Bundesanzeiger publication (§ 9 Abs. 3 FZV
523
+ today). Decode rows for withdrawn 1956-era codes need period discipline;
524
+ the code list grew again in 1990/91 when the new Länder joined the
525
+ system.
526
+ sources:
527
+ - "https://media.offenegesetze.de/bgbl1/1956/bgbl1_1956_15.pdf # Verordnung zur Änderung von Vorschriften des Straßenverkehrsrechts vom 14.3.1956, BGBl. I S. 199 — § 23 Abs. 2 (district prefix + Erkennungsnummer, Anlage I plan), § 60 Abs. 1 (black on white), Anlage II (the five serial blocks), Anlage V (plate drawings, 520x110 einzeilig), § 72a (in force 1.7.1956 for newly plated vehicles; old plates until 1.7.1958). PERIOD START, verbatim quotes in era_instruments.v1956. Fetched 2026-08-02"
528
+ - "https://media.offenegesetze.de/bgbl1/2000/bgbl1_2000_34.pdf # 32. ÄndVStVR vom 20.7.2000, BGBl. I S. 1090 — PERIOD END: Euro form mandatory for plates newly fitted from 1.11.2000, so DIN-era issuance ends 31.10.2000; 'Kennzeichen, die vor dem 1. November 2000 zugeteilt worden sind ... gelten weiter' — ended-but-on-the-road, stated in the instrument itself. Fetched 2026-08-02"
529
+ notes: >-
530
+ THE DIN-SCHRIFT ERA, 1.7.1956 - 31.10.2000: black-on-white, no Euro
531
+ band, district prefix + Anlage II serial — the system the Euro series
532
+ inherited its grammar from, one series back per the L1 rule.
533
+ period.end 2000 is an ISSUANCE end with statutory grandfathering: plates
534
+ assigned before 1.11.2000 "gelten weiter" (v2000_mandate, verbatim), so
535
+ DIN plates remain lawful on continuously registered vehicles today —
536
+ the parallel-validity note the overlap rule requires. Overlaps
537
+ de-standard 1995-2000 because the Euro plate was optional ("auf Antrag")
538
+ in that window and both forms issued side by side. The pre-1956
539
+ occupation-era systems (white-on-black, 1948 four-zone codes) are
540
+ OUT OF SCOPE for L1 (historical depth is L4); the 1956 instrument's own
541
+ transitional gives them until 1.7.1958.
542
+
264
543
  # =========================================================================
265
544
  # HISTORIC — H suffix.
266
545
  # =========================================================================
267
546
  - id: de-historic-h
268
547
  class: historic
269
548
  categories: [car, van, truck, bus, motorcycle, trailer]
270
- period: { start: 2023 }
271
- period_evidence: instrument-in-force
549
+ period: { start: 1997 } # 29.7.1997 — 25. ÄndVstVR in force (era_instruments.v1997_oldtimer)
550
+ period_evidence: enabling-instrument
551
+ matching: strict
272
552
  format:
273
553
  pattern: "LL-LL 999H"
274
554
  regex: '\A[A-Z]{1,3}-[A-Z]{1,2} ?\d{1,4}H\z'
@@ -292,15 +572,29 @@ series:
292
572
  sources:
293
573
  - "https://www.gesetze-im-internet.de/fzv_2023/__10.html # § 10 Abs. 1: on application, a vehicle with a § 23 StVZO Gutachten is ASSIGNED an Oldtimerkennzeichen; it consists of Unterscheidungszeichen + Erkennungsnummer per § 9 Abs. 1 plus 'den Kennbuchstaben \"H\" als amtlichen Zusatz hinter der Erkennungsnummer'"
294
574
  - "https://www.gesetze-im-internet.de/fzv_2023/anlage_4.html # Anlage 4 Abschnitt 4: the H suffix's typographic rule and the seven/five/four-position caps"
575
+ - "https://media.offenegesetze.de/bgbl1/1997/bgbl1_1997_52.pdf # 25. ÄndVstVR vom 22.7.1997, BGBl. I S. 1889 — inserts § 21c StVZO (Betriebserlaubnis als Oldtimer), § 23 Abs. 1c ('Oldtimerkennzeichen') and Anlage Vc with the 'H' rule and the seven-position cap, verbatim in era_instruments.v1997_oldtimer; in force 29.7.1997. PERIOD START. Fetched 2026-08-02"
295
576
  notes: >-
296
- H-KENNZEICHEN. Note § 10 Abs. 1's discretion, which a claims model should
297
- record: the authority "kann im Einzelfall" count periods before first placing
298
- on the market during which the vehicle operated off public roads towards the
299
- minimum age in § 2 Satz 1 Nr. 22 FZV. The 30-year threshold itself lives in
300
- that definition and in § 23 StVZO, neither of which was fetched in this pass —
301
- the threshold is therefore a recorded gap, and the widely-repeated "30 years"
302
- is NOT asserted here as sourced. An H plate may also be a Saisonkennzeichen
303
- (Anlage 4 Abschnitt 4 Nr. 4 last sentence) or a Wechselkennzeichen.
577
+ H-KENNZEICHEN, created 1997: the 25. ÄndVstVR of 22.7.1997 inserted § 21c
578
+ and § 23 Abs. 1c StVZO plus Anlage Vc, in force 29.7.1997 — and the
579
+ seven-position cap this series still carries is 1997-original ("Mehr als
580
+ sieben Stellen ... ohne Kennbuchstabe 'H'", Anlage Vc verbatim). CONFLICT
581
+ RECORDED, NOT AVERAGED: the widely repeated claim that the first
582
+ H-Kennzeichen was assigned on 1 JULY 1997 (Wikipedia, attributing a KBA
583
+ Pressebericht 2001 figure of 57,960 Oldtimerkennzeichen; the KBA PDF was
584
+ not fetched in this pass) predates the creating instrument's entry into
585
+ force by four weeks; either the KBA date is loose or issuance rested on
586
+ something not located here. Until the KBA primary is fetched and read,
587
+ 1997 stands on the instrument and the 1-July story is flagged. Note
588
+ § 10 Abs. 1 FZV's discretion, which a claims model should record: the
589
+ authority "kann im Einzelfall" count off-road periods towards the minimum
590
+ age in § 2 Satz 1 Nr. 22 FZV. The 30-year threshold itself lives in that
591
+ definition and in § 23 StVZO, neither of which was fetched — the
592
+ threshold remains a recorded gap and the widely-repeated "30 years" is
593
+ NOT asserted here as sourced. H-Saisonkennzeichen exist since 1.10.2017
594
+ (BGBl. 2017 I S. 522, 553 per the Wikipedia locator — instrument not
595
+ fetched, recorded as locator only). An H plate may also be a
596
+ Saisonkennzeichen (Anlage 4 Abschnitt 4 Nr. 4 last sentence) or a
597
+ Wechselkennzeichen.
304
598
 
305
599
  # =========================================================================
306
600
  # ELECTRIC — E suffix. The one German series with a properly dated start.
@@ -310,6 +604,7 @@ series:
310
604
  categories: [car, van, truck, bus, motorcycle]
311
605
  period: { start: 2015 }
312
606
  period_evidence: enabling-statute
607
+ matching: strict
313
608
  format:
314
609
  pattern: "LL-LL 999E"
315
610
  regex: '\A[A-Z]{1,3}-[A-Z]{1,2} ?\d{1,4}E\z'
@@ -339,15 +634,20 @@ series:
339
634
  - "https://www.gesetze-im-internet.de/emog/EmoG.pdf # Elektromobilitätsgesetz, Ausfertigungsdatum 05.06.2015 (BGBl. I S. 898) — the enabling statute § 11 FZV keys off; note § 8 Abs. 2: the Act EXPIRES at the end of 31.12.2026"
340
635
  - "https://www.gesetze-im-internet.de/fzv_2023/__11.html # § 11 Abs. 1-2: an E-Kennzeichen is the § 9 Abs. 1 plate (optionally also a green or seasonal one) with 'den Kennbuchstaben \"E\" als amtlichen Zusatz hinter der Erkennungsnummer'; Abs. 4: the Anlage 3 badge route for foreign vehicles; Abs. 5: foreign E-markings are recognised as equivalent"
341
636
  - "https://www.gesetze-im-internet.de/fzv_2023/anlage_4.html # Anlage 4 Abschnitt 5a: E-Kennzeichen executed per Abschnitt 4, plus the Saison variants and position caps"
637
+ - "https://media.offenegesetze.de/bgbl1/2015/bgbl1_2015_36.pdf # 50. ÄndVstVR vom 15.9.2015, BGBl. I S. 1573 — inserts § 9a FZV 2011 ('den Kennbuchstaben \"E\" im Anschluss an die Erkennungsnummer') and Anlage 3a; 'tritt am Tag nach der Verkündung in Kraft' = 26.9.2015, the first day an E plate could issue. Fetched 2026-08-02"
342
638
  notes: >-
343
- E-KENNZEICHEN. period.start 2015 is a REAL start, not an instrument date: the
344
- Elektromobilitätsgesetz of 5 June 2015 created the eligibility § 11 FZV
345
- implements, so 2015 is the earliest possible issuance year. TIME BOMB WORTH
346
- RECORDING NOW: EmoG § 8 Abs. 2 provides that the Act ceases to be in force at
347
- the end of 31 December 2026 — inside the current audit horizon. Unless it is
348
- extended, this series' `period.end` becomes 2026 and the quarterly audit should
349
- re-check it. Also note § 79 Abs. 9 FZV carries a non-application footnote
350
- against § 11 which was not resolved in this pass (recorded gap).
639
+ E-KENNZEICHEN. period.start 2015 SURVIVED the L1 redate pass — the one L0
640
+ period that was already true: the Elektromobilitätsgesetz of 5 June 2015
641
+ created the eligibility, and the 50. ÄndVstVR of 15.9.2015 (BGBl. I
642
+ S. 1573, era_instruments.v2015_e) inserted the issuing rule § 9a FZV 2011
643
+ (today's § 11 FZV 2023), in force 26 September 2015 — so 2015 is both the
644
+ enabling-statute year and the first-issuance year, now pinned at both
645
+ ends. TIME BOMB WORTH RECORDING: EmoG § 8 Abs. 2 provides that the Act
646
+ ceases to be in force at the end of 31 December 2026 — inside the current
647
+ audit horizon. Unless it is extended, this series' `period.end` becomes
648
+ 2026 and the quarterly audit should re-check it. Also note § 79 Abs. 9
649
+ FZV carries a non-application footnote against § 11 which was not
650
+ resolved in this pass (recorded gap).
351
651
 
352
652
  # =========================================================================
353
653
  # SEASONAL.
@@ -355,8 +655,9 @@ series:
355
655
  - id: de-seasonal
356
656
  class: seasonal
357
657
  categories: [car, van, truck, bus, motorcycle, trailer]
358
- period: { start: 2023 }
359
- period_evidence: instrument-in-force
658
+ period: { start: 1997 } # 1.3.1997 — 23. ÄndVstVR Art. 4 (era_instruments.v1996_saison)
659
+ period_evidence: enabling-instrument
660
+ matching: strict
360
661
  format:
361
662
  pattern: "LL-LL 999"
362
663
  regex: '\A[A-Z]{1,3}-[A-Z]{1,2} ?\d{1,4}\z'
@@ -389,13 +690,23 @@ series:
389
690
  sources:
390
691
  - "https://www.gesetze-im-internet.de/fzv_2023/__10.html # § 10 Abs. 3: Saisonkennzeichen on application; Betriebszeitraum as an amtlicher Zusatz behind the Erkennungsnummer; full months, 2-11 months; green plates may also be seasonal; the operate-and-park prohibition"
391
692
  - "https://www.gesetze-im-internet.de/fzv_2023/anlage_4.html # Anlage 4 Abschnitt 5: the four seasonal plate forms and the month-field rule"
693
+ - "https://media.offenegesetze.de/bgbl1/1996/bgbl1_1996_60.pdf # 23. ÄndVstVR vom 12.11.1996, BGBl. I S. 1738 — Art. 1 Nr. 2a inserts § 23 Abs. 1b StVZO (the Saisonkennzeichen, verbatim in era_instruments.v1996_saison) + Anlage Vb; Art. 4 puts the Saison provisions in force 1.3.1997. PERIOD START. Fetched 2026-08-02"
392
694
  notes: >-
393
- SAISONKENNZEICHEN. Its own series rather than a variant because the DESIGN
394
- differs (an added operating-period field) while the serial grammar does not —
395
- the PRD-PLATES §2.3 test resolves cleanly. It composes with other classes:
396
- green plates (§ 10 Abs. 2), Oldtimerkennzeichen and E-Kennzeichen can all be
397
- issued AS seasonal plates, which means class is genuinely multi-valued here and
398
- the single-`class` schema cannot express the combination.
695
+ SAISONKENNZEICHEN, created by the 23. ÄndVstVR of 12.11.1996 with the
696
+ Saison provisions in force 1 March 1997 (Art. 4, quoted in
697
+ era_instruments.v1996_saison) — even the operate-OR-park prohibition is
698
+ 1996-original ("nur während des ... Zeitraums in Betrieb gesetzt oder
699
+ abgestellt werden", § 23 Abs. 1b verbatim). The 2-to-11-month bounds are
700
+ cited here to § 10 Abs. 3 FZV 2023 only: whether the 1996 original
701
+ carried the same bounds was not verified (the OCR of the fee-and-annex
702
+ pages is partial) — recorded gap, deliberately not asserted. Its own
703
+ series rather than a variant because the DESIGN differs (an added
704
+ operating-period field) while the serial grammar does not — the
705
+ PRD-PLATES §2.3 test resolves cleanly. It composes with other classes:
706
+ green plates (§ 10 Abs. 2), Oldtimerkennzeichen and E-Kennzeichen can
707
+ all be issued AS seasonal plates, which means class is genuinely
708
+ multi-valued here and the single-`class` schema cannot express the
709
+ combination.
399
710
 
400
711
  # =========================================================================
401
712
  # GREEN — TAX-EXEMPT. Green lettering on white, and the class vocabulary has
@@ -404,8 +715,9 @@ series:
404
715
  - id: de-green-taxexempt
405
716
  class: agricultural
406
717
  categories: [tractor, machine, trailer, truck]
407
- period: { start: 2023 }
408
- period_evidence: instrument-in-force
718
+ period: { start: 1956 } # 1.7.1956 — § 60 Abs. 1 Satz 2 StVZO as amended 14.3.1956 (era_instruments.v1956)
719
+ period_evidence: enabling-instrument
720
+ matching: strict
409
721
  format:
410
722
  pattern: "LL-LL 9999"
411
723
  regex: '\A(?![A-Z]{3}-[A-Z]{2} ?\d{4}\z)[A-Z]{1,3}-[A-Z]{1,2} ?\d{1,4}\z'
@@ -420,17 +732,32 @@ series:
420
732
  region_encoding: "plates/_decode/de-districts.yml"
421
733
  sources:
422
734
  - "https://www.gesetze-im-internet.de/fzv_2023/__10.html # § 10 Abs. 2: green lettering on white for vehicles whose keeper is exempt from motor-vehicle tax, with the seven-item exclusion list, plus the trailer special rule under § 10 KraftStG"
735
+ - "https://media.offenegesetze.de/bgbl1/1956/bgbl1_1956_15.pdf # V. vom 14.3.1956, BGBl. I S. 199 — § 60 Abs. 1 Satz 2 StVZO, verbatim: 'Bei Fahrzeugen, deren Halten von der Kraftfahrzeugsteuer befreit ist, ist die Beschriftung grün auf weißem Grund; dies gilt nicht für Fahrzeuge von Behörden, für Fahrzeuge des Personals von diplomatischen und konsularischen Vertretungen sowie für Fahrzeuge, deren Haltern Steuererlaß gewährt worden ist.' In force 1.7.1956 (§ 72a). PERIOD START. Fetched 2026-08-02"
423
736
  notes: >-
424
- GRÜNES KENNZEICHEN. CLASS CAVEAT, and it is a real one: the legal criterion is
425
- not agriculture at all — it is that "der Halter von der Kraftfahrzeugsteuer
426
- befreit ist". _meta/classes.yml has no tax-exempt class, so `agricultural` is
427
- recorded as the closest fit and the dominant population, but the statute's own
428
- exclusion list shows how much wider the category is: authority vehicles,
429
- diplomatic and consular staff vehicles, buses and 8-9-seat cars mainly in
430
- scheduled service and their trailers, Leichtkrafträder and Kleinkrafträder,
431
- vehicles of severely disabled persons under § 3a KraftStG, particularly
432
- low-emission vehicles, and any vehicle on a Wechselkennzeichen are all EXCLUDED
433
- from the green plate. Flagged as a vocabulary gap in the L0 report.
737
+ GRÜNES KENNZEICHEN, and the redate pass's biggest surprise: the green
738
+ tax-exempt colour rule is 1956-ORIGINAL, in the very sentence after
739
+ black-on-white — § 60 Abs. 1 Satz 2 StVZO as amended 14.3.1956, quoted
740
+ verbatim in the source line, in force 1.7.1956, and already with an
741
+ exclusion list of the same shape as today's § 10 Abs. 2 FZV (authority
742
+ vehicles and diplomatic/consular personnel vehicles excluded from
743
+ green). The 32. ÄndVStVR (2000) still carries a transitional headed
744
+ "§ 60 Abs. 1 Satz 2 (grüne amtliche Kennzeichen)" — continuity across
745
+ the era boundary. CLASS CAVEAT, and it is a real one: the legal
746
+ criterion is not agriculture at all — it is that "der Halter von der
747
+ Kraftfahrzeugsteuer befreit ist". _meta/classes.yml has no tax-exempt
748
+ class, so `agricultural` is recorded as the closest fit and the dominant
749
+ population, but the statute's own exclusion list shows how much wider
750
+ the category is: authority vehicles, diplomatic and consular staff
751
+ vehicles, buses and 8-9-seat cars mainly in scheduled service and their
752
+ trailers, Leichtkrafträder and Kleinkrafträder, vehicles of severely
753
+ disabled persons under § 3a KraftStG, particularly low-emission
754
+ vehicles, and any vehicle on a Wechselkennzeichen are all EXCLUDED from
755
+ the green plate. Flagged as a vocabulary gap in the L0 report. DESIGN
756
+ CAVEAT for the period claim: the green plate here carries today's
757
+ Euro-band design; its 1956-1995 execution was the DIN form (green on
758
+ white, no band). The colour RULE is continuous since 1956; the current
759
+ DESIGN is not — same split as de-standard vs de-standard-1956, recorded
760
+ here instead of cutting a low-value historical twin (L4 work).
434
761
 
435
762
  # =========================================================================
436
763
  # DEALER — rote Kennzeichen, digits-only beginning 06.
@@ -438,8 +765,12 @@ series:
438
765
  - id: de-dealer-red
439
766
  class: dealer
440
767
  categories: [car, van, truck, bus, motorcycle, trailer]
441
- period: { start: 2023 }
442
- period_evidence: instrument-in-force
768
+ period: { start: 2007 } # UPPER BOUND — the "06" rule verbatim in the
769
+ # FZV 2006, in force 1.3.2007; the series is
770
+ # older and its creating instrument was not
771
+ # secured (see notes)
772
+ period_evidence: instrument-in-force-upper-bound
773
+ matching: strict
443
774
  format:
444
775
  pattern: "LL-06999"
445
776
  regex: '\A[A-Z]{1,3}-06\d{1,4}\z'
@@ -457,21 +788,38 @@ series:
457
788
  sources:
458
789
  - "https://www.gesetze-im-internet.de/fzv_2023/__41.html # § 41: Prüfungs-, Probe- und Überführungsfahrten; Abs. 1 the red-on-white colour rule; Abs. 2 assignment to trustworthy manufacturers, parts makers, workshops, dealers and trailer makers (plus THW, Bundespolizei, BKA, Länder police, Bundeswehr, customs) for REPEATED use on DIFFERENT vehicles, and 'einer nur aus Ziffern bestehenden und mit \"06\" beginnenden Erkennungsnummer'; Abs. 3 the per-trip Fahrzeugscheinheft log, kept one year"
459
790
  - "https://www.gesetze-im-internet.de/fzv_2023/anlage_4.html # Anlage 4 Abschnitt 7: red script and red border; Anlage 13 is the Fahrzeugscheinheft"
791
+ - "https://media.offenegesetze.de/bgbl1/2006/bgbl1_2006_21.pdf # FZV vom 25.4.2006, BGBl. I S. 988 — the '06' rule verbatim ('... nur aus Ziffern und beginnt mit \"06\"'), in force 1.3.2007 (Art. 12 Abs. 2). PERIOD UPPER BOUND. Fetched 2026-08-02"
792
+ - "https://media.offenegesetze.de/bgbl1/1998/bgbl1_1998_14.pdf # 27. ÄndVstVR vom 9.3.1998, BGBl. I S. 441 — Art. 1 amends the § 28 StVZO rote-Kennzeichen machinery ('Für die mit roten Kennzeichen versehenen ...') and, per its other articles in force 1.5.1998, ends red-plate transfer use by private persons; evidences the red-plate regime pre-FZV without stating the 06 numbering. Fetched 2026-08-02"
460
793
  notes: >-
461
794
  ROTE KENNZEICHEN — the German dealer/trade plate, and the cleanest "06"
462
- identification in the dataset. BINDING NOTE: like Swiss plates but for a
463
- different reason, this plate does NOT bind to a vehicle — it binds to a
464
- BUSINESS and moves between vehicles, which is why `binding: business` is set on
465
- the series and why a vehicle-keyed consumer must not join on it. § 41 Abs. 3
466
- requires a written per-trip record (plate, date, start and end, driver and
467
- address, vehicle class, make, VIN and route), retained for a year — the
468
- compensating audit trail for an untethered plate.
795
+ identification in the dataset. PERIOD, honestly: 2007 is an UPPER BOUND —
796
+ the earliest instrument secured in this pass that states the digits-only
797
+ "06" rule is the first FZV (25.4.2006, in force 1.3.2007, verbatim in
798
+ era_instruments.v2006_fzv). The regime is decades older: § 28 StVZO
799
+ carried red plates before the FZV (the 1998 instrument amending it is
800
+ pinned above), and the enthusiast/Wikipedia lore that red plates exist
801
+ "since the 1920s" and took district-code + number form in 1956 is
802
+ FLAGGED AS UNSOURCED — the 14.3.1956 instrument was read in full and
803
+ does not touch § 28, so the 1956 story is not asserted. Locating the
804
+ instrument that first fixed the 05/06/07 number blocks (a pre-2006 StVZO
805
+ amendment or a Verkehrsblatt directive) is the recorded gap. BINDING
806
+ NOTE: like Swiss plates but for a different reason, this plate does NOT
807
+ bind to a vehicle — it binds to a BUSINESS and moves between vehicles,
808
+ which is why `binding: business` is set on the series and why a
809
+ vehicle-keyed consumer must not join on it. § 41 Abs. 3 requires a
810
+ written per-trip record (plate, date, start and end, driver and address,
811
+ vehicle class, make, VIN and route), retained for a year — the
812
+ compensating audit trail for an untethered plate. Also worth recording:
813
+ FZV 2023 § 41 Abs. 4 gives technical inspection bodies the "05" block —
814
+ an unmodelled sibling series (05 = Prüfstellen) sharing this format.
469
815
 
470
816
  - id: de-oldtimer-red
471
817
  class: dealer
472
818
  categories: [car, van, truck, bus, motorcycle]
473
- period: { start: 2023 }
474
- period_evidence: instrument-in-force
819
+ period: { start: 2007 } # UPPER BOUND — the "07" rule verbatim in the
820
+ # FZV 2006, in force 1.3.2007 (see notes)
821
+ period_evidence: instrument-in-force-upper-bound
822
+ matching: strict
475
823
  format:
476
824
  pattern: "LL-07999"
477
825
  regex: '\A[A-Z]{1,3}-07\d{1,4}\z'
@@ -484,14 +832,23 @@ series:
484
832
  band: { side: left, color: "#003399", content: eu-stars+D }
485
833
  sources:
486
834
  - "https://www.gesetze-im-internet.de/fzv_2023/__43.html # § 43: trips to and from Oldtimer events need neither Betriebserlaubnis nor Zulassung if the vehicle carries a rotes Oldtimerkennzeichen; Abs. 2 applies § 41 Abs. 2-6 and requires 'einer nur aus Ziffern bestehenden und mit den Ziffern \"07\" beginnenden Erkennungsnummer', with the Anlage 15 Fahrzeugscheinheft"
835
+ - "https://media.offenegesetze.de/bgbl1/2006/bgbl1_2006_21.pdf # FZV vom 25.4.2006, BGBl. I S. 988 — 'Das rote Oldtimerkennzeichen besteht aus einem Unterscheidungszeichen und einer Erkennungsnummer jeweils nach § 8 Abs. 1, jedoch besteht die Erkennungsnummer nur aus Ziffern und beginnt mit \"07\"', in force 1.3.2007 (Art. 12 Abs. 2). PERIOD UPPER BOUND. Fetched 2026-08-02"
487
836
  notes: >-
488
- ROTES OLDTIMERKENNZEICHEN — the 07 series. Distinguished from the 06 dealer
489
- plate by two digits and by one crucial restriction: § 43 Abs. 2 provides that
490
- this plate "nur an dem Fahrzeug verwendet werden darf, für das es ausgegeben
491
- wurde", so unlike the 06 plate it is NOT freely transferable between vehicles.
492
- CLASS CAVEAT: recorded as `dealer` because it shares § 41's machinery, but it
493
- is functionally a historic-vehicle event plate; a class vocabulary with a
494
- `historic` and a `dealer` value cannot express "both".
837
+ ROTES OLDTIMERKENNZEICHEN — the 07 series. PERIOD, honestly: 2007 is an
838
+ UPPER BOUND — the FZV 2006 states the "07" rule verbatim (source line;
839
+ in force 1.3.2007) and is the earliest instrument secured for it. The
840
+ series demonstrably predates that codification: the Wikipedia locator
841
+ records that BEFORE 1 March 2007 (the FZV's own commencement day) the 07
842
+ plate also served 20-year-old Youngtimers — a pre-FZV practice under the
843
+ § 28 StVZO red-plate machinery — but no StVZO-era instrument stating
844
+ "07" was located; that instrument is the recorded gap. Distinguished
845
+ from the 06 dealer plate by two digits and by one crucial restriction:
846
+ § 43 Abs. 2 provides that this plate "nur an dem Fahrzeug verwendet
847
+ werden darf, für das es ausgegeben wurde", so unlike the 06 plate it is
848
+ NOT freely transferable between vehicles. CLASS CAVEAT: recorded as
849
+ `dealer` because it shares § 41's machinery, but it is functionally a
850
+ historic-vehicle event plate; a class vocabulary with a `historic` and a
851
+ `dealer` value cannot express "both".
495
852
 
496
853
  # =========================================================================
497
854
  # SHORT-TERM AND EXPORT — the two date-bearing German plates.
@@ -499,8 +856,9 @@ series:
499
856
  - id: de-shortterm
500
857
  class: temporary
501
858
  categories: [car, van, truck, bus, motorcycle, trailer]
502
- period: { start: 2023 }
503
- period_evidence: instrument-in-force
859
+ period: { start: 1998 } # 14.3.1998 — 27. ÄndVstVR Art. 1 in force (era_instruments.v1998_kurzzeit)
860
+ period_evidence: enabling-instrument
861
+ matching: strict
504
862
  format:
505
863
  pattern: "LL-03999"
506
864
  regex: '\A[A-Z]{1,3}-0[34]\d{1,4}\z'
@@ -522,17 +880,34 @@ series:
522
880
  sources:
523
881
  - "https://www.gesetze-im-internet.de/fzv_2023/__42.html # § 42 Abs. 1: conditions (type-approved or individually approved, valid HU/SP, insurance); Abs. 4: 'einer nur aus Ziffern bestehenden und mit \"03\" oder \"04\" beginnenden Erkennungsnummer' plus the five-day expiry date; Abs. 3: need not be firmly affixed"
524
882
  - "https://www.gesetze-im-internet.de/fzv_2023/anlage_4.html # Anlage 4 Abschnitt 6: the three Kurzzeitkennzeichen forms, the yellow/black date field, the 35 mm blue seal"
883
+ - "https://media.offenegesetze.de/bgbl1/1998/bgbl1_1998_14.pdf # 27. ÄndVstVR vom 9.3.1998, BGBl. I S. 441 — Art. 1 creates the Kurzzeitkennzeichen in § 28 StVZO ('Kurzzeitkennzeichen sind in schwarzer [Schrift] ... herzustellen') + Anlage Vd; Art. 5: Art. 1 in force 14.3.1998, remainder 1.5.1998. PERIOD START, quotes in era_instruments.v1998_kurzzeit. Fetched 2026-08-02"
884
+ - "https://media.offenegesetze.de/bgbl1/2006/bgbl1_2006_21.pdf # FZV vom 25.4.2006, BGBl. I S. 988 — '... nur aus Ziffern und beginnt mit \"03\" oder \"04\". Das Kurzzeitkennzeichen enthält außerdem ein Ablaufdatum, das längstens auf fünf Tage ab der Zuteilung zu bemessen [ist]', in force 1.3.2007 — the earliest instrument secured that states the 03 option. Fetched 2026-08-02"
525
885
  notes: >-
526
- KURZZEITKENNZEICHEN — five days, a yellow expiry field, and a blue seal
527
- instead of the usual Land-arms Stempelplakette. Unlike the 06 dealer plate it
528
- is tied to ONE vehicle (§ 42 Abs. 3 Nr. 2) and, unlike an ordinary plate, it
529
- need not be firmly attached.
886
+ KURZZEITKENNZEICHEN, created by the 27. ÄndVstVR of 9.3.1998 (Art. 1, in
887
+ force 14 March 1998) as the black-script short-term plate that replaced
888
+ private use of red plates — the same instrument's remaining articles, in
889
+ force 1.5.1998, closed the red-plate route for private transfer runs.
890
+ FORMAT-HISTORY CAVEAT, recorded at the point of use: the "03 oder 04"
891
+ wording in this series' regex is evidenced from 1.3.2007 (FZV 2006,
892
+ verbatim in the source line); the 1998-2007 numbering could not be read
893
+ from the 1998 scan (the Anlage Vd pages' OCR is partial), and the
894
+ widely repeated claim that pre-2007 Kurzzeitkennzeichen began with "04"
895
+ only is SECONDARY (Wikipedia locator) — recorded, not asserted. Five
896
+ days, a yellow expiry field, and a blue seal instead of the usual
897
+ Land-arms Stempelplakette. Unlike the 06 dealer plate it is tied to ONE
898
+ vehicle (§ 42 Abs. 3 Nr. 2) and, unlike an ordinary plate, it need not
899
+ be firmly attached.
530
900
 
531
901
  - id: de-export
532
902
  class: export
533
903
  categories: [car, van, truck, bus, motorcycle, trailer]
534
- period: { start: 2023 }
535
- period_evidence: instrument-in-force
904
+ period: { start: 2007 } # UPPER BOUND — digits-then-letter rule
905
+ # verbatim in the FZV 2006, in force
906
+ # 1.3.2007; the regime is much older (see
907
+ # notes: 1998 IntKfzV seal pin, pre-1988
908
+ # design change flagged)
909
+ period_evidence: instrument-in-force-upper-bound
910
+ matching: strict
536
911
  format:
537
912
  pattern: "LL-9999L"
538
913
  regex: '\A[A-Z]{1,3}-\d{1,4}[A-Z]\z'
@@ -565,13 +940,25 @@ series:
565
940
  sources:
566
941
  - "https://www.gesetze-im-internet.de/fzv_2023/__45.html # § 45: Fahrten zur dauerhaften Verbringung eines Fahrzeuges in das Ausland; Abs. 1 the insurance/HU conditions and the one-year cap; Abs. 2 'einer ein- bis vierstelligen Zahl und einem nachfolgenden Buchstaben' plus the expiry-date field"
567
942
  - "https://www.gesetze-im-internet.de/fzv_2023/anlage_4.html # Anlage 4 Abschnitt 8: no Euro-Feld, the non-retroreflective red date field, the RAL 2002 seal"
943
+ - "https://media.offenegesetze.de/bgbl1/2006/bgbl1_2006_21.pdf # FZV vom 25.4.2006, BGBl. I S. 988 — the export Erkennungsnummer 'aus einer ein- bis vierstelligen Zahl und einem nachfol[genden Buchstaben]' verbatim, in force 1.3.2007. PERIOD UPPER BOUND for the format as modeled. Fetched 2026-08-02"
944
+ - "https://media.offenegesetze.de/bgbl1/1998/bgbl1_1998_14.pdf # 27. ÄndVstVR vom 9.3.1998, BGBl. I S. 441, Art. 4 — amends § 7 Abs. 2 Nr. 5 IntKfzV: the export plate's Dienstsiegel becomes 'mit einem Durchmesser von 35 mm' beside the pre-existing '(RAL 2002)' — the RAL-2002 red seal the FZV 2023 still prescribes was already law in 1998, under the Verordnung über internationalen Kraftfahrzeugverkehr, not the FZV. LINEAGE PIN, not a start. Fetched 2026-08-02"
568
945
  notes: >-
569
- AUSFUHRKENNZEICHEN. Three things make it unique in Germany: the digits-then-
570
- letter Erkennungsnummer, the absence of the Euro-band, and a field the law
946
+ AUSFUHRKENNZEICHEN. PERIOD, honestly: 2007 is an UPPER BOUND for the
947
+ series AS MODELED (digits-then-letter Erkennungsnummer): that rule's
948
+ earliest secured statement is the FZV 2006 (verbatim, in force
949
+ 1.3.2007). The export-plate REGIME is far older and pre-FZV lived in the
950
+ IntKfzV: the 1998 amendment pinned above adjusts its § 7 Dienstsiegel
951
+ and shows RAL 2002 — today's seal colour — already in force, and the
952
+ Wikipedia locator's photo caption dates a distinct older design
953
+ ("Ausfuhrkennzeichen bis 1988") — SECONDARY, recorded not asserted.
954
+ Neither the origin of the digits-then-letter serial nor the 1988(?)
955
+ design change was primary-sourced; both are the recorded gaps here.
956
+ Three things make it unique in Germany: the digits-then-letter
957
+ Erkennungsnummer, the absence of the Euro-band, and a field the law
571
958
  requires NOT to be retroreflective. § 45 Abs. 1 also carries a nice
572
- period-logic constraint for a claims model: the plate may only be issued if
573
- the next roadworthiness inspection date falls AFTER the registration's expiry
574
- date, otherwise the inspection must be done first.
959
+ period-logic constraint for a claims model: the plate may only be issued
960
+ if the next roadworthiness inspection date falls AFTER the
961
+ registration's expiry date, otherwise the inspection must be done first.
575
962
 
576
963
  # =========================================================================
577
964
  # ANLAGE 2 SERIES — federal, Land, diplomatic, military. § 9 Abs. 1 Satz 7:
@@ -581,8 +968,11 @@ series:
581
968
  - id: de-federal-government
582
969
  class: government
583
970
  categories: [car, van, truck, bus, motorcycle]
584
- period: { start: 2023 }
585
- period_evidence: instrument-in-force
971
+ period: { start: 1956 } # 1.7.1956 — Anlage IV StVZO created by the
972
+ # V. vom 14.3.1956 (era_instruments.v1956);
973
+ # the CODE LIST has evolved, see notes
974
+ period_evidence: enabling-instrument
975
+ matching: strict
586
976
  format:
587
977
  pattern: "BD-999999"
588
978
  regex: '\A(?:BD|BG|BP|BW|THW|BBL|BWL|BYL|HEL|LSA|LSN|MVL|NRW|RPL|SAL|THL|HB|HH|NL|B)-\d{1,6}\z'
@@ -597,23 +987,43 @@ series:
597
987
  sources:
598
988
  - "https://www.gesetze-im-internet.de/fzv_2023/anlage_2.html # Anlage 2 Nr. 1 (Bund: BD, BG, BP, BW, THW, Y, X with their registering authorities) and Nr. 2 (the 16 Land codes and which organs they cover)"
599
989
  - "https://www.gesetze-im-internet.de/fzv_2023/__9.html # § 9 Abs. 1 Satz 6-7: which bodies may receive Anlage 2 plates, and the digits-only, max-six-digit Erkennungsnummer rule"
990
+ - "https://media.offenegesetze.de/bgbl1/1956/bgbl1_1956_15.pdf # V. vom 14.3.1956, BGBl. I S. 199 — Anlage IV (zu § 23 Abs. 2): 'A. Bund: BD Dienstfahrzeuge des Bundestages, des Bundesrates und der Bundesregierung; BG Dienstfahrzeuge des Bundesgrenzschutzes; BP Deutsche Bundespost; BW Bundes-Wasser- und Schiffahrtsverwaltung; DB Deutsche Bundesbahn; Y Dienstfahrzeuge der deutschen Streitkräfte' + 'B. Länder' (B, BWL, BYL, HB, HEL, HH, NL, RPL, RWL, SH), and § 23 Abs. 2: 'Die Erkennungsnummern dieser Fahrzeuge ... bestehen nur aus Zahlen; die Zahlen dürfen nicht mehr als fünf - bei Fahrzeugen der deutschen Streitkräfte sechs - Stellen haben.' In force 1.7.1956. PERIOD START. Fetched 2026-08-02"
991
+ - "https://media.offenegesetze.de/bgbl1/1997/bgbl1_1997_52.pdf # 25. ÄndVstVR vom 22.7.1997 — Nr. 8 inserts 'der Bundesanstalt Technisches Hilfswerk,' into the Anlage IV heading: THW joins the table in 1997. Fetched 2026-08-02"
992
+ - "https://media.offenegesetze.de/bgbl1/2006/bgbl1_2006_21.pdf # FZV vom 25.4.2006 — Anlage 3 already carries THW, X and the five new-Land codes (BBL etc.), in force 1.3.2007. Fetched 2026-08-02"
600
993
  notes: >-
601
- FEDERAL AND LAND OFFICIAL SERIES. Two facts a decode table must carry, both
602
- verbatim from Anlage 2: BG (Bundespolizei) is "noch gültig, wird nicht mehr
603
- zugeteilt" — still valid, no longer assigned, exactly the ended-but-on-the-road
604
- case PRD-PLATES's `ended: true` semantics exist for at the series level and
605
- that decode rows need at the row level. And the CONSULAR case has no code of
606
- its own: career consular posts carry "das Unterscheidungszeichen des
607
- Verwaltungsbezirkes am Sitz des Konsulats", i.e. an ordinary district prefix,
608
- so German consular vehicles are NOT identifiable from the plate string. Also
609
- here: 1-1 for the Bundestag President's official car (Anlage 2 Nr. 4), the only
610
- German plate whose prefix is a digit.
994
+ FEDERAL AND LAND OFFICIAL SERIES — 1956-original as a SYSTEM: Anlage IV
995
+ of the 14.3.1956 instrument created the official-code table and the
996
+ digits-only rule in the same breath (both verbatim in the source line).
997
+ THE CODE LIST IS THE PART THAT MOVED, and a decode table must carry it
998
+ by period: 1956 had BD/BG/BP/BW/DB/Y and TEN Land codes (RWL for
999
+ Nordrhein-Westfalen — today NRW; no BBL/LSA/LSN/MVL/THL before
1000
+ reunification); BP meant DEUTSCHE BUNDESPOST in 1956 and means
1001
+ Bundespolizei today — the same two letters changed meaning, which is a
1002
+ trap for any historical decode; DB (Deutsche Bundesbahn) left with
1003
+ privatisation (the 32. ÄndVStVR still repeals a Bundespost-successor
1004
+ transitional in 2000); THW was added in 1997 (pinned); the digit cap
1005
+ rose from five (six for the Streitkräfte) to six for all (§ 9 Abs. 1
1006
+ Satz 7 FZV 2023). The exact instruments for the post-1990 Land codes and
1007
+ the NRW/RWL switch were not located — recorded gaps for the decode
1008
+ table, not for this series' start. Two facts a decode table must carry,
1009
+ both verbatim from Anlage 2 (2023): BG (Bundespolizei) is "noch gültig,
1010
+ wird nicht mehr zugeteilt" — still valid, no longer assigned, exactly
1011
+ the ended-but-on-the-road case PRD-PLATES's `ended: true` semantics
1012
+ exist for at the series level and that decode rows need at the row
1013
+ level. And the CONSULAR case has no code of its own: career consular
1014
+ posts carry "das Unterscheidungszeichen des Verwaltungsbezirkes am Sitz
1015
+ des Konsulats", i.e. an ordinary district prefix, so German consular
1016
+ vehicles are NOT identifiable from the plate string. Also here: 1-1 for
1017
+ the Bundestag President's official car (Anlage 2 Nr. 4), the only German
1018
+ plate whose prefix is a digit.
611
1019
 
612
1020
  - id: de-diplomatic
613
1021
  class: diplomatic
614
1022
  categories: [car, van, motorcycle]
615
- period: { start: 2023 }
616
- period_evidence: instrument-in-force
1023
+ period: { start: 1956 } # 1.7.1956 — Anlage IV C StVZO: "0 Fahrzeuge
1024
+ # des Diplomatischen Corps" (era_instruments.v1956)
1025
+ period_evidence: enabling-instrument
1026
+ matching: strict
617
1027
  format:
618
1028
  pattern: "0-999999"
619
1029
  regex: '\A(?:0|B|BN)-\d{1,6}\z'
@@ -629,19 +1039,32 @@ series:
629
1039
  sources:
630
1040
  - "https://www.gesetze-im-internet.de/fzv_2023/anlage_2.html # Anlage 2 Nr. 3: '0, B oder BN — Diplomatische Vertretungen oder internationale Organisationen und in Abhängigkeit vom Status der bevorrechtigten Person', registered at Berlin or Bonn"
631
1041
  - "https://www.gesetze-im-internet.de/fzv_2023/__9.html # § 9 Abs. 1 Satz 6-7"
1042
+ - "https://media.offenegesetze.de/bgbl1/1956/bgbl1_1956_15.pdf # V. vom 14.3.1956, BGBl. I S. 199 — Anlage IV 'C. Diplomatisches Corps: 0 Fahrzeuge des Diplomatischen Corps', with the § 23 Abs. 2 digits-only rule (max five digits then). In force 1.7.1956. PERIOD START. Fetched 2026-08-02"
632
1043
  notes: >-
633
- GERMAN DIPLOMATIC SERIES. Unlike Spain — where CD/OI/CC/TA each get their own
634
- background colour — Germany keeps the ordinary black-on-white design and
635
- signals status only through the prefix, so a German diplomatic plate is
636
- visually a normal plate. The mission-identifying number group inside the
637
- Erkennungsnummer is a Foreign Office allocation and is not published in the
638
- FZV; it is a recorded gap, deliberately not guessed.
1044
+ GERMAN DIPLOMATIC SERIES — the zero prefix is 1956-original: Anlage IV C
1045
+ of the 14.3.1956 instrument reads, in its entirety, "0 Fahrzeuge des
1046
+ Diplomatischen Corps" (source line), making 0 the founding member of
1047
+ today's 0/B/BN trio. WHAT IS NOT 1956: the B and BN prefixes for
1048
+ diplomatic vehicles registered at Berlin and Bonn appear in Anlage 2 FZV
1049
+ 2023 (and B doubles as the Berlin Land code); no instrument dating their
1050
+ introduction was located in this pass — recorded gap, presumably tied to
1051
+ the Bonn/Berlin seat split, deliberately not guessed. The 1956 digit cap
1052
+ was five; today six (§ 9 Abs. 1 Satz 7). Unlike Spain — where
1053
+ CD/OI/CC/TA each get their own background colour — Germany keeps the
1054
+ ordinary black-on-white design and signals status only through the
1055
+ prefix, so a German diplomatic plate is visually a normal plate. The
1056
+ mission-identifying number group inside the Erkennungsnummer is a
1057
+ Foreign Office allocation and is not published in the FZV; it is a
1058
+ recorded gap, deliberately not guessed.
639
1059
 
640
1060
  - id: de-military-bundeswehr
641
1061
  class: military
642
1062
  categories: [car, van, truck, bus, motorcycle, trailer]
643
- period: { start: 2023 }
644
- period_evidence: instrument-in-force
1063
+ period: { start: 1956 } # 1.7.1956 — "Y Dienstfahrzeuge der deutschen
1064
+ # Streitkräfte", Anlage IV A (era_instruments.v1956);
1065
+ # the X (NATO HQ) prefix is LATER — gap noted
1066
+ period_evidence: enabling-instrument
1067
+ matching: strict
645
1068
  format:
646
1069
  pattern: "Y-999999"
647
1070
  regex: '\A(?:Y|X)-\d{1,6}\z'
@@ -663,10 +1086,22 @@ series:
663
1086
  - "https://www.gesetze-im-internet.de/fzv_2023/anlage_2.html # Anlage 2 Nr. 1: 'Y Dienstfahrzeuge der Bundeswehr (Zentrale Militärkraftfahrtstelle – ZMK, Hardter Straße 9, 41179 Mönchengladbach/Rheindahlen)' and 'X Dienstfahrzeuge der auf Grund des Nordatlantikvertrages errichteten internationalen militärischen Hauptquartiere'"
664
1087
  - "https://www.gesetze-im-internet.de/fzv_2023/anlage_4.html # Anlage 4 Abschnitt 3: Bundeswehr plate forms (Leichtkrafträder/Kleinkrafträder, other Krafträder, other vehicles single- and two-line) plus RAL 9005/9001, the Bundesfarben, the digit-1 spacing rule and the last-three-digits group gap"
665
1088
  - "https://www.gesetze-im-internet.de/fzv_2023/__12.html # § 12 Abs. 2 last sentence: Bundeswehr and NATO-HQ plates are exempt from DIN 74069 and the DIN test mark"
1089
+ - "https://media.offenegesetze.de/bgbl1/1956/bgbl1_1956_15.pdf # V. vom 14.3.1956, BGBl. I S. 199 — Anlage IV A: 'Y Dienstfahrzeuge der deutschen Streitkräfte (Auskunft: Bundesministerium für Verteidigung)'; § 23 Abs. 2: digits only, 'bei Fahrzeugen der deutschen Streitkräfte sechs' Stellen — the six-digit military allowance is 1956-original. In force 1.7.1956. PERIOD START (for Y). Fetched 2026-08-02"
1090
+ - "https://media.offenegesetze.de/bgbl1/2006/bgbl1_2006_21.pdf # FZV vom 25.4.2006 — Anlage 3: 'X Dienstfahrzeuge der auf Grund des Nordatlantikvertrages errichteten internationalen militärischen Hauptquartiere, die ihren regelmäßigen Standort im Inland haben' — X's earliest secured appearance; in force 1.3.2007. Fetched 2026-08-02"
666
1091
  notes: >-
667
- BUNDESWEHR (Y) AND NATO HEADQUARTERS (X). Its own series and not a variant of
668
- the federal one: the FONT differs (DIN 1451-2 instead of FE-Schrift), the
669
- Euro-band is absent, the reflectivity standard is disapplied and the colours
670
- are given as RAL codes rather than named. Y is famously a single letter serving
671
- the entire armed forces, which is why it looks like a district code and is not
672
- one.
1092
+ BUNDESWEHR (Y) AND NATO HEADQUARTERS (X). Y IS 1956-ORIGINAL — Anlage IV
1093
+ A of the 14.3.1956 instrument, verbatim in the source line, together
1094
+ with the military six-digit allowance that today applies to all Anlage 2
1095
+ vehicles. PERIOD ASYMMETRY RECORDED AT POINT OF USE: this series' regex
1096
+ accepts Y and X, but the period claim anchors on Y; the X prefix is NOT
1097
+ in the 1956 Anlage IV, and its earliest secured appearance is the FZV
1098
+ 2006 Anlage 3 (pinned; in force 1.3.2007) — the instrument that first
1099
+ assigned X to the NATO headquarters (plausibly 1960s, after the 1955
1100
+ NATO accession) was not located and is the recorded gap. Its own series
1101
+ and not a variant of the federal one: the FONT differs (DIN 1451-2
1102
+ instead of FE-Schrift), the Euro-band is absent, the reflectivity
1103
+ standard is disapplied and the colours are given as RAL codes rather
1104
+ than named — and the DIN script on today's Y plate is the direct
1105
+ survival of the 1956-2000 standard lettering (see de-standard-1956).
1106
+ Y is famously a single letter serving the entire armed forces, which is
1107
+ why it looks like a district code and is not one.