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
@@ -0,0 +1,430 @@
1
+ # plates/ca-ab.yml — Alberta (PRD-PLATES gate L3, Canada west).
2
+ #
3
+ # ── FOUR STRUCTURAL FACTS THAT SHAPE THIS FILE ─────────────────────────────
4
+ #
5
+ # 1. ALBERTA DELEGATES THE PLATE TWICE, AND THE SECOND DELEGATE PUBLISHES
6
+ # ALMOST NOTHING. Operator Licensing and Vehicle Control Regulation,
7
+ # AR 320/2002, Division 3 (Licence Plates), s. 63, verbatim:
8
+ # "63(1) The Registrar shall issue a licence plate for a vehicle if the
9
+ # Registrar issues a certificate of registration for the vehicle.
10
+ # (2) The Registrar shall issue licence plates in the number and of the
11
+ # type and colour approved by the Minister."
12
+ # So the REGULATION delegates the number, type and colour to the MINISTER,
13
+ # and the Minister's approval is not itself published as an instrument. No
14
+ # dimension, no character metric, no serial grammar exists anywhere in
15
+ # Alberta law. The whole of Division 3 (ss. 63-75) was read; it legislates
16
+ # ELIGIBILITY and DISPLAY and nothing about what a plate looks like. This is
17
+ # the Washington/British Columbia pattern with one more hop.
18
+ #
19
+ # 2. THE SERIAL GRAMMAR IS THEREFORE UNSOURCED TO ANY ALBERTA PUBLICATION, AND
20
+ # THIS FILE SAYS SO ON ITS FACE. `ABC-1234` is universally reported and was
21
+ # NOT located on any alberta.ca page, in the Traffic Safety Act, or in
22
+ # AR 320/2002. It is carried with `period_evidence: secondary-wikipedia` and
23
+ # `format.evidence: secondary`, per the PRD-PLATES § 4 Wikipedia row's
24
+ # tagging condition. Contrast plates/ca-yt.yml, whose grammar for every class
25
+ # is in the regulation itself, and plates/ca-nt.yml, whose thirteen plate
26
+ # types are enumerated with their letter prefixes in the regulation. Alberta
27
+ # is the WEAKEST-sourced format in this seven-jurisdiction group and the
28
+ # ranking is stated so a verifier knows where to spend effort.
29
+ #
30
+ # 3. ALBERTA IS A ONE-PLATE PROVINCE THAT LEGISLATES A SECOND PLATE FOR
31
+ # OLD CARS, AND THAT SECOND PLATE IS A GENUINE HISTORIC ARTEFACT.
32
+ # AR 320/2002 s. 70(2)(a) forbids displaying "any other vehicle plate or
33
+ # device bearing numbers or letters or both that are identical to or have the
34
+ # general appearance of a licence plate". s. 66 then carves out, verbatim:
35
+ # "66 Despite section 70(2), the owner of a motor vehicle that is 25 years
36
+ # old or older and registered as a private passenger vehicle may attach to
37
+ # the front of it one, but not more than one, licence plate issued in
38
+ # Alberta in the year in which the vehicle was manufactured."
39
+ # A lawful Alberta front plate is thus, by statute, a PERIOD-CORRECT PLATE
40
+ # FROM THE VEHICLE'S BUILD YEAR — no current registration, no validity. Any
41
+ # consumer reading Alberta front plates will read expired historic serials as
42
+ # live registrations unless it knows this rule. It is modelled as a DISPLAY
43
+ # RULE, not a series, because no new plate is manufactured for it.
44
+ #
45
+ # 4. THE ONE SOURCED CHARSET RULE IN THE FILE IS ALBERTA'S OWN AND IT IS ABOUT
46
+ # ZERO. alberta.ca, on personalized plates, verbatim among the prohibited
47
+ # configurations: "the letter O (use the number zero)". The same page lists
48
+ # the substitution pairs Alberta polices to prevent look-alikes: 1/I, 1/L,
49
+ # 6/G, 5/S, 2/Z, 0/Q, 8/B, 3/E, 4/A. Note what that list implies and this
50
+ # file does NOT assert: it is a rule about PERSONALIZED plates, and it is not
51
+ # evidence about the regular-series alphabet.
52
+ #
53
+ # REGEX POLICY: as plates/gb.yml. `format.regex` is the round-trippable tier;
54
+ # `regex_strict` carries a sourced narrowing where one exists (here: only the
55
+ # personalized O-exclusion, which cannot go in `regex` because the lint
56
+ # generates O from the human pattern).
57
+ jurisdiction: ca-ab
58
+ authority:
59
+ name: Registrar of Motor Vehicle Services, Government of Alberta (plates issued through registry agents)
60
+ url: "https://www.alberta.ca/licence-plates"
61
+ binding: vehicle
62
+ binding_note: >-
63
+ AR 320/2002 s. 113 lets a registered owner "pass" a plate from one vehicle to
64
+ another of the same class that they own, and s. 68(1) lets a trailer plate be
65
+ transferred between the owner's own trailers with the Registrar's consent,
66
+ while s. 68(2) forbids passing a trailer plate "from one trailer owner to
67
+ another". The plate follows the OWNER's registration within a class, not the
68
+ vehicle.
69
+ instrument:
70
+ statute:
71
+ citation: "Traffic Safety Act, R.S.A. 2000, c. T-6"
72
+ note: "The Act creates the Registrar and the registration regime; the plate provisions live in the regulation below. The Act's own text was not fetched in this pass (recorded gap)."
73
+ regulation:
74
+ citation: "Operator Licensing and Vehicle Control Regulation, Alta. Reg. 320/2002, Part 3 Division 3 (Licence Plates), ss. 63, 63.1, 64, 65, 66, 66.1, 67, 68, 69, 70, 71, 72, 73, 74, 75; s. 115 (Personal licence plates)"
75
+ amendments_seen_in_text: "s. 63.1 added AR 160/2014 s2, amended 77/2022; s. 64 substituted AR 282/2020 s2; s. 66.1 as amended AR 253/2004 s3, 48/2005, 131/2010, 73/2012, 207/2020, 160/2026; s. 70 amended AR 282/2020 s3"
76
+ source: "https://kings-printer.alberta.ca/documents/Regs/2002_320.pdf # Division 3 ss. 63-75 and s. 115 read verbatim 2026-08-02 (PDF, text layer present)"
77
+ agency_page:
78
+ citation: "Government of Alberta, 'Licence plates' (alberta.ca), accessed 2026-08-02"
79
+ source: "https://www.alberta.ca/licence-plates # plate location, one-plate rule, veterans-plate dates, personalized-plate prohibitions incl. the O rule and the look-alike substitution list, the three named specialty plates"
80
+ licence: "Alberta King's Printer serves AR 320/2002 without click-through; it is an edict of government. alberta.ca content is Crown copyright, cited not reproduced."
81
+
82
+ artwork_risk:
83
+ posture: unresearched-crown-copyright-presumed
84
+ basis: >-
85
+ Crown copyright under s. 12 of the Copyright Act (Canada) is the default and
86
+ no Alberta disclaimer was found. Alberta is additionally the group's
87
+ THIRD-PARTY-MARK case, from its own regulation and its own web pages: two of
88
+ the three specialty plates alberta.ca names are professional sports club
89
+ marks (Calgary Flames, Edmonton Oilers), and AR 320/2002 s. 63.1(3) makes
90
+ every specialty plate the product of "a written agreement with[] an
91
+ organization". Alberta legislates that its specialty artwork is a
92
+ contracted third-party property — the same posture Montana reaches by a
93
+ different route (MCA 61-3-475's hold-harmless clause).
94
+ emblem_rule: >-
95
+ PRD-PLATES § 3 placeholder default applies to the wild-rose device, the
96
+ provincial wordmark, the Calgary Flames and Edmonton Oilers marks, and the
97
+ Royal Canadian Legion's "integrated maple leaf and poppy logo", which
98
+ AR 320/2002 s. 66.1(1) puts on the veterans' plate BY NAME. The Legion logo
99
+ is a third-party registered mark placed on a government plate by regulation;
100
+ no theory of Crown copyright reaches it.
101
+ sources:
102
+ - "https://kings-printer.alberta.ca/documents/Regs/2002_320.pdf # s. 63.1(3) written agreement with an organization; s. 66.1(1) the Royal Canadian Legion logo by name"
103
+ - "https://www.alberta.ca/licence-plates # Calgary Flames and Edmonton Oilers specialty plates"
104
+
105
+ display_rules:
106
+ count: >-
107
+ ONE plate. alberta.ca, verbatim: "You cannot display more than one licence
108
+ plate on your vehicle or any other type of plate that could be mistaken for
109
+ a valid licence plate." AR 320/2002 s. 70(2) is the regulation behind it.
110
+ location: >-
111
+ AR 320/2002 s. 70(1), verbatim: "The owner of a vehicle shall attach a
112
+ licence plate securely as follows: (a) if the vehicle is not a truck tractor
113
+ or a motor cycle, to the rear of the vehicle so that the lower edge of the
114
+ plate is not lower than the axle; (b) if the vehicle is a truck tractor, to
115
+ the front of the vehicle; (c) if the vehicle is a motor cycle, on the rear
116
+ mudguard or rear fender so that it is clearly visible."
117
+ truck_tractor_inversion: >-
118
+ Alberta puts the truck tractor's ONLY plate on the FRONT — the same outlier
119
+ Florida legislates (§ 320.0706 F.S.). Two jurisdictions on different
120
+ continents of the same continent reach the identical rule; it is not a
121
+ typo in either file.
122
+ historic_front_plate: >-
123
+ s. 66 (quoted in the header): a private passenger vehicle 25 years old or
124
+ older may carry, ON THE FRONT ONLY, one Alberta plate issued in the year the
125
+ vehicle was manufactured. This is a re-display permission for an EXPIRED
126
+ historic plate, not an issuance, so it has no series.
127
+ condition: "s. 71(1): no person shall drive a vehicle if the licence plate is not securely attached, 'legible and clearly visible at all times'. s. 71(2) excuses obstruction caused only by a trailer attached to the rear."
128
+ foreign_plates: "s. 70(2)(b) forbids displaying a plate issued by another jurisdiction 'unless the display is required by this Regulation or by the laws of the jurisdiction that issued the plate'."
129
+ sources:
130
+ - "https://kings-printer.alberta.ca/documents/Regs/2002_320.pdf # ss. 66, 70, 71"
131
+ - "https://www.alberta.ca/licence-plates # the one-plate sentence and the plate-location list"
132
+
133
+ common:
134
+ separator_note: >-
135
+ Alberta's serial is universally rendered with a hyphen (`ABC-1234`) and NO
136
+ Alberta publication states a separator glyph or a group gap. Under
137
+ PRD-PLATES § 2.8 the honest encoding of an authority that names no glyph is
138
+ a separator-only class, so every regex here spells the position `[- ]?`
139
+ while `pattern` shows the canonical printed hyphen. A § 2.6-forgiving
140
+ consumer deletes it either way.
141
+ dimensions_note: >-
142
+ NEGATIVE FINDING. No dimension appears in AR 320/2002 or on alberta.ca.
143
+ `design.plate` is absent from every series here, as in plates/ca-bc.yml and
144
+ plates/gb.yml.
145
+ charset_disagreement: >-
146
+ RECORDED, NOT AVERAGED (PRD-PLATES § 5.3). Two secondary readings of the
147
+ Alberta regular-series alphabet are in circulation: the world dossier
148
+ (aux/research/plates-2026-07/plates-research-us-world.md § 2.1) reports
149
+ "excludes I, O, Q, U"; the per-province encyclopedia article reports that
150
+ "A, E, I, O, Q, U are skipped" — i.e. all vowels plus Q. No Alberta source
151
+ resolves it. NEITHER is asserted: no `regex_strict` narrows the
152
+ regular-series alphabet in this file, and the disagreement is carried here
153
+ as the standing verifier target.
154
+
155
+ series:
156
+
157
+ # =========================================================================
158
+ # STANDARD PASSENGER.
159
+ # =========================================================================
160
+ - id: ca-ab-standard
161
+ class: standard
162
+ categories: [car, van, truck, bus]
163
+ period: { start: 2010 }
164
+ period_evidence: secondary-wikipedia
165
+ matching: strict
166
+ format:
167
+ pattern: "LLL-9999"
168
+ regex: '\A[A-Z]{3}[- ]?\d{4}\z'
169
+ evidence: secondary
170
+ progression: "not published"
171
+ design:
172
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
173
+ foreground: "#1B3F8B"
174
+ legend_top: "ALBERTA"
175
+ legend_bottom: "Wild Rose Country"
176
+ emblem: { present: true, rendered: placeholder, description: "wild rose device / provincial wordmark" }
177
+ rear_differs: false
178
+ notes: >-
179
+ THE FORMAT AND THE PERIOD ARE BOTH SECONDARY AND THE FILE DOES NOT
180
+ PRETEND OTHERWISE. Three letters, a hyphen and four numerals is the
181
+ arrangement every source reports and no Alberta publication states. The
182
+ reported first issue is June 2010; the encyclopedia row carries no
183
+ footnote for it, so it is tagged `secondary-wikipedia` under the
184
+ PRD-PLATES § 4 Wikipedia condition (tagged + article URL, so that every
185
+ such fact is enumerable in one pass if the decision is revisited). The
186
+ base design itself is reported as introduced in late 1983 and refreshed
187
+ with an updated provincial logo in July 2019 — BASE AND FORMAT HAVE
188
+ DIFFERENT LIFETIMES in Alberta as they do in Oregon and British Columbia,
189
+ and neither reported base date is asserted as a series boundary here.
190
+ No `regex_strict` is offered: see common.charset_disagreement.
191
+ sources:
192
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Alberta # FINDING AID (PRD-PLATES §4 Wikipedia row): the ABC-1234 arrangement, the reported June 2010 first issue, the reported 1983 base and 2019 logo refresh; accessed 2026-08-02"
193
+ - "https://kings-printer.alberta.ca/documents/Regs/2002_320.pdf # s. 63(1)-(2): the Registrar issues; the Minister approves number, type and colour"
194
+
195
+ - id: ca-ab-standard-3x3
196
+ class: standard
197
+ categories: [car, van, truck, bus]
198
+ period: { start: 1975, ended: true }
199
+ year_end_min: 2003
200
+ period_evidence: secondary-wikipedia
201
+ matching: strict
202
+ format:
203
+ pattern: "LLL-999"
204
+ regex: '\A[A-Z]{3}[- ]?\d{3}\z'
205
+ evidence: secondary
206
+ design:
207
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
208
+ foreground: "#1B3F8B"
209
+ legend_top: "ALBERTA"
210
+ legend_bottom: "Wild Rose Country"
211
+ rear_differs: false
212
+ notes: >-
213
+ THE "ONE SERIES BACK" REQUIREMENT, MET WEAKLY AND LABELLED AS SUCH. Three
214
+ letters and three numerals ran from a reported 1975 on a yellow base and
215
+ continued onto the white/red/blue base; the reported end is 2003, seven
216
+ years before the reported ABC-1234 start, and NO SOURCE EXPLAINS THE GAP.
217
+ Because the end year is contested by that gap, the schema's known-over-
218
+ undated shape is used: `ended: true` with `year_end_min: 2003` rather than
219
+ a hard `end`, which is exactly the case PRD-PLATES § 2.2 introduced it
220
+ for. "Wild Rose Country" is reported as the slogan from 1973, i.e. it
221
+ spans both series and is not an era signal.
222
+ sources:
223
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Alberta # FINDING AID: ABC-123 reported 1975-2003, yellow base, slogan from 1973; accessed 2026-08-02"
224
+
225
+ # =========================================================================
226
+ # CLASSES ALBERTA LEGISLATES BUT DOES NOT SPECIFY A GRAMMAR FOR.
227
+ # =========================================================================
228
+ - id: ca-ab-veterans
229
+ class: specialty
230
+ categories: [car, van, truck, motorcycle, moped]
231
+ period: { start: 2005 }
232
+ period_evidence: agency-stated-date
233
+ matching: recall-only
234
+ format:
235
+ pattern: "LLL-999"
236
+ regex: '\A[A-Z0-9](?:[- ]?[A-Z0-9])*\z'
237
+ evidence: none-published
238
+ design:
239
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
240
+ foreground: "#1B3F8B"
241
+ legend: "Veteran"
242
+ emblem: { present: true, rendered: placeholder, description: "integrated maple leaf and poppy logo of the Royal Canadian Legion (named in AR 320/2002 s. 66.1(1))" }
243
+ notes: >-
244
+ THE DESIGN IS IN THE REGULATION EVEN THOUGH THE SERIAL IS NOT.
245
+ AR 320/2002 s. 66.1(1), verbatim: "The Registrar may issue a veterans'
246
+ licence plate that includes the word 'Veteran' and bears a depiction of
247
+ the integrated maple leaf and poppy logo of the Royal Canadian Legion to
248
+ an individual who meets the criteria set out in this section." s. 66.1(6)
249
+ restricts it to passenger-class motor vehicles, Class 2 farm vehicles,
250
+ motor cycles (not off-highway vehicles) and mopeds. s. 66.1(4) is the
251
+ unusual bit: "The evaluation of service documentation ... is the EXCLUSIVE
252
+ RESPONSIBILITY of the Royal Canadian Legion, Alberta-NWT Command" — a
253
+ government plate whose eligibility adjudication is contracted out to a
254
+ private body, with its own appeal process. `period.start: 2005` is
255
+ alberta.ca's own statement: "The Government of Alberta introduced a
256
+ special veterans' licence plate in 2005 and a motorcycle veterans' licence
257
+ plate in 2012". The motorcycle variant is recorded here rather than given
258
+ its own series because no format difference is sourced. s. 66.1(9)-(10)
259
+ let the Registrar recall the plate when eligibility lapses, and
260
+ alberta.ca adds that on the veteran's death the plate "may be retained
261
+ only as a memento but can no longer be used on a vehicle".
262
+ sources:
263
+ - "https://kings-printer.alberta.ca/documents/Regs/2002_320.pdf # s. 66.1(1), (4), (6), (9), (10)"
264
+ - "https://www.alberta.ca/licence-plates # 2005 introduction, 2012 motorcycle variant, memento rule"
265
+
266
+ - id: ca-ab-antique
267
+ class: historic
268
+ categories: [car, van, truck]
269
+ period: { start: 2002 }
270
+ period_evidence: instrument-in-force-upper-bound
271
+ matching: recall-only
272
+ format:
273
+ pattern: "999999"
274
+ regex: '\A[A-Z0-9](?:[- ]?[A-Z0-9])*\z'
275
+ evidence: none-published
276
+ design:
277
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
278
+ foreground: "#1B3F8B"
279
+ legend: "ANTIQUE"
280
+ notes: >-
281
+ AR 320/2002 s. 65(1), verbatim: "The Registrar shall issue a licence plate
282
+ that has 'antique' on it if the Registrar issues a certificate of
283
+ registration for an antique motor vehicle." The LEGEND is therefore
284
+ statutory even though the serial is not. s. 65(2)-(3) give the owner a
285
+ genuine choice the schema should not flatten: instead of the antique
286
+ plate, the Registrar may approve "a licence plate that was issued in
287
+ Alberta, in the year an antique motor vehicle was manufactured and that is
288
+ in a condition satisfactory to the Registrar", and the owner "may attach
289
+ either ... but not both". A vehicle-keyed consumer can therefore meet an
290
+ Alberta-registered antique wearing a plate from the 1930s as its LIVE
291
+ registration. `period.start: 2002` is the year AR 320/2002 was made and is
292
+ an UPPER BOUND on the regime's start, not its creation — Alberta plainly
293
+ registered antiques before 2002 and the predecessor instrument was not
294
+ traced.
295
+ sources:
296
+ - "https://kings-printer.alberta.ca/documents/Regs/2002_320.pdf # s. 65(1)-(5)"
297
+
298
+ - id: ca-ab-personalized
299
+ class: personalized
300
+ categories: [car, van, truck, motorcycle]
301
+ period: { start: 2002 }
302
+ period_evidence: instrument-in-force-upper-bound
303
+ matching: recall-only
304
+ format:
305
+ pattern: "LLLLLL"
306
+ regex: '\A[A-Z0-9](?:[- ]?[A-Z0-9])*\z'
307
+ evidence: agency-page-for-restrictions-only
308
+ charset:
309
+ excluded: ["O"]
310
+ notes: >-
311
+ alberta.ca, verbatim, among the things a personalized configuration
312
+ must not contain: "the letter O (use the number zero)". This is the
313
+ Idaho rule exactly ("The letter O and the number zero look the same on
314
+ a license plate, therefore only the number zero will be accepted") and
315
+ it is carried as `charset.excluded` rather than in a regex: § 2.7
316
+ makes `regex` the round-trippable tier and `recall-only` forbids a
317
+ strict twin, so there is nowhere in the regex tiers to put it.
318
+ design:
319
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
320
+ foreground: "#1B3F8B"
321
+ notes: >-
322
+ AR 320/2002 s. 115 is the personal-plate section (its text was located in
323
+ the regulation's index and its operative body was not extracted in this
324
+ pass — recorded gap). alberta.ca carries the substantive rules and they
325
+ are worth recording because Alberta polices LOOK-ALIKES explicitly, by
326
+ enumerated substitution pair: "Letters and numbers cannot be substituted
327
+ to create a plate similar to an existing plate such as H1 QT and HI QT.
328
+ Common substitutions include: Number 1 and the letter I; Number 1 and the
329
+ letter L; Number 6 and the letter G; Number 5 and the letter S; Number 2
330
+ and the letter Z; Number 0 and the letter Q; Number 8 and the letter B;
331
+ Number 3 and the letter E; Number 4 and the letter A." That is a
332
+ publishable OCR-confusability table straight from a motor-vehicle
333
+ authority. A personalized plate may not use "a configuration used by Motor
334
+ Vehicles Services for regular series licence plates", and may not be
335
+ registered on dealer plates, antiques, consular corps, disabled or
336
+ specialty plates. No character COUNT is stated on the page.
337
+ sources:
338
+ - "https://www.alberta.ca/licence-plates # the O rule, the substitution table, the ineligible classes, the no-regular-series rule"
339
+ - "https://kings-printer.alberta.ca/documents/Regs/2002_320.pdf # s. 115 Personal licence plates (index entry)"
340
+
341
+ - id: ca-ab-specialty-index
342
+ class: specialty
343
+ categories: [car, van, truck]
344
+ period: { start: 2014 }
345
+ period_evidence: enabling-instrument
346
+ matching: recall-only
347
+ format:
348
+ pattern: "LLL-999"
349
+ regex: '\A[A-Z0-9](?:[- ]?[A-Z0-9])*\z'
350
+ evidence: none-published
351
+ design:
352
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
353
+ foreground: "#1B3F8B"
354
+ emblem: { present: true, rendered: placeholder }
355
+ programs_named_by_the_authority:
356
+ - "Calgary Flames"
357
+ - "Edmonton Oilers"
358
+ - "Support our Troops"
359
+ program_count: 3
360
+ program_count_basis: "alberta.ca names exactly three specialty plates and links a page for each. Alberta publishes no total and no catalogue; three is what the authority lists, not an estimate."
361
+ notes: >-
362
+ THE INDEX ENTRY, per PRD-PLATES § 2.5 (individual specialty DESIGNS are
363
+ L4 work). `period.start: 2014` is the enabling instrument, not a program
364
+ date: s. 63.1 was ADDED to AR 320/2002 by AR 160/2014 s. 2 and amended by
365
+ AR 77/2022. s. 63.1(3): the Registrar, "on the application of, and having
366
+ entered into a written agreement with, an organization, may create a
367
+ special type of licence plate with respect to that organization".
368
+ s. 63.1(4) requires the Registrar to PUBLISH the creation criteria "on the
369
+ Registrar's website maintained on the Government of Alberta website" —
370
+ a statutory publication duty whose output was NOT located in this pass and
371
+ which is the single highest-value follow-up for Alberta. s. 63.1(5):
372
+ "Specialty licence plates must be in the form and design approved by the
373
+ Registrar." s. 63.1(6) lets the Registrar restrict a specialty plate to
374
+ named vehicle classes in writing.
375
+ sources:
376
+ - "https://kings-printer.alberta.ca/documents/Regs/2002_320.pdf # s. 63.1(1)-(6), enactment AR 160/2014 s2, amendment 77/2022"
377
+ - "https://www.alberta.ca/licence-plates # the three named programs"
378
+
379
+ - id: ca-ab-dealer
380
+ class: dealer
381
+ categories: [car, van, truck, trailer]
382
+ period: { start: 2002 }
383
+ period_evidence: instrument-in-force-upper-bound
384
+ matching: recall-only
385
+ format:
386
+ pattern: "LL-9999"
387
+ regex: '\A[A-Z0-9](?:[- ]?[A-Z0-9])*\z'
388
+ evidence: none-published
389
+ design:
390
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
391
+ foreground: "#1B3F8B"
392
+ notes: >-
393
+ AR 320/2002 ss. 72-74. s. 72(4) states the binding plainly and it is the
394
+ classic dealer-plate shape: "A dealer's certificate of registration and
395
+ the licence plates issued with it apply to ALL MOTOR VEHICLES HELD FOR
396
+ SALE by the holder of the certificate of registration from time to time" —
397
+ the plate is bound to the BUSINESS, not to any vehicle. s. 72(5) excludes
398
+ vehicles held for hire. s. 73 runs the parallel regime for trailer dealers
399
+ and s. 74 for dealers' plates generally. No serial grammar is published,
400
+ hence recall-only. Separate from ca-ab-personalized, which s. 115 and
401
+ alberta.ca both bar from dealer plates.
402
+ sources:
403
+ - "https://kings-printer.alberta.ca/documents/Regs/2002_320.pdf # ss. 72(1)-(6), 73, 74"
404
+
405
+ - id: ca-ab-trailer
406
+ class: trailer
407
+ categories: [trailer]
408
+ period: { start: 2002 }
409
+ period_evidence: instrument-in-force-upper-bound
410
+ matching: recall-only
411
+ format:
412
+ pattern: "9999-LL"
413
+ regex: '\A[A-Z0-9](?:[- ]?[A-Z0-9])*\z'
414
+ evidence: none-published
415
+ design:
416
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
417
+ foreground: "#1B3F8B"
418
+ notes: >-
419
+ AR 320/2002 s. 68: a trailer plate may be transferred between trailers of
420
+ the same owner with the Registrar's consent (s. 68(1)) but never "from one
421
+ trailer owner to another" (s. 68(2)); a trailer-rental business may not
422
+ rent out a trailer without a trailer plate on it (s. 68(3)). s. 69 adds
423
+ the Alberta oddity: the Registrar "may issue a TRAILER licence plate to
424
+ the owner of a COMMERCIAL VEHICLE if the owner is engaged in the business
425
+ of towing trailers", and that owner "may attach the trailer licence plate
426
+ to a trailer towed by the commercial vehicle" — a trailer plate bound to
427
+ the tractor's operator rather than to any trailer. Recall-only: no
428
+ grammar published; the pattern shown is a placeholder shape only.
429
+ sources:
430
+ - "https://kings-printer.alberta.ca/documents/Regs/2002_320.pdf # ss. 68(1)-(3), 69(1)-(2)"