vehicles 0.4.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 (189) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +164 -0
  3. data/CHANGELOG.md +321 -0
  4. data/README.md +88 -15
  5. data/data/PROVENANCE-vehicles.md +12 -0
  6. data/data/plates/PROVENANCE.md +10 -0
  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/es-provinces.yml +116 -0
  14. data/data/plates/_decode/fr-departements.yml +191 -0
  15. data/data/plates/_decode/gb-age-identifiers.yml +170 -0
  16. data/data/plates/_decode/gb-memory-tags.yml +202 -0
  17. data/data/plates/_decode/gr-prefectures.yml +1408 -0
  18. data/data/plates/_decode/hr-cities.yml +315 -0
  19. data/data/plates/_decode/ie-counties.yml +227 -0
  20. data/data/plates/_decode/in-state-codes.yml +169 -0
  21. data/data/plates/_decode/is-districts-1938.yml +116 -0
  22. data/data/plates/_decode/it-provinces.yml +348 -0
  23. data/data/plates/_decode/jp-office-marks.yml +960 -0
  24. data/data/plates/_decode/jp-use-marks.yml +205 -0
  25. data/data/plates/_decode/kr-authority-marks.yml +146 -0
  26. data/data/plates/_decode/kr-use-syllables.yml +194 -0
  27. data/data/plates/_decode/lu-series-order.yml +638 -0
  28. data/data/plates/_decode/mx-entity-series.yml +380 -0
  29. data/data/plates/_decode/my-index-marks.yml +271 -0
  30. data/data/plates/_decode/no-counties-1913.yml +148 -0
  31. data/data/plates/_decode/no-districts.yml +901 -0
  32. data/data/plates/_decode/pl-powiats.yml +567 -0
  33. data/data/plates/_decode/pt-trailer-services.yml +96 -0
  34. data/data/plates/_decode/ro-counties.yml +213 -0
  35. data/data/plates/_decode/se-diplomatic.yml +220 -0
  36. data/data/plates/_decode/si-regions.yml +123 -0
  37. data/data/plates/_decode/sk-districts.yml +314 -0
  38. data/data/plates/_decode/th-registration-elements.yml +208 -0
  39. data/data/plates/_decode/ua-regions.yml +393 -0
  40. data/data/plates/_decode/za-licence-marks.yml +215 -0
  41. data/data/plates/_meta/classes.yml +26 -0
  42. data/data/plates/_meta/separators.yml +102 -0
  43. data/data/plates/ad.yml +961 -0
  44. data/data/plates/ar.yml +762 -0
  45. data/data/plates/at.yml +1424 -0
  46. data/data/plates/au-act.yml +472 -0
  47. data/data/plates/au-nsw.yml +282 -0
  48. data/data/plates/au-nt.yml +431 -0
  49. data/data/plates/au-qld.yml +272 -0
  50. data/data/plates/au-sa.yml +248 -0
  51. data/data/plates/au-tas.yml +302 -0
  52. data/data/plates/au-vic.yml +215 -0
  53. data/data/plates/au-wa.yml +309 -0
  54. data/data/plates/be.yml +1840 -0
  55. data/data/plates/br.yml +1152 -0
  56. data/data/plates/ca-ab.yml +430 -0
  57. data/data/plates/ca-bc.yml +697 -0
  58. data/data/plates/ca-mb.yml +499 -0
  59. data/data/plates/ca-nb.yml +537 -0
  60. data/data/plates/ca-nl.yml +743 -0
  61. data/data/plates/ca-ns.yml +808 -0
  62. data/data/plates/ca-nt.yml +610 -0
  63. data/data/plates/ca-nu.yml +280 -0
  64. data/data/plates/ca-on.yml +881 -0
  65. data/data/plates/ca-pe.yml +592 -0
  66. data/data/plates/ca-qc.yml +1036 -0
  67. data/data/plates/ca-sk.yml +256 -0
  68. data/data/plates/ca-yt.yml +656 -0
  69. data/data/plates/ch.yml +1273 -0
  70. data/data/plates/cn.yml +1431 -0
  71. data/data/plates/cy.yml +688 -0
  72. data/data/plates/cz.yml +1179 -0
  73. data/data/plates/de.yml +1107 -0
  74. data/data/plates/dk.yml +1647 -0
  75. data/data/plates/ee.yml +1275 -0
  76. data/data/plates/es.yml +888 -0
  77. data/data/plates/fi.yml +1271 -0
  78. data/data/plates/fr.yml +1265 -0
  79. data/data/plates/gb.yml +1188 -0
  80. data/data/plates/gr.yml +721 -0
  81. data/data/plates/hr.yml +860 -0
  82. data/data/plates/hu.yml +959 -0
  83. data/data/plates/ie.yml +775 -0
  84. data/data/plates/in.yml +1172 -0
  85. data/data/plates/is.yml +667 -0
  86. data/data/plates/it.yml +1317 -0
  87. data/data/plates/jp.yml +3650 -0
  88. data/data/plates/kr.yml +1375 -0
  89. data/data/plates/li.yml +1010 -0
  90. data/data/plates/lt.yml +879 -0
  91. data/data/plates/lu.yml +842 -0
  92. data/data/plates/lv.yml +924 -0
  93. data/data/plates/mc.yml +1024 -0
  94. data/data/plates/mt.yml +854 -0
  95. data/data/plates/mx.yml +1372 -0
  96. data/data/plates/my.yml +685 -0
  97. data/data/plates/nl.yml +1016 -0
  98. data/data/plates/no.yml +1018 -0
  99. data/data/plates/nz.yml +1699 -0
  100. data/data/plates/pl.yml +1296 -0
  101. data/data/plates/pt.yml +847 -0
  102. data/data/plates/ro.yml +785 -0
  103. data/data/plates/se.yml +1091 -0
  104. data/data/plates/si.yml +1105 -0
  105. data/data/plates/sk.yml +1439 -0
  106. data/data/plates/sm.yml +1119 -0
  107. data/data/plates/th.yml +1150 -0
  108. data/data/plates/ua.yml +1672 -0
  109. data/data/plates/us-ak.yml +763 -0
  110. data/data/plates/us-al.yml +457 -0
  111. data/data/plates/us-ar.yml +427 -0
  112. data/data/plates/us-as.yml +454 -0
  113. data/data/plates/us-az.yml +430 -0
  114. data/data/plates/us-ca.yml +892 -0
  115. data/data/plates/us-co.yml +452 -0
  116. data/data/plates/us-ct.yml +427 -0
  117. data/data/plates/us-dc.yml +614 -0
  118. data/data/plates/us-de.yml +551 -0
  119. data/data/plates/us-fl.yml +741 -0
  120. data/data/plates/us-ga.yml +644 -0
  121. data/data/plates/us-gu.yml +658 -0
  122. data/data/plates/us-hi.yml +585 -0
  123. data/data/plates/us-ia.yml +438 -0
  124. data/data/plates/us-id.yml +531 -0
  125. data/data/plates/us-il.yml +516 -0
  126. data/data/plates/us-in.yml +324 -0
  127. data/data/plates/us-ks.yml +351 -0
  128. data/data/plates/us-ky.yml +770 -0
  129. data/data/plates/us-la.yml +568 -0
  130. data/data/plates/us-ma.yml +379 -0
  131. data/data/plates/us-md.yml +536 -0
  132. data/data/plates/us-me.yml +445 -0
  133. data/data/plates/us-mi.yml +408 -0
  134. data/data/plates/us-mn.yml +411 -0
  135. data/data/plates/us-mo.yml +356 -0
  136. data/data/plates/us-mp.yml +402 -0
  137. data/data/plates/us-ms.yml +432 -0
  138. data/data/plates/us-mt.yml +619 -0
  139. data/data/plates/us-nc.yml +602 -0
  140. data/data/plates/us-nd.yml +419 -0
  141. data/data/plates/us-ne.yml +483 -0
  142. data/data/plates/us-nh.yml +394 -0
  143. data/data/plates/us-nj.yml +547 -0
  144. data/data/plates/us-nm.yml +574 -0
  145. data/data/plates/us-nv.yml +655 -0
  146. data/data/plates/us-ny.yml +592 -0
  147. data/data/plates/us-oh.yml +404 -0
  148. data/data/plates/us-ok.yml +513 -0
  149. data/data/plates/us-or.yml +392 -0
  150. data/data/plates/us-pa.yml +506 -0
  151. data/data/plates/us-pr.yml +507 -0
  152. data/data/plates/us-ri.yml +445 -0
  153. data/data/plates/us-sc.yml +605 -0
  154. data/data/plates/us-sd.yml +428 -0
  155. data/data/plates/us-tn.yml +471 -0
  156. data/data/plates/us-tx.yml +535 -0
  157. data/data/plates/us-ut.yml +384 -0
  158. data/data/plates/us-va.yml +567 -0
  159. data/data/plates/us-vi.yml +489 -0
  160. data/data/plates/us-vt.yml +458 -0
  161. data/data/plates/us-wa.yml +484 -0
  162. data/data/plates/us-wi.yml +509 -0
  163. data/data/plates/us-wv.yml +446 -0
  164. data/data/plates/us-wy.yml +523 -0
  165. data/data/plates/va.yml +604 -0
  166. data/data/plates/za.yml +1141 -0
  167. data/data/vehicles.json +160653 -105090
  168. data/lib/vehicles/configuration.rb +18 -2
  169. data/lib/vehicles/dataset.rb +73 -18
  170. data/lib/vehicles/fuzzy.rb +115 -0
  171. data/lib/vehicles/http.rb +48 -0
  172. data/lib/vehicles/make.rb +36 -6
  173. data/lib/vehicles/mcp_server.rb +5 -5
  174. data/lib/vehicles/model.rb +42 -6
  175. data/lib/vehicles/plates/jurisdiction.rb +32 -0
  176. data/lib/vehicles/plates/series.rb +291 -0
  177. data/lib/vehicles/plates/template_fill.rb +188 -0
  178. data/lib/vehicles/plates/templates.rb +162 -0
  179. data/lib/vehicles/plates.rb +122 -0
  180. data/lib/vehicles/providers/hosted_provider.rb +49 -58
  181. data/lib/vehicles/providers/local_provider.rb +4 -3
  182. data/lib/vehicles/validators/vehicle_make_validator.rb +3 -1
  183. data/lib/vehicles/validators/vehicle_model_validator.rb +1 -1
  184. data/lib/vehicles/version.rb +1 -1
  185. data/lib/vehicles.rb +53 -16
  186. data/rakelib/data_refresh.rake +109 -0
  187. data/rakelib/plates_refresh.rake +29 -0
  188. data/sig/vehicles.rbs +18 -0
  189. metadata +174 -2
@@ -0,0 +1,1010 @@
1
+ # plates/li.yml — Liechtenstein (PRD-PLATES gate L1, microstates group).
2
+ # DRAFT for verification. All primary text fetched from gesetze.li 2026-08-02.
3
+ #
4
+ # ---------------------------------------------------------------------------
5
+ # THIS IS A PRIMARY-SOURCED FILE. Liechtenstein has the best legal archive of
6
+ # the five microstates in this group: gesetze.li (Lilex) serves both the
7
+ # consolidated Landesrecht (LR) and the Landesgesetzblatt (LGBl) back to the
8
+ # 19th century, so nearly every claim below is quoted from an instrument.
9
+ # The instruments read in this pass:
10
+ # * VZV — Verkehrszulassungsverordnung, LR 741.51, vom 1. August 1978,
11
+ # LGBl. 1978 Nr. 20 (ausgegeben 31. August 1978), in force 1. September
12
+ # 1978. Art. 71-76 are the plate chapter; Art. 82 the moped plate.
13
+ # https://www.gesetze.li/konso/1978.020
14
+ # * VVV — Verkehrsversicherungsverordnung, LR 741.31, vom 1. August 1978,
15
+ # LGBl. 1978 Nr. 21. Anhang 1a (zu Art. 19) is the provisional-plate spec
16
+ # and the ONLY source for the customs "Z".
17
+ # * The 1924 decree that started the FL series: Vollziehungs-Verordnung vom
18
+ # 4. Dezember 1924 zum Gesetze vom 10. Mai 1924 (LGBl. 1924 Nr. 6)
19
+ # betreffend den Verkehr mit Fahrzeugen, LR 741.011, LGBl. 1924 Nr. 20,
20
+ # ausgegeben 6. Dezember 1924, IN FORCE 1. JANUAR 1925.
21
+ # * The 1915 decree behind it: Verordnung vom 12. August 1915 betreffend die
22
+ # Lenkung und Kennzeichnung der Kraftfahrzeuge, LR 741.5, LGBl. 1915
23
+ # Nr. 13, ausgegeben 18. August 1915.
24
+ # * Wappengesetz vom 30. Juni 1982, LR 120, LGBl. 1982 Nr. 58, for the arms.
25
+ # * LGBl. 2020 Nr. 349 and LGBl. 2021 Nr. 307 — the two amendments that date
26
+ # the modern colour system and the red repeater plate.
27
+ #
28
+ # ---------------------------------------------------------------------------
29
+ # FIVE STRUCTURAL FACTS THAT SHAPE THIS FILE
30
+ # ---------------------------------------------------------------------------
31
+ #
32
+ # 1. THE INSTRUMENT-DATE RULE, TWICE, IN TEXTBOOK FORM. Liechtenstein is the
33
+ # jurisdiction in this group where the trap is most visible, and both cases
34
+ # are resolved from the instruments themselves:
35
+ # (a) THE FL SERIES. The decree is dated 4 December 1924 and was published
36
+ # on 6 December 1924 — but its own closing article reads "Diese
37
+ # Verordnung tritt am 1. Januar 1925 in Kraft." The FL series
38
+ # therefore starts in 1925, NOT 1924. Every secondary account of
39
+ # Liechtenstein plates dates the system to "1924"; the instrument
40
+ # says otherwise, and the instrument is the authority.
41
+ # (b) THE RED REPEATER PLATE. The amending ordinance is dated 5 October
42
+ # 2021 and was published 8 October 2021, but it split its own
43
+ # commencement: "Diese Verordnung tritt vorbehaltlich Abs. 2 am
44
+ # 1. November 2021 in Kraft. 2) Art. 69 Abs. 6, Art. 71 Abs. 1 Bst. g
45
+ # und Abs. 4 sowie Art. 72 Abs. 3 Bst. d treten am 1. März 2022 in
46
+ # Kraft." The plate provisions commence 1 March 2022 — four months
47
+ # after the rest of the same instrument. Shipping either the signature
48
+ # date or the general commencement date would be wrong.
49
+ #
50
+ # 2. THE COLOUR SYSTEM IS ONLY 2021 LAW, THOUGH THE PLATES ARE MUCH OLDER —
51
+ # and this is the subtlest dating fact in the file. VZV Art. 71 Abs. 1 today
52
+ # is a closed seven-colour enumeration. In the ORIGINAL 1978 text it named
53
+ # plate TYPES with no colours at all, and Abs. 4 delegated them: "Die
54
+ # Regierung legt die Grund- und Schriftfarbe der Kontrollschilder fest."
55
+ # The enumeration was written into the ordinance by LGBl. 2020 Nr. 349
56
+ # (Verordnung vom 17. November 2020, in force 1. Januar 2021). So a colour
57
+ # claim below is INSTRUMENT-GRADE from 2021 and AGENCY-GRADE before it, and
58
+ # each series says which. The plates themselves are far older than 2021 —
59
+ # treating 2021 as a series start would be exactly the Spanish error.
60
+ #
61
+ # 3. THE PLATE BINDS TO THE HALTER, AND HAS DONE SINCE 1924. VZV Art. 76
62
+ # Abs. 1: "Die einmal zugeteilte Schildnummer bleibt für den Halter
63
+ # reserviert." Abs. 5: the plates "bleiben Eigentum des Staates". The 1924
64
+ # decree already said it, in Art. 30 Abs. 2: "Diese Schilder werden der
65
+ # Person des Wageneigentümers zugeteilt und sind nicht übertragbar." That is
66
+ # a hundred years of unbroken owner-binding, quotable at both ends. Hence
67
+ # `binding: owner`. A vehicle-keyed consumer must not join on a Liechtenstein
68
+ # plate.
69
+ #
70
+ # 4. LIECHTENSTEIN'S PLATE LAW IS AUTONOMOUS — SWISS LAW IS *NOT* INCORPORATED.
71
+ # This was tested rather than assumed, because the customs union and the
72
+ # near-identical drafting invite the opposite conclusion. Liechtenstein
73
+ # enacts its own full-text ordinances and MIRRORS the Swiss LR numbering
74
+ # (VZV 741.51, VVV 741.31, VTS 741.41 — the same numbers as the Swiss SR),
75
+ # which makes the convergence look like incorporation. It is not. The VZV's
76
+ # enabling clause is purely domestic ("Aufgrund von Art. 11 bis 14, 23,
77
+ # 50 Abs. 3, Art. 51, 53 und 99 des Strassenverkehrsgesetzes (SVG) vom
78
+ # 30. Juni 1978, LGBl. 1978 Nr. 18"); Art. 2 defines VVV/VTS/VRV as the
79
+ # LIECHTENSTEIN ordinances; and a sweep of the VZV, VTS and SVG for
80
+ # "schweizerisch|Schweiz" finds Swiss law incorporated only in narrow named
81
+ # domains — the Swiss motor-vehicle tax, ASTRA type-approval reporting, the
82
+ # heavy-vehicle charge and cross-border insurance — and NEVER for plates.
83
+ # CONSEQUENCE, and it is a rule for this file: no Swiss instrument is cited
84
+ # for a Liechtenstein fact anywhere below. The resemblance to ch.yml is a
85
+ # drafting fact, not a legal one.
86
+ #
87
+ # 5. THE NUMBER RANGES ARE NOT IN THE LAW. Every range in circulation —
88
+ # FL 1-20 for official vehicles, FL 101-300 for dealers, FL 50000-50299 for
89
+ # day plates, FL 90000-92999 for provisional, the yellow motorcycle block —
90
+ # is ABSENT from the VZV. Art. 73 Abs. 2 mandates only that numbering run
91
+ # separately per vehicle family and per plate type "in aufsteigender
92
+ # Reihenfolge". The ranges live in the Amt für Strassenverkehr's "Weisungen
93
+ # über die Kontrollschilder" (1 January 2015), a sub-legal instrument. NO
94
+ # RANGE IS ASSERTED AS LAW IN THIS FILE; where a range appears it is marked
95
+ # agency-level or is omitted.
96
+ #
97
+ # ---------------------------------------------------------------------------
98
+ # REGEX POLICY (PRD-PLATES §2.7 tiers)
99
+ # ---------------------------------------------------------------------------
100
+ # regex the printed form: literal FL, an optional separator, and
101
+ # 1-5 digits. THE DIGIT CEILING IS NOT IN THE ORDINANCE —
102
+ # see common.numbering.digit_ceiling.
103
+ # regex_statutory drops the ceiling to \d+, because that is the honest outer
104
+ # legal bound: no provision caps the Kontrollnummer.
105
+ # regex_strict used only where a digit WIDTH is actually sourced — which
106
+ # happens exactly once, on the moped plate, where Art. 82
107
+ # Abs. 6 says "die 5-stelligen Kontrollschildnummern".
108
+ #
109
+ # period_evidence VOCABULARY used in this file:
110
+ # instrument-in-force the instrument's own commencement date
111
+ # instrument-in-force-upper-bound the earliest instrument READ carrying the
112
+ # series; earlier ones exist and were not
113
+ # read, so the start is an UPPER bound
114
+ # instrument-dated-both-ends start AND end each fixed by an instrument
115
+ # statutory-date a date stated in the instrument's text
116
+ # secondary-wikipedia WIKIPEDIA-DERIVED (mandatory tag)
117
+ #
118
+ # All of these except `secondary-wikipedia` are values already in use across
119
+ # plates/*.yml; the field is open and descriptive, and nothing is coined here.
120
+ # `secondary-wikipedia` is the mandatory tag for Wikipedia-derived facts and is
121
+ # used in this file only on the 1915 colour claim, which is the single
122
+ # non-instrument fact in the whole dossier.
123
+ #
124
+ # format_evidence VOCABULARY: statutory | agency-weisung | secondary-wikipedia
125
+ # ---------------------------------------------------------------------------
126
+ jurisdiction: li
127
+ authority:
128
+ name: Amt für Strassenverkehr (ASV), Fürstentum Liechtenstein — Verkehrszulassungsverordnung (VZV), LR 741.51
129
+ url: "https://www.gesetze.li/konso/1978.020"
130
+ binding: owner
131
+ binding_note: >-
132
+ VZV Art. 76 Abs. 1: "Die einmal zugeteilte Schildnummer bleibt für den Halter
133
+ reserviert." Art. 76 Abs. 5: the plates, other than provisional ones, "bleiben
134
+ Eigentum des Staates". The rule is original to the FL series itself — the
135
+ 1924 decree's Art. 30 Abs. 2 reads "Diese Schilder werden der Person des
136
+ Wageneigentümers zugeteilt und sind nicht übertragbar." Every series in this
137
+ file inherits `owner`.
138
+ instrument:
139
+ citation: "Verkehrszulassungsverordnung (VZV) vom 1. August 1978, LR 741.51, LGBl. 1978 Nr. 20"
140
+ ausfertigungsdatum: "1978-08-01"
141
+ published: "1978-08-31"
142
+ entry_in_force: "1978-09-01"
143
+ enabling_act: "Strassenverkehrsgesetz (SVG) vom 30. Juni 1978, LGBl. 1978 Nr. 18, Art. 11-14, 23, 50 Abs. 3, 51, 53, 99"
144
+ predecessor: "Verordnung vom 5. April 1977 zum Gesetz über den Strassenverkehr, LGBl. 1977 Nr. 29 — expressly replaced by VZV Art. 125"
145
+ companion_instruments:
146
+ - "Verkehrsversicherungsverordnung (VVV) vom 1. August 1978, LR 741.31, LGBl. 1978 Nr. 21"
147
+ - "Gesetz vom 30. Juni 1982 über Wappen, Farben, Siegel und Embleme (Wappengesetz), LR 120, LGBl. 1982 Nr. 58"
148
+ amendments_material_to_plates:
149
+ - "LGBl. 2020 Nr. 349 — Verordnung vom 17. November 2020, ausgegeben 26. November 2020, in force 1. Januar 2021: rewrote Art. 71 Abs. 1 as the seven-colour enumeration and re-enacted Art. 72"
150
+ - "LGBl. 2021 Nr. 307 — Verordnung vom 5. Oktober 2021, ausgegeben 8. Oktober 2021: inserted Art. 71 Abs. 1 Bst. g and Art. 72 Abs. 3 Bst. d (the red rear-load-carrier plate), IN FORCE 1. MÄRZ 2022"
151
+ - "LGBl. 2001 Nr. 118 — repealed Art. 71 Abs. 2 Bst. b, the rental-car 'V' marking"
152
+ source: "https://www.gesetze.li/konso/1978.020 # VZV front matter and Art. 125; consolidated text version 66"
153
+
154
+ # ---------------------------------------------------------------------------
155
+ # Jurisdiction-wide facts, cited once and referenced per series.
156
+ # ---------------------------------------------------------------------------
157
+ common:
158
+ national_letters:
159
+ value: "FL"
160
+ rule: >-
161
+ VZV Art. 73 Abs. 1, verbatim and in its entirety: "Liechtensteinische
162
+ Motorfahrzeuge tragen als Unterscheidungszeichen die Buchstaben FL." The
163
+ letters are on the plate itself — unlike Switzerland, where the country
164
+ sign is a separate oval sticker — and there is no canton-style regional
165
+ letter, because there is no subdivision to encode. Every Liechtenstein
166
+ plate therefore begins FL and NOTHING in the string is geographic.
167
+ origin: >-
168
+ The FL letters are original to the 1924 decree: Art. 30 Abs. 1, "An jedem
169
+ Motorwagen müssen zwei Schilder angebracht sein, die die Buchstaben FL und
170
+ die Kontrollnummer tragen."
171
+ etymology_note: >-
172
+ The common story is that "L" was unavailable because Luxembourg held it,
173
+ leaving "FL" for Fürstentum Liechtenstein. The CAUSAL claim is secondary.
174
+ What IS primary is the pairing itself: Beilage A to the same 1924 decree
175
+ lists the international distinguishing signs and carries both
176
+ "Luxemburg: L" and "Liechtenstein: FL". So the two assignments are
177
+ instrument-sourced even though the reason for the choice is not.
178
+ sources:
179
+ - "https://www.gesetze.li/konso/1978.020 # VZV Art. 73 Abs. 1"
180
+ - "https://www.gesetze.li/chrono/html/1924020000 # LGBl. 1924 Nr. 20, Art. 30 Abs. 1 and Beilage A"
181
+ pattern_dsl_limitation:
182
+ status: RECORDED SCHEMA FINDING — affects every series in this file
183
+ finding: >-
184
+ THE HUMAN-PATTERN DSL CANNOT SPELL A LITERAL "L", AND LIECHTENSTEIN IS THE
185
+ JURISDICTION WHERE THAT BITES HARDEST. PRD-PLATES §2.2 defines the pattern
186
+ alphabet as "9=digit L=letter, literal separators as printed", and
187
+ lint_plates.rb implements it by substituting EVERY "9" and EVERY "L" in a
188
+ pattern with a random digit or letter. There is no escape mechanism. So
189
+ the pattern "FL 99999" does not mean what it looks like — the lint reads
190
+ it as "F, any letter, space, five digits" and generates strings like
191
+ "FQ 96884", which the sourced regex correctly rejects.
192
+ consequence: >-
193
+ Every ordinary series here spells `pattern: "LL 99999"` and carries
194
+ `regex: '\A[A-Z]{2}[- ]?\d{1,5}\z'` so the round-trip holds, with the
195
+ SOURCED grammar in `regex_strict: '\AFL[- ]?\d{1,5}\z'`. This follows the
196
+ precedent ch.yml sets for the Swiss canton codes, and `matching` stays
197
+ `strict` on the same reading: the widening is an artefact of the notation,
198
+ not a deliberate over-broad regex, and `regex_strict` is where the
199
+ authority's own grammar lives.
200
+ caution_for_consumers: >-
201
+ A consumer that reads only `format.pattern` or only `format.regex` for
202
+ Liechtenstein will conclude the first two characters vary. THEY DO NOT.
203
+ Read `regex_strict`, or read `common.national_letters`.
204
+ recommended_amendment: >-
205
+ A schema amendment would fix this properly — either an escape in the
206
+ pattern DSL (e.g. a quoted literal) or a `format.literal_prefix` field.
207
+ Recorded here rather than acted on, because inventing notation in a data
208
+ PR is exactly what PRD-PLATES §2.6 forbids for separators and the same
209
+ discipline applies to the pattern alphabet. The same limitation forced
210
+ sm.yml to model the San Marino POLIZIA legend as plate furniture rather
211
+ than as part of the serial.
212
+ numbering:
213
+ rule: >-
214
+ VZV Art. 73 Abs. 2, verbatim: "Die Nummerierung beginnt für Motorwagen,
215
+ Motoreinachser und Anhänger einerseits und Motorräder, Klein- und
216
+ dreirädrige Motorfahrzeuge anderseits separat sowie für jede Schilderart
217
+ nach Grundfarbe und besonderer Kennzeichnung getrennt und erfolgt in
218
+ aufsteigender Reihenfolge. Über Ausnahmen entscheidet die Regierung."
219
+ consequences:
220
+ - "Number spaces are split per BACKGROUND COLOUR and per SPECIAL MARKING, and additionally between the motorcar/single-axle/trailer family and the motorcycle/small/three-wheeler family. A number therefore repeats across colours: the same digits can exist simultaneously as a black car plate, a light-blue work-vehicle plate and a light-green agricultural plate."
221
+ - "TRAILERS SHARE THE MOTORCAR NUMBER SPACE, exactly as in Switzerland — Art. 73 Abs. 2 groups 'Motorwagen, Motoreinachser und Anhänger' as one series. A Liechtenstein trailer registration is not distinguishable from a car registration by its string alone."
222
+ - "A Liechtenstein plate encodes NO date and NO geography. There is no era inference to be had from the number, and the country has no subdivisions to encode."
223
+ - "'in aufsteigender Reihenfolge' is the whole of the progression rule. It does NOT state a starting number and does NOT forbid leading zeros; no no-leading-zero claim is made anywhere in this file."
224
+ digit_ceiling: null
225
+ digit_ceiling_note: >-
226
+ RECORDED GAP, and the reason every `regex` below is a practical rather
227
+ than a legal bound. NOTHING in the VZV caps the number of digits in a
228
+ Kontrollnummer. Five digits is the widest form the agency's own number
229
+ ranges reach, so `regex` uses \d{1,5}; `regex_statutory` drops the ceiling
230
+ to \d+ because that is the honest outer legal bound. The ONE sourced width
231
+ in the file is the moped plate's, where Art. 82 Abs. 6 says
232
+ "die 5-stelligen Kontrollschildnummern" in terms.
233
+ source: "https://www.gesetze.li/konso/1978.020 # VZV Art. 73 Abs. 2"
234
+ colours:
235
+ rule: >-
236
+ VZV Art. 71 Abs. 1 is a CLOSED seven-item enumeration and is the whole
237
+ Liechtenstein colour system: "Es werden abgegeben: a) Kontrollschilder mit
238
+ schwarzem Grund und weisser Schrift für Motorwagen, Motorräder, Klein- und
239
+ dreirädrige Motorfahrzeuge, Motoreinachser und Anhänger; b)
240
+ Kontrollschilder mit hellblauem Grund und schwarzer Schrift für
241
+ Arbeitsfahrzeuge; c) Kontrollschilder mit hellbraunem Grund und schwarzer
242
+ Schrift für Ausnahmefahrzeuge; d) Kontrollschilder mit hellgrünem Grund
243
+ und schwarzer Schrift für land- und forstwirtschaftliche Fahrzeuge; e)
244
+ Kontrollschilder mit gelbem Grund und schwarzer Schrift für
245
+ Kleinmotorräder und Leichtmotorfahrzeuge; f) Kontrollschilder mit
246
+ schwarzem Grund und gelber Schrift für Fahrzeuge mit einer Tageszulassung;
247
+ g) Kontrollschilder mit rotem Grund und weisser Schrift für hintere
248
+ Lastenträger an Motorwagen (Kontrollschild für hintere Lastenträger)."
249
+ dating: >-
250
+ CRITICAL AND EASY TO GET WRONG. This enumeration is NOT 1978 law. The
251
+ original Art. 71 Abs. 1 named plate types without colours, and Abs. 4
252
+ delegated the colours to the government: "Die Regierung legt die Grund-
253
+ und Schriftfarbe der Kontrollschilder fest." The colour list was inserted
254
+ by LGBl. 2020 Nr. 349, in force 1 January 2021 (consolidated-text footnote
255
+ 411: "Art. 71 Abs. 1 abgeändert durch LGBl. 2020 Nr. 349"); item g was
256
+ inserted later still, by LGBl. 2021 Nr. 307, in force 1 March 2022. A
257
+ colour claim in this file is therefore instrument-grade from 2021 and
258
+ agency-grade before it, and each series says which. The PLATES are older
259
+ than the colour law; the colour law is not a series start.
260
+ hex_basis_note: >-
261
+ The ordinance NAMES colours in German and gives no RAL, Pantone or RGB
262
+ value anywhere — the same situation ch.yml and de.yml record. Every hex
263
+ below is `hex_basis: observed`, chosen as a conventional rendering of the
264
+ German colour word, and MUST NOT be treated as a spec value. There is no
265
+ chromaticity table of the Spanish Anexo XVIII kind to anchor to.
266
+ sources:
267
+ - "https://www.gesetze.li/konso/1978.020 # VZV Art. 71 Abs. 1 lit. a-g, with footnotes 411 and 412 dating lit. a-f to LGBl. 2020 Nr. 349 and lit. g to LGBl. 2021 Nr. 307"
268
+ - "https://www.gesetze.li/chrono/html/1978020000 # the ORIGINAL 1978 text, showing Art. 71 Abs. 1 without colours and Abs. 4 delegating them"
269
+ special_markings:
270
+ rule: >-
271
+ VZV Art. 71 Abs. 2 is the closed list of specially-marked plates: "Besonders
272
+ gekennzeichnet werden: a) die Schilder für die provisorische Zulassung nach
273
+ Art. 19 VVV; b) Aufgehoben; c) die Händlerschilder mit dem Buchstaben 'U';
274
+ d) Aufgehoben".
275
+ repealed_items:
276
+ - "Bst. b was the RENTAL-CAR marking, the letter 'V' — present in the 1978 original as 'die Schilder für Mietwagen mit dem Buchstaben \"V\"' and repealed by LGBl. 2001 Nr. 118. Modelled as li-rental-v, ENDED 2001."
277
+ - "Bst. d was repealed by LGBl. 2020 Nr. 349. Its former content was not read in this pass and is a recorded gap; no series is asserted for it."
278
+ consequence: >-
279
+ Anything NOT on this list carries an unmarked plate. That is a sourced
280
+ NEGATIVE and it kills series a naive reading would invent: there is no
281
+ taxi marking, no historic marking and no electric marking in Liechtenstein
282
+ law, and government and police vehicles carry ordinary black plates
283
+ distinguished only by low agency-allocated numbers, not by any provision
284
+ of the ordinance.
285
+ source: "https://www.gesetze.li/konso/1978.020 # VZV Art. 71 Abs. 2 lit. a-d"
286
+ dimensions:
287
+ rule: >-
288
+ VZV Art. 72 Abs. 3, verbatim: "Die Kontrollschilder weisen folgende
289
+ Formate auf, wobei die Ecken mit einem Radius von 1 cm abgerundet sind:
290
+ a) Das vordere Schild für Motorwagen sowie das Schild für Motoreinachser,
291
+ landwirtschaftliche Fahrzeuge und Arbeitsanhänger haben eine Länge von
292
+ 30 cm und eine Höhe von 8 cm. b) Das hintere Schild für Motorwagen sowie
293
+ das Schild für Transportanhänger an Motorwagen haben entweder eine Länge
294
+ von 30 cm und eine Höhe von 16 cm (Hochformat) oder eine Länge von 50 cm
295
+ und eine Höhe von 11 cm (Langformat). c) Das Schild für Motorräder, Klein-
296
+ und dreirädrige Motorfahrzeuge, Kleinmotorräder und Leichtmotorfahrzeuge
297
+ sowie für ihre Anhänger hat eine Länge von 18 cm und eine Höhe von 14 cm;
298
+ d) Das Kontrollschild für hintere Lastenträger an Motorwagen hat eine
299
+ Länge von 50 cm und eine Höhe von 11 cm (Langformat)."
300
+ front_motorcar: { w: 300, h: 80, unit: mm, corner_radius_mm: 10 }
301
+ rear_motorcar_hochformat: { w: 300, h: 160, unit: mm, corner_radius_mm: 10 }
302
+ rear_motorcar_langformat: { w: 500, h: 110, unit: mm, corner_radius_mm: 10 }
303
+ motorcycle: { w: 180, h: 140, unit: mm, corner_radius_mm: 10 }
304
+ rear_load_carrier: { w: 500, h: 110, unit: mm, corner_radius_mm: 10 }
305
+ moped: { w: 100, h: 140, unit: mm, note: "NOT in Art. 72 — Art. 82 Abs. 6 states it separately: 'Kontrollschilder für Motorfahrräder sind 14 cm hoch und 10 cm breit.'" }
306
+ divergence_from_ch_note: >-
307
+ Art. 72 Abs. 3 Bst. c differs materially from the Swiss Art. 83 Abs. 3:
308
+ Liechtenstein puts Kleinmotorräder and Leichtmotorfahrzeuge on the SAME
309
+ 180 x 140 mm plate as motorcycles, where Switzerland gives them a separate
310
+ 100 x 140 mm format. The 100 x 140 mm size exists in Liechtenstein only
311
+ for MOTORFAHRRÄDER (mopeds), under Art. 82 Abs. 6. This is a real
312
+ divergence between two near-identical ordinances and it is the kind of
313
+ detail a copy-from-Switzerland approach would get wrong.
314
+ dating_note: "Art. 72 was wholly re-enacted by LGBl. 2020 Nr. 349 (footnote 417); Bst. d was added by LGBl. 2021 Nr. 307 with effect 1 March 2022."
315
+ source: "https://www.gesetze.li/konso/1978.020 # VZV Art. 72 Abs. 3 lit. a-d and Art. 82 Abs. 6"
316
+ layout:
317
+ rule: >-
318
+ VZV Art. 74, verbatim: "1) Auf dem vorderen Kontrollschild sind von links
319
+ nach rechts das Landeszeichen FL, das kleine Staatswappen und die Zahlen
320
+ aufgetragen. 2) Auf dem hinteren Kontrollschild sind aufgetragen: a) oben
321
+ links das Landeszeichen FL, oben rechts das kleine Staatswappen und
322
+ darunter die Zahlen; oder b) von links nach rechts das Landeszeichen FL,
323
+ das kleine Staatswappen und die Zahlen. 3) Auf Kollektivschildern
324
+ (Händlerschilder) ist am rechten Schilderrand zudem der Buchstabe 'U'
325
+ aufgetragen."
326
+ arms_is_the_separator: >-
327
+ NOTE FOR THE RENDER LAYER AND FOR ANY CONSUMER READING `pattern`. The
328
+ thing that sits between "FL" and the digits is not punctuation — it is the
329
+ SMALL STATE ARMS. Liechtenstein has no printed separator glyph at all.
330
+ This is the case _meta/separators.yml's `never_separator_note` anticipates
331
+ for German and Austrian plates: an emblem between groups is a design
332
+ element carried in `design.emblem`, never in the serial, and no consumer
333
+ may treat it as a strippable character. Every `pattern` below spells a
334
+ SPACE at that position and every `regex` accepts `[- ]?`, so a
335
+ §2.6-conformant consumer canonicalising "FL 1234" reaches "FL1234"
336
+ correctly.
337
+ source: "https://www.gesetze.li/konso/1978.020 # VZV Art. 74 Abs. 1-3"
338
+ material:
339
+ rule: >-
340
+ VZV Art. 72 Abs. 1: "Die Kontrollschilder bestehen aus korrosionsbeständigem
341
+ Metall; sie können mit einem reflektierenden oder nachleuchtenden Belag
342
+ versehen sein." Art. 72 Abs. 2: "Das kleine Staatswappen sowie die
343
+ Buchstaben und Zahlen sind auf 1.5 mm erhaben gepresst."
344
+ finish_note: >-
345
+ Retroreflection is PERMISSIVE ("können"), not mandatory, on the ordinary
346
+ plates — hence `finish: retroreflective-optional` throughout. The single
347
+ exception is the moped plate, where Art. 82 Abs. 6 requires a yellow
348
+ reflective coating in terms ("weisen einen gelb reflektierenden Belag auf").
349
+ embossing: "raised 1.5 mm — arms, letters and numbers alike; Liechtenstein plates are pressed metal, not printed"
350
+ source: "https://www.gesetze.li/konso/1978.020 # VZV Art. 72 Abs. 1-2, Art. 82 Abs. 6"
351
+ arms:
352
+ which: "das kleine Staatswappen"
353
+ definition: >-
354
+ Wappengesetz Art. 3 Abs. 2: "Das kleine Staatswappen ist das von Gold und
355
+ Rot geteilte Herzschild des grossen Staatswappens unter dem Fürstenhut."
356
+ Gold and red, party per bend, beneath the princely hat.
357
+ plate_use_is_statutory: >-
358
+ The plate is named in the arms statute itself. Wappengesetz Art. 12 Abs. 2
359
+ lists where the small state arms are used and includes, in terms, "auf
360
+ Kontrollschildern für Motorfahrzeuge". So the arms-on-plate fact has TWO
361
+ independent instruments behind it — the VZV's layout article and the
362
+ Wappengesetz's use article.
363
+ rendered: placeholder
364
+ licence_posture: >-
365
+ PRD-PLATES §3's placeholder rule applies. The Wappengesetz reserves the
366
+ state arms to the State and no affirmatively-clean licence route to the
367
+ artwork was located, so the emblem slot renders as a neutral placeholder
368
+ exactly as in ch.yml. Recorded honestly and NOT as legal advice: the
369
+ Wappengesetz was read only for Art. 3 and Art. 12 in this pass, and its
370
+ permitted-use provisions were not surveyed.
371
+ history_gap: >-
372
+ RECORDED GAP. The arms are widely reported to have appeared on the plate
373
+ from 1 January 1925 and to have changed from blue-and-red to gold-and-red
374
+ around 1961. NEITHER IS SUPPORTED BY AN INSTRUMENT read here: the 4
375
+ December 1924 decree contains no arms provision at all (all 297 lines were
376
+ read), and the reported 1961 Landtag decision was a spending approval that
377
+ would appear in the parliamentary record rather than in the LGBl. The
378
+ traceable legal thread is the arms statute line — Gesetz vom 4. Juni 1957,
379
+ LGBl. 1957 Nr. 13, repealed and replaced by the 1982 Wappengesetz — and
380
+ LGBl. 1957 Nr. 13 was NOT fetched in this pass.
381
+ sources:
382
+ - "https://www.gesetze.li/konso/html/1982058000 # Wappengesetz Art. 3 Abs. 2 and Art. 12 Abs. 2"
383
+ - "https://www.gesetze.li/konso/1978.020 # VZV Art. 74"
384
+ font:
385
+ name: null
386
+ statutory_basis: >-
387
+ NO TYPEFACE IS NAMED AND NO SCHRIFTMUSTER IS ANNEXED. The VZV prescribes
388
+ the embossing height (Art. 72 Abs. 2) and the layout (Art. 74) and says
389
+ nothing about letterforms. This is the same finding the EU dossier records
390
+ for the UK, Germany and Spain, reached here by absence rather than by
391
+ delegation — Liechtenstein does not even delegate the question the way the
392
+ Swiss ordinance does to the ASTRA.
393
+ licence: >-
394
+ No licensable font is mandated, so per PRD-PLATES §6 the render layer uses
395
+ the schematic fallback and records the substitution. No third-party plate
396
+ font is touched.
397
+ source: "https://www.gesetze.li/konso/1978.020 # VZV Art. 72 Abs. 2, Art. 74 — the whole of what the ordinance says about characters"
398
+ number_ranges:
399
+ status: agency-level
400
+ rule: >-
401
+ NOT LAW. See structural fact 5. The allocation blocks in circulation are
402
+ administered under the Amt für Strassenverkehr's "Weisungen über die
403
+ Kontrollschilder" of 1 January 2015, issued under the VZV's delegation
404
+ provisions. That document was NOT fetched in this pass, so no range is
405
+ stated as fact anywhere in this file; where a series would be identified
406
+ by its block alone, the block is described as agency-allocated and the
407
+ regex does not encode it.
408
+ source: "https://www.llv.li/serviceportal2/amtsstellen/amt-fuer-strassenverkehr/asv/weisungen-kontrollschilder-01012015.pdf # AGENCY INSTRUMENT, located but NOT fetched — recorded as the place the ranges live"
409
+ not_modelled:
410
+ - "DIPLOMATIC PLATES ARE NOT MODELLED. A provision exists — Verordnung vom 21. April 1981 über Ausweise und Bewilligungen sowie Kontrollschilder und Kennzeichen im Strassenverkehr, LGBl. 1981 Nr. 64, Art. 18 — but it was NOT FETCHED in this pass, and secondary accounts suggest the regime was never implemented in practice. Modelling it from an unread article would be manufacturing. Recorded as a located-but-unread instrument and the single best target for the next pass."
411
+ - "HISTORIC / VETERAN PLATES DO NOT EXIST as a plate class. Art. 71's colour list and Art. 71 Abs. 2's marking list are both closed and neither has a historic entry."
412
+ - "TAXI PLATES DO NOT EXIST. Nothing in Art. 71 marks a for-hire vehicle."
413
+ - "EXPORT PLATES DO NOT EXIST. Art. 71 is exhaustive and has no export series; the nearest regime is the provisional immatriculation of VVV Art. 19, modelled as li-provisional."
414
+ - "GOVERNMENT AND POLICE PLATES ARE NOT SEPARATE SERIES. They are ordinary black Art. 71 Abs. 1 Bst. a plates carrying low agency-allocated numbers. The low blocks are administrative, not statutory — see common.number_ranges — so no series is created for them."
415
+ - "MATTE-BLACK AND COLLECTOR/SOUVENIR PLATES are options and merchandise administered by the ASV, not distinct series in the ordinance."
416
+
417
+ region_encoding: none
418
+ region_encoding_note: >-
419
+ Liechtenstein encodes NO geography in the plate and has no subdivision codes.
420
+ The country has eleven Gemeinden and none of them appears in a registration.
421
+ This is stated once here and repeated per series as `region_encoding: none`.
422
+
423
+ series:
424
+
425
+ # =========================================================================
426
+ # THE STANDARD SERIES — black ground, white script, FL + number.
427
+ # The oldest continuously-running plate system in Europe, and the one
428
+ # instrument-dated fact that most secondary accounts get wrong by a year.
429
+ # =========================================================================
430
+ - id: li-standard
431
+ class: standard
432
+ categories: [car, van, truck, bus, motorcycle, trailer]
433
+ period: { start: 1925 }
434
+ period_evidence: instrument-in-force
435
+ period_note: >-
436
+ 1925, NOT 1924 — the instrument-date rule in its clearest form. The
437
+ Vollziehungs-Verordnung is dated 4 December 1924 and was published on
438
+ 6 December 1924, and its Art. 30 Abs. 1 is what mandates the FL plate.
439
+ But the decree's own commencement clause reads "Diese Verordnung tritt am
440
+ 1. Januar 1925 in Kraft." No FL plate could lawfully be issued under it
441
+ before 1 January 1925. Secondary accounts uniformly say "1924", dating the
442
+ system by the signature of the decree rather than by its commencement;
443
+ that is precisely the error this dataset's period discipline exists to
444
+ prevent, and it is corrected here from the instrument's own text.
445
+ matching: strict
446
+ format:
447
+ pattern: "LL 99999"
448
+ regex: '\A[A-Z]{2}[- ]?\d{1,5}\z'
449
+ regex_strict: '\AFL[- ]?\d{1,5}\z'
450
+ regex_statutory: '\A[A-Z]{2}[- ]?\d+\z'
451
+ format_evidence: statutory
452
+ charset:
453
+ letters: "the literal pair FL and nothing else — VZV Art. 73 Abs. 1 fixes them for all Liechtenstein motor vehicles"
454
+ notes: >-
455
+ THERE IS NO VARIABLE LETTER ANYWHERE IN THE ORDINARY LIECHTENSTEIN
456
+ SERIAL — FL is a constant, not an alphabet. That makes the `[A-Z]{2}`
457
+ in `regex` a pure artefact of the human-pattern DSL (see
458
+ common.pattern_dsl_limitation), and `regex_strict` carries the real
459
+ and only grammar. A consumer wanting the truth should read
460
+ `regex_strict` here, not `regex`. This is a stronger case than
461
+ Switzerland's, where `[A-Z]{2}` at least stands for a real 26-member
462
+ set; in Liechtenstein it stands for exactly one value.
463
+ progression: >-
464
+ VZV Art. 73 Abs. 2 — ascending order, with number spaces split per
465
+ colour, per special marking and between the motorcar and motorcycle
466
+ families. No date and no geography is encoded.
467
+ separator_note: >-
468
+ The gap between FL and the digits is occupied by the SMALL STATE ARMS,
469
+ not by punctuation (Art. 74 Abs. 1). See common.layout.arms_is_the_separator.
470
+ On the Hochformat rear plate the digits sit on a second line instead.
471
+ design:
472
+ plate: { w: 300, h: 80, unit: mm, note: "FRONT plate, corners rounded r=10 mm (Art. 72 Abs. 3 Bst. a)" }
473
+ plate_variants:
474
+ - { w: 300, h: 160, unit: mm, note: "REAR Hochformat, two-line (Art. 72 Abs. 3 Bst. b)" }
475
+ - { w: 500, h: 110, unit: mm, note: "REAR Langformat, single-line (Art. 72 Abs. 3 Bst. b)" }
476
+ background: { color: "#000000", finish: retroreflective-optional, hex_basis: observed, spec_note: "VZV Art. 71 Abs. 1 Bst. a names 'schwarzem Grund und weisser Schrift' with no RAL/RGB value" }
477
+ foreground: "#FFFFFF"
478
+ colour_dating_note: >-
479
+ The BLACK/WHITE combination is instrument-sourced only from 1 January
480
+ 2021 (LGBl. 2020 Nr. 349). Before that the VZV delegated colour to the
481
+ government, so black-on-white for the period 1978-2020 is agency-level,
482
+ and for 1925-1978 it is not sourced here at all. The SERIES period is
483
+ unaffected — see common.colours.dating.
484
+ band: { side: none }
485
+ band_note: "no Euro band and no national strip — Liechtenstein is not in the EU. The FL letters are ON the plate under Art. 73 Abs. 1, so no separate country oval is needed domestically."
486
+ emblem:
487
+ present: true
488
+ rendered: placeholder
489
+ position: "between the FL and the digits on the front and Langformat plates; upper right on the Hochformat rear plate (Art. 74 Abs. 1-2)"
490
+ note: "das kleine Staatswappen — see common.arms"
491
+ layout_front: "left to right: FL, small state arms, digits (Art. 74 Abs. 1)"
492
+ layout_rear: "either FL upper left, arms upper right, digits below; or left to right FL, arms, digits (Art. 74 Abs. 2 Bst. a and b) — the ordinance permits BOTH"
493
+ rear_differs: true
494
+ rear_differs_note: >-
495
+ TRUE, and in two ways at once: the rear plate has different DIMENSIONS
496
+ from the front (300x160 or 500x110 against 300x80) and a different
497
+ permitted LAYOUT (Art. 74 Abs. 2 allows a two-line arrangement the front
498
+ plate does not have). Unlike Switzerland the emblem content is the same
499
+ on both — Liechtenstein has no cantonal arms to add.
500
+ display: "two plates, front and rear, since 1924: 'An jedem Motorwagen müssen zwei Schilder angebracht sein' (LGBl. 1924 Nr. 20, Art. 30 Abs. 1)"
501
+ region_encoding: none
502
+ notes: >-
503
+ THE MAIN SERIES: black ground, white script, FL plus an ascending number,
504
+ binding to the Halter. Modelled as ONE continuous series from 1925 because
505
+ the defining grammar — FL plus a number, allocated to the owner — has not
506
+ changed since the 1924 decree; what changed across the century is
507
+ dimensions, materials, the arms and the colour's legal basis, all of which
508
+ are design facts carried above rather than new series. A verifier who
509
+ wants generation splits should note that no instrument read here draws
510
+ one.
511
+ sources:
512
+ - "https://www.gesetze.li/chrono/html/1924020000 # LGBl. 1924 Nr. 20, Vollziehungs-Verordnung vom 4. Dezember 1924, Art. 30 Abs. 1 (FL + Kontrollnummer, two plates) and the commencement clause 'Diese Verordnung tritt am 1. Januar 1925 in Kraft'"
513
+ - "https://www.gesetze.li/konso/1978.020 # VZV Art. 71 Abs. 1 Bst. a (colours), Art. 72 Abs. 3 Bst. a-b (dimensions), Art. 73 (FL + numbering), Art. 74 Abs. 1-2 (layout), Art. 76 Abs. 1 (owner binding)"
514
+ - "https://www.gesetze.li/konso/html/1982058000 # Wappengesetz Art. 12 Abs. 2 — the small state arms are used 'auf Kontrollschildern für Motorfahrzeuge'"
515
+
516
+ # =========================================================================
517
+ # THE COLOUR-DEFINED SPECIAL-USE SERIES (Art. 71 Abs. 1 Bst. b-f).
518
+ # =========================================================================
519
+ - id: li-workvehicle-blue
520
+ class: standard
521
+ categories: [machine, truck]
522
+ period: { start: 1978 }
523
+ period_evidence: instrument-in-force-upper-bound
524
+ period_note: >-
525
+ 1978 is an UPPER BOUND on the start, not the start. The VZV of 1 August
526
+ 1978 is the earliest instrument READ that carries a plate-type system;
527
+ its own predecessor, the Verordnung vom 5. April 1977 (LGBl. 1977 Nr. 29),
528
+ also enumerated plate types and was not fully read, so work-vehicle plates
529
+ may well be older. The COLOUR is a separate and later fact — light blue
530
+ enters the ordinance only on 1 January 2021.
531
+ matching: strict
532
+ format:
533
+ pattern: "LL 99999"
534
+ regex: '\A[A-Z]{2}[- ]?\d{1,5}\z'
535
+ regex_strict: '\AFL[- ]?\d{1,5}\z'
536
+ regex_statutory: '\A[A-Z]{2}[- ]?\d+\z'
537
+ format_evidence: statutory
538
+ progression: "own number space, separate from every other colour (Art. 73 Abs. 2)"
539
+ design:
540
+ plate: { w: 300, h: 80, unit: mm }
541
+ background: { color: "#ADD8E6", finish: retroreflective-optional, hex_basis: observed, spec_note: "VZV Art. 71 Abs. 1 Bst. b names 'hellblauem Grund und schwarzer Schrift'; no RAL/RGB value exists" }
542
+ foreground: "#000000"
543
+ band: { side: none }
544
+ emblem: { present: true, rendered: placeholder }
545
+ rear_differs: true
546
+ region_encoding: none
547
+ notes: >-
548
+ ARBEITSFAHRZEUGE — work vehicles. Light blue ground, black script. The
549
+ string is indistinguishable from an ordinary plate, so the COLOUR is the
550
+ only thing that identifies the series: a parse API cannot tell a blue
551
+ work-vehicle registration from a black car registration from the text
552
+ alone, and must not claim to.
553
+ sources:
554
+ - "https://www.gesetze.li/konso/1978.020 # VZV Art. 71 Abs. 1 Bst. b, Art. 73 Abs. 2"
555
+
556
+ - id: li-exceptional-brown
557
+ class: standard
558
+ categories: [truck, machine, trailer]
559
+ period: { start: 1978 }
560
+ period_evidence: instrument-in-force-upper-bound
561
+ matching: strict
562
+ format:
563
+ pattern: "LL 99999"
564
+ regex: '\A[A-Z]{2}[- ]?\d{1,5}\z'
565
+ regex_strict: '\AFL[- ]?\d{1,5}\z'
566
+ regex_statutory: '\A[A-Z]{2}[- ]?\d+\z'
567
+ format_evidence: statutory
568
+ design:
569
+ plate: { w: 300, h: 80, unit: mm }
570
+ background: { color: "#D2B48C", finish: retroreflective-optional, hex_basis: observed, spec_note: "'hellbraunem Grund und schwarzer Schrift', Art. 71 Abs. 1 Bst. c; no RAL/RGB value" }
571
+ foreground: "#000000"
572
+ band: { side: none }
573
+ emblem: { present: true, rendered: placeholder }
574
+ rear_differs: true
575
+ region_encoding: none
576
+ notes: >-
577
+ AUSNAHMEFAHRZEUGE — exceptional vehicles, i.e. those exceeding the
578
+ ordinary weight or dimension limits. Light brown ground, black script.
579
+ Same textual indistinguishability as the blue series: colour alone
580
+ separates it.
581
+ sources:
582
+ - "https://www.gesetze.li/konso/1978.020 # VZV Art. 71 Abs. 1 Bst. c"
583
+
584
+ - id: li-agricultural-green
585
+ class: agricultural
586
+ categories: [tractor, machine, trailer]
587
+ period: { start: 1978 }
588
+ period_evidence: instrument-in-force-upper-bound
589
+ matching: strict
590
+ format:
591
+ pattern: "LL 99999"
592
+ regex: '\A[A-Z]{2}[- ]?\d{1,5}\z'
593
+ regex_strict: '\AFL[- ]?\d{1,5}\z'
594
+ regex_statutory: '\A[A-Z]{2}[- ]?\d+\z'
595
+ format_evidence: statutory
596
+ design:
597
+ plate: { w: 300, h: 80, unit: mm, note: "Art. 72 Abs. 3 Bst. a puts landwirtschaftliche Fahrzeuge on the 300x80 format, and they carry a SINGLE plate" }
598
+ background: { color: "#90EE90", finish: retroreflective-optional, hex_basis: observed, spec_note: "'hellgrünem Grund und schwarzer Schrift', Art. 71 Abs. 1 Bst. d; no RAL/RGB value" }
599
+ foreground: "#000000"
600
+ band: { side: none }
601
+ emblem: { present: true, rendered: placeholder }
602
+ rear_differs: false
603
+ region_encoding: none
604
+ notes: >-
605
+ LAND- UND FORSTWIRTSCHAFTLICHE FAHRZEUGE — agricultural and forestry
606
+ vehicles. Light green ground, black script, and one plate rather than two:
607
+ Art. 72 Abs. 3 Bst. a groups them with the single-plate formats. Note the
608
+ ordinance's category is wider than the colour article's heading suggests —
609
+ Art. 72 says "landwirtschaftliche Fahrzeuge" where Art. 71 says "land- und
610
+ forstwirtschaftliche Fahrzeuge".
611
+ sources:
612
+ - "https://www.gesetze.li/konso/1978.020 # VZV Art. 71 Abs. 1 Bst. d, Art. 72 Abs. 3 Bst. a"
613
+
614
+ - id: li-lightmotor-yellow
615
+ class: motorcycle
616
+ categories: [motorcycle, quadricycle]
617
+ period: { start: 1978 }
618
+ period_evidence: instrument-in-force-upper-bound
619
+ matching: strict
620
+ format:
621
+ pattern: "LL 9999"
622
+ regex: '\A[A-Z]{2}[- ]?\d{1,5}\z'
623
+ regex_strict: '\AFL[- ]?\d{1,5}\z'
624
+ regex_statutory: '\A[A-Z]{2}[- ]?\d+\z'
625
+ format_evidence: statutory
626
+ progression: >-
627
+ Own number space. Art. 73 Abs. 2 puts Motorräder, Klein- und
628
+ dreirädrige Motorfahrzeuge in a DIFFERENT numbering family from
629
+ motorcars, so a low number here is unrelated to a low number on a car
630
+ plate.
631
+ design:
632
+ plate: { w: 180, h: 140, unit: mm, note: "Art. 72 Abs. 3 Bst. c — the SAME plate size as full motorcycles, which is where Liechtenstein diverges from Switzerland; see common.dimensions.divergence_from_ch_note" }
633
+ background: { color: "#FFD700", finish: retroreflective-optional, hex_basis: observed, spec_note: "'gelbem Grund und schwarzer Schrift', Art. 71 Abs. 1 Bst. e; no RAL/RGB value" }
634
+ foreground: "#000000"
635
+ band: { side: none }
636
+ emblem: { present: true, rendered: placeholder }
637
+ rear_differs: false
638
+ region_encoding: none
639
+ notes: >-
640
+ KLEINMOTORRÄDER UND LEICHTMOTORFAHRZEUGE — small motorcycles and light
641
+ motor vehicles. Yellow ground, black script, rear plate only. Distinct
642
+ from li-moped, which is the MOTORFAHRRAD (moped) plate under Art. 82 and
643
+ is a different size, a different legal regime and a mandatory-reflective
644
+ finish.
645
+ sources:
646
+ - "https://www.gesetze.li/konso/1978.020 # VZV Art. 71 Abs. 1 Bst. e, Art. 72 Abs. 3 Bst. c, Art. 73 Abs. 2"
647
+
648
+ - id: li-day-registration
649
+ class: temporary
650
+ categories: [car, van, truck, bus, motorcycle, trailer]
651
+ period: { start: 2021 }
652
+ period_evidence: instrument-in-force
653
+ period_caveat: >-
654
+ READ THIS BEFORE TRUSTING THE START YEAR. 1 January 2021 is the date the
655
+ COLOUR entry for day-registration plates (Art. 71 Abs. 1 Bst. f) entered
656
+ the ordinance via LGBl. 2020 Nr. 349. It is almost certainly NOT the date
657
+ the day-registration regime began — Tageszulassung is an old device and
658
+ the underlying provision was not pinned in this pass. The start is
659
+ recorded as 2021 because that is the only date an instrument supports,
660
+ and this caveat exists so no consumer reads it as the regime's origin. A
661
+ verifier should push this start back or re-cut the series.
662
+ matching: strict
663
+ format:
664
+ pattern: "LL 99999"
665
+ regex: '\A[A-Z]{2}[- ]?\d{1,5}\z'
666
+ regex_strict: '\AFL[- ]?\d{1,5}\z'
667
+ regex_statutory: '\A[A-Z]{2}[- ]?\d+\z'
668
+ format_evidence: statutory
669
+ design:
670
+ plate: { w: 300, h: 80, unit: mm }
671
+ background: { color: "#000000", finish: retroreflective-optional, hex_basis: observed, spec_note: "'schwarzem Grund und gelber Schrift', Art. 71 Abs. 1 Bst. f" }
672
+ foreground: "#FFD700"
673
+ foreground_note: >-
674
+ YELLOW SCRIPT ON BLACK — the inverse-contrast twin of the standard
675
+ series, and the only series in the file that shares the standard's black
676
+ ground. Colour is the entire distinction, in both directions: the string
677
+ is identical in shape and the ground is identical in colour.
678
+ band: { side: none }
679
+ emblem: { present: true, rendered: placeholder }
680
+ rear_differs: true
681
+ region_encoding: none
682
+ notes: >-
683
+ TAGESZULASSUNG — day registration, for short journeys on an unregistered
684
+ vehicle. Black ground with YELLOW script, which is what separates it from
685
+ the standard black-and-white plate. Its number block is agency-allocated
686
+ and is not stated here (common.number_ranges).
687
+ sources:
688
+ - "https://www.gesetze.li/konso/1978.020 # VZV Art. 71 Abs. 1 Bst. f, inserted by LGBl. 2020 Nr. 349 with effect 1 January 2021"
689
+
690
+ - id: li-rear-load-carrier
691
+ class: trailer
692
+ categories: [load-carrier]
693
+ period: { start: 2022 }
694
+ period_evidence: instrument-in-force
695
+ period_note: >-
696
+ THE SECOND TEXTBOOK INSTRUMENT-DATE CASE IN THIS FILE, and the cleanest
697
+ in the dataset. The amending ordinance is dated 5 October 2021 and was
698
+ published 8 October 2021. Its commencement article splits: "1) Diese
699
+ Verordnung tritt vorbehaltlich Abs. 2 am 1. November 2021 in Kraft.
700
+ 2) Art. 69 Abs. 6, Art. 71 Abs. 1 Bst. g und Abs. 4 sowie Art. 72 Abs. 3
701
+ Bst. d treten am 1. März 2022 in Kraft." The PLATE provisions are in
702
+ subsection 2. So the series starts 1 March 2022 — not on the signature
703
+ date, not on the publication date, and not on the instrument's general
704
+ commencement date, all three of which fall in 2021. Three plausible wrong
705
+ answers, one right one, and only the instrument distinguishes them.
706
+ matching: strict
707
+ format:
708
+ pattern: "LL 99999"
709
+ regex: '\A[A-Z]{2}[- ]?\d{1,5}\z'
710
+ regex_strict: '\AFL[- ]?\d{1,5}\z'
711
+ regex_statutory: '\A[A-Z]{2}[- ]?\d+\z'
712
+ format_evidence: statutory
713
+ progression: "repeats the number of the towing vehicle's plate — this plate carries no independent number space"
714
+ design:
715
+ plate: { w: 500, h: 110, unit: mm, note: "Langformat only — Art. 72 Abs. 3 Bst. d gives this plate ONE format, unlike the standard series" }
716
+ background: { color: "#CC0000", finish: retroreflective-optional, hex_basis: observed, spec_note: "'rotem Grund und weisser Schrift', Art. 71 Abs. 1 Bst. g" }
717
+ foreground: "#FFFFFF"
718
+ band: { side: none }
719
+ emblem: { present: true, rendered: placeholder }
720
+ rear_differs: false
721
+ region_encoding: none
722
+ notes: >-
723
+ KONTROLLSCHILD FÜR HINTERE LASTENTRÄGER — the red repeater plate for a
724
+ rear-mounted load carrier (a bicycle rack or similar) that obscures the
725
+ real plate. Its validity is CONDITIONAL, and the ordinance says so in
726
+ terms: Art. 71 Abs. 4, "Das Kontrollschild für hintere Lastenträger nach
727
+ Abs. 1 Bst. g ist nur gültig, wenn es zusammen mit den zwei am Motorwagen
728
+ angebrachten schwarzen Kontrollschildern nach Abs. 1 Bst. a verwendet
729
+ wird." It is therefore never an independent registration — it is a
730
+ repeater, and a consumer must not treat a red plate as a vehicle's
731
+ registration in its own right.
732
+ sources:
733
+ - "https://www.gesetze.li/chrono/html/2021307000 # LGBl. 2021 Nr. 307, Verordnung vom 5. Oktober 2021, the split commencement clause putting Art. 71 Abs. 1 Bst. g in force on 1 March 2022"
734
+ - "https://www.gesetze.li/konso/1978.020 # VZV Art. 71 Abs. 1 Bst. g, Art. 71 Abs. 4 (the validity condition), Art. 72 Abs. 3 Bst. d (500x110 mm)"
735
+
736
+ # =========================================================================
737
+ # THE MOPED PLATE — its own article, its own size, its own rules, and the
738
+ # only sourced digit width in the file.
739
+ # =========================================================================
740
+ - id: li-moped
741
+ class: moped
742
+ categories: [moped]
743
+ period: { start: 1978 }
744
+ period_evidence: instrument-in-force-upper-bound
745
+ matching: strict
746
+ format:
747
+ pattern: "LL 99999"
748
+ regex: '\A[A-Z]{2}[- ]?\d{5}\z'
749
+ regex_strict: '\AFL[- ]?\d{5}\z'
750
+ regex_statutory: '\A[A-Z]{2}[- ]?\d+\z'
751
+ format_evidence: statutory
752
+ charset:
753
+ notes: >-
754
+ THE ONE SOURCED DIGIT WIDTH IN THIS FILE. Art. 82 Abs. 6 says
755
+ "die 5-stelligen Kontrollschildnummern" — five-digit numbers, in
756
+ terms. Every other series in this file uses \d{1,5} as a practical
757
+ bound because the ordinance caps nothing; here the five is the
758
+ ordinance's own word, so `regex` states it exactly and no
759
+ `regex_strict` is needed.
760
+ separator_note: >-
761
+ The moped plate's layout is different again: Art. 82 Abs. 6 puts FL at
762
+ the TOP with the insurance vignette beside it and the five digits BELOW,
763
+ on two lines. The pattern spells a space for the break.
764
+ design:
765
+ plate: { w: 100, h: 140, unit: mm, note: "Art. 82 Abs. 6, stated as 14 cm high and 10 cm wide — PORTRAIT, and the only portrait format in Liechtenstein" }
766
+ background: { color: "#FFD700", finish: retroreflective, hex_basis: observed, spec_note: "Art. 82 Abs. 6 requires a yellow reflective coating in terms — 'weisen einen gelb reflektierenden Belag auf'. This is the ONLY series where reflection is mandatory rather than optional." }
767
+ foreground: "#000000"
768
+ band: { side: none }
769
+ emblem:
770
+ present: false
771
+ note: "the moped plate carries NO coat of arms — Art. 82 Abs. 6 lists FL, the insurance vignette and the number, and the arms are absent from that list. A sourced negative, and a real difference from every other Liechtenstein plate."
772
+ vignette: { present: true, position: "top, beside the FL", note: "Versicherungsvignette — the insurance sticker is part of the prescribed layout, not an add-on" }
773
+ layout: "FL top left, insurance vignette beside it, the five-digit number below on two lines (Art. 82 Abs. 6)"
774
+ rear_differs: false
775
+ region_encoding: none
776
+ notes: >-
777
+ MOTORFAHRRAD (moped) plates, governed by their own article rather than by
778
+ the Art. 71/72 scheme. Four things set them apart and all four are
779
+ statutory: a portrait 100x140 mm format, MANDATORY yellow reflective
780
+ material, NO coat of arms, and an integral insurance vignette. The
781
+ five-digit width is the only digit count the Liechtenstein ordinance
782
+ states anywhere.
783
+ sources:
784
+ - "https://www.gesetze.li/konso/1978.020 # VZV Art. 82 Abs. 6, verbatim: 'Kontrollschilder für Motorfahrräder sind 14 cm hoch und 10 cm breit. Sie sind aus korrosionsbeständigem Metall und weisen einen gelb reflektierenden Belag auf. Buchstaben und Zahlen haben eine schwarze Farbe. Oben sind das Landeskennzeichen FL, daneben die Versicherungsvignette und darunter auf zwei Linien die 5-stelligen Kontrollschildnummern erhaben eingepresst.'"
785
+
786
+ # =========================================================================
787
+ # MARKED SERIES — the letter suffixes of Art. 71 Abs. 2 and the VVV.
788
+ # =========================================================================
789
+ - id: li-dealer-u
790
+ class: dealer
791
+ categories: [car, van, truck, bus, motorcycle, moped, trailer, tractor, machine]
792
+ period: { start: 1978 }
793
+ period_evidence: instrument-in-force-upper-bound
794
+ matching: strict
795
+ format:
796
+ pattern: "LL 99999 U"
797
+ regex: '\A[A-Z]{2}[- ]?\d{1,5}[- ]?U\z'
798
+ regex_strict: '\AFL[- ]?\d{1,5}[- ]?U\z'
799
+ regex_statutory: '\A[A-Z]{2}[- ]?\d+[- ]?U\z'
800
+ format_evidence: statutory
801
+ charset:
802
+ notes: >-
803
+ The U is a MARKING LETTER at the right-hand edge of the plate, not a
804
+ serial character in the ordinary sense — but it is printed, it is
805
+ part of what a reader sees, and it distinguishes the string, so it is
806
+ carried in the pattern. Art. 74 Abs. 3 fixes its position: "am rechten
807
+ Schilderrand".
808
+ design:
809
+ plate: { w: 300, h: 80, unit: mm }
810
+ background: { color: "#000000", finish: retroreflective-optional, hex_basis: observed }
811
+ foreground: "#FFFFFF"
812
+ band: { side: none }
813
+ emblem: { present: true, rendered: placeholder }
814
+ layout: "as the standard plate, with the letter U added at the right-hand edge (Art. 74 Abs. 3)"
815
+ rear_differs: true
816
+ region_encoding: none
817
+ notes: >-
818
+ KOLLEKTIVSCHILDER (Händlerschilder) — dealer/trade plates, marked with the
819
+ letter U and bound to a business rather than to a vehicle. Two provisions
820
+ carry it: Art. 71 Abs. 2 Bst. c creates the marking, Art. 74 Abs. 3 places
821
+ it at the right-hand edge. The colour follows the standard series because
822
+ Art. 71 Abs. 1 Bst. a governs the ground and the U is a marking rather
823
+ than a colour class.
824
+ sources:
825
+ - "https://www.gesetze.li/konso/1978.020 # VZV Art. 71 Abs. 2 Bst. c and Art. 74 Abs. 3, verbatim: 'Auf Kollektivschildern (Händlerschilder) ist am rechten Schilderrand zudem der Buchstabe \"U\" aufgetragen.'"
826
+
827
+ - id: li-rental-v
828
+ class: dealer
829
+ categories: [car, van, bus]
830
+ period: { start: 1978, end: 2001 }
831
+ period_evidence: instrument-dated-both-ends
832
+ period_note: >-
833
+ A CLEANLY CLOSED SERIES. The marking is in the 1978 VZV as originally
834
+ enacted — Art. 71 Abs. 2 Bst. b, "die Schilder für Mietwagen mit dem
835
+ Buchstaben 'V'" — and Bst. b was REPEALED by LGBl. 2001 Nr. 118. The start
836
+ is an upper bound in the same sense as the other 1978 rows; the end is
837
+ fixed by a repealing instrument, which is the strongest kind of end date
838
+ available.
839
+ matching: strict
840
+ format:
841
+ pattern: "LL 99999 V"
842
+ regex: '\A[A-Z]{2}[- ]?\d{1,5}[- ]?V\z'
843
+ regex_strict: '\AFL[- ]?\d{1,5}[- ]?V\z'
844
+ regex_statutory: '\A[A-Z]{2}[- ]?\d+[- ]?V\z'
845
+ format_evidence: statutory
846
+ design:
847
+ plate: { w: 300, h: 80, unit: mm }
848
+ background: { color: "#000000", finish: retroreflective-optional, hex_basis: observed }
849
+ foreground: "#FFFFFF"
850
+ band: { side: none }
851
+ emblem: { present: true, rendered: placeholder }
852
+ rear_differs: true
853
+ region_encoding: none
854
+ notes: >-
855
+ MIETWAGEN — rental cars, marked with the letter V. Repealed in 2001 and
856
+ not reissued. Recorded because plates in circulation outlive their
857
+ instruments and a parse API meeting an old V plate should be able to date
858
+ it: a V marking places the registration before 2001. Liechtenstein and
859
+ Switzerland repealed their equivalent rental markings within months of
860
+ each other, from separately-enacted ordinances — a striking convergence
861
+ that is NOT a legal relationship (structural fact 4).
862
+ sources:
863
+ - "https://www.gesetze.li/chrono/html/1978020000 # the ORIGINAL VZV text, Art. 71 Abs. 2 Bst. b: 'die Schilder für Mietwagen mit dem Buchstaben \"V\"'"
864
+ - "https://www.gesetze.li/konso/1978.020 # the consolidated text showing Art. 71 Abs. 2 Bst. b as 'Aufgehoben', repealed by LGBl. 2001 Nr. 118"
865
+
866
+ - id: li-provisional
867
+ class: temporary
868
+ categories: [car, van, truck, bus, motorcycle, trailer]
869
+ period: { start: 1978 }
870
+ period_evidence: instrument-in-force-upper-bound
871
+ matching: strict
872
+ format:
873
+ pattern: "LL 99999"
874
+ regex: '\A[A-Z]{2}[- ]?\d{1,5}\z'
875
+ regex_strict: '\AFL[- ]?\d{1,5}\z'
876
+ regex_statutory: '\A[A-Z]{2}[- ]?\d+\z'
877
+ format_evidence: statutory
878
+ separator_note: >-
879
+ The distinguishing mark is a raised vertical RED BAR after the number,
880
+ not a character — it cannot appear in the serial and does not appear in
881
+ the pattern. The plate string alone is indistinguishable from an
882
+ ordinary registration.
883
+ design:
884
+ plate: { w: 300, h: 80, unit: mm, note: "VVV Anhang 1a Ziff. 2: provisional plates follow VZV Art. 72 and 74 for construction and lettering" }
885
+ background: { color: "#000000", finish: retroreflective-optional, hex_basis: observed }
886
+ foreground: "#FFFFFF"
887
+ band: { side: none }
888
+ emblem: { present: true, rendered: placeholder }
889
+ red_bar:
890
+ present: true
891
+ color: "#CC0000"
892
+ front_and_motorcycle: { w: 33, h: 67, unit: mm }
893
+ rear_motorcar: { w: 36, h: 75, unit: mm }
894
+ note: "raised, vertical, immediately after the number. The year preceding the expiry year is stamped INTO the bar (VVV Anhang 1a Ziff. 4)."
895
+ rear_differs: true
896
+ region_encoding: none
897
+ notes: >-
898
+ PROVISORISCHE ZULASSUNG — provisional registration under VVV Art. 19. The
899
+ spec lives in the INSURANCE ordinance, not the admission ordinance: VZV
900
+ Art. 71 Abs. 2 Bst. a merely points at "Art. 19 VVV", and the physical
901
+ description is in VVV Anhang 1a. Its identity is a physical feature (the
902
+ embossed red bar) rather than anything in the string, so `matching` is
903
+ strict on shape but a match cannot distinguish this series from
904
+ li-standard — a limitation stated rather than hidden.
905
+ sources:
906
+ - "https://www.gesetze.li/konso/html/1978021000 # VVV, LGBl. 1978 Nr. 21, Anhang 1a (zu Art. 19) Bst. A Ziff. 2-4: the red bar, its dimensions, and the expiry-year stamping"
907
+ - "https://www.gesetze.li/konso/1978.020 # VZV Art. 71 Abs. 2 Bst. a, pointing to Art. 19 VVV"
908
+
909
+ - id: li-provisional-z
910
+ class: temporary
911
+ categories: [car, van, truck, bus, motorcycle]
912
+ period: { start: 1978 }
913
+ period_evidence: instrument-in-force-upper-bound
914
+ matching: strict
915
+ format:
916
+ pattern: "LL 99999 Z"
917
+ regex: '\A[A-Z]{2}[- ]?\d{1,5}[- ]?Z\z'
918
+ regex_strict: '\AFL[- ]?\d{1,5}[- ]?Z\z'
919
+ regex_statutory: '\A[A-Z]{2}[- ]?\d+[- ]?Z\z'
920
+ format_evidence: statutory
921
+ charset:
922
+ notes: >-
923
+ The Z is printed in addition to the red bar and IS visible in the
924
+ string, which is what makes this series textually distinguishable
925
+ where plain li-provisional is not.
926
+ design:
927
+ plate: { w: 300, h: 80, unit: mm }
928
+ background: { color: "#000000", finish: retroreflective-optional, hex_basis: observed }
929
+ foreground: "#FFFFFF"
930
+ band: { side: none }
931
+ emblem: { present: true, rendered: placeholder }
932
+ red_bar:
933
+ present: true
934
+ color: "#CC0000"
935
+ front_and_motorcycle: { w: 33, h: 67, unit: mm }
936
+ rear_motorcar: { w: 36, h: 75, unit: mm }
937
+ rear_differs: true
938
+ region_encoding: none
939
+ notes: >-
940
+ UNVERZOLLTE FAHRZEUGE — provisional plates for vehicles not yet cleared
941
+ through customs, marked with an additional Z beside the red bar. The
942
+ customs mark exists because Liechtenstein sits inside the Swiss customs
943
+ area, so "not yet cleared" is a real and common status. THE Z IS FOUND
944
+ NOWHERE IN THE VZV — its only legal source is VVV Anhang 1a Ziff. 3, and
945
+ a researcher reading only the admission ordinance would miss it entirely.
946
+ sources:
947
+ - "https://www.gesetze.li/konso/html/1978021000 # VVV Anhang 1a (zu Art. 19) Bst. A Ziff. 3, verbatim: 'Die Schilder für provisorisch immatrikulierte Motorfahrzeuge tragen anschliessend an die Kontrollnummer einen erhaben gepressten, senkrechten roten Balken; Schilder unverzollter Fahrzeuge tragen zusätzlich den Buchstaben \"Z\".'"
948
+
949
+ # =========================================================================
950
+ # THE PRE-FL SERIES.
951
+ # =========================================================================
952
+ - id: li-l-1915
953
+ class: standard
954
+ categories: [car, van, truck, bus, motorcycle]
955
+ period: { start: 1915, end: 1925 }
956
+ period_evidence: statutory-date
957
+ period_note: >-
958
+ START: the Verordnung of 12 August 1915 (LGBl. 1915 Nr. 13, published
959
+ 18 August 1915) creates the mark. The instrument carries no separate
960
+ commencement clause that was located, so 1915 rests on the instrument's
961
+ own date and publication. END: superseded when the FL decree came into
962
+ force on 1 January 1925 — the same boundary li-standard opens on, from the
963
+ same instrument, which is why the two periods meet exactly rather than
964
+ being guessed.
965
+ matching: strict
966
+ format:
967
+ pattern: "L 999"
968
+ regex: '\A[A-Z][- ]?\d+\z'
969
+ regex_strict: '\AL[- ]?\d+\z'
970
+ format_evidence: statutory
971
+ format_note: >-
972
+ The instrument states the GRAMMAR but not the WIDTH: § 2 says the mark
973
+ consists of the letter L and an arabic numeral, with no digit count and
974
+ no ceiling. `\d+` is therefore the honest encoding of the digits — it is
975
+ not a widening, because the ordinance really does set no ceiling, which
976
+ is why this series is `strict` rather than `recall-only`.
977
+ THE LETTER IS THE DSL PROBLEM, not the digits: see
978
+ common.pattern_dsl_limitation. `regex` spells [A-Z] only because the
979
+ human pattern's L is a TOKEN meaning "any letter"; `regex_strict`
980
+ carries the sourced literal L. No `regex_statutory` twin appears because
981
+ `regex` is already at the outer legal bound on the digits.
982
+ design:
983
+ background: { color: "#000000", finish: non-reflective, hex_basis: observed }
984
+ foreground: "#FFFFFF"
985
+ colour_caveat: >-
986
+ NOT SOURCED. The white-on-black colouring is universally reported by
987
+ secondary accounts, but the complete text of the 1915 decree was read
988
+ and contains NO colour specification — it cross-refers instead to § 30
989
+ of the Austrian Ministerialverordnung of 27 September 1905 (RGBl.
990
+ Nr. 156), which was not fetched. The colour claim is therefore
991
+ Wikipedia-grade and the hexes above are placeholders for it. Marked
992
+ because it would be easy to assume a primary source here where there
993
+ is none.
994
+ colour_evidence: secondary-wikipedia
995
+ band: { side: none }
996
+ emblem: { present: false, note: "no arms provision in the 1915 decree" }
997
+ region_encoding: none
998
+ notes: >-
999
+ THE PRE-FL MARK. Liechtenstein's first own registration mark: the letter L
1000
+ and an arabic number, replacing the Austrian "W" (Vorarlberg) plates used
1001
+ under the earlier Austrian-aligned regime. The decree also forbids
1002
+ carrying both marks at once — "Die gleichzeitige Anbringung
1003
+ liechtensteinischer und österreichischer Erkennungszeichen ist untersagt."
1004
+ RECORDED DISAGREEMENT: the 1915 decree names its own predecessor as the
1005
+ "Verordnung vom 10. Juni 1906, LGBl. 1906 Nr. 2", while secondary accounts
1006
+ date that 1906 ordinance to 18 June. The instrument says 10 June; LGBl.
1007
+ 1906 Nr. 2 itself was not fetched to settle it.
1008
+ sources:
1009
+ - "https://www.gesetze.li/chrono/html/1915013000 # LGBl. 1915 Nr. 13, Verordnung vom 12. August 1915, § 2: 'Diese Erkennungszeichen bestehen in dem Bst. L und einer arabischen Zahl.'"
1010
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Liechtenstein # SECONDARY (secondary-wikipedia): the white-on-black colouring and the preceding Austrian 'W' plates, neither of which the 1915 instrument states"