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,697 @@
1
+ # plates/ca-bc.yml — British Columbia (PRD-PLATES gate L3, Canada west).
2
+ #
3
+ # CANADA IS FEDERATED THE WAY THE UNITED STATES IS, AND THIS FILE IS THE
4
+ # per-subdivision shape the schema already carries (`us-fl.yml` is its
5
+ # reference). There is no federal Canadian plate: the Constitution Act 1867
6
+ # s. 92(13) property-and-civil-rights head puts vehicle registration in the
7
+ # provinces and the territorial statutes replicate it, so `ca.yml` would have
8
+ # nothing true to say about a format. Jurisdiction code is the ISO 3166-2:CA
9
+ # suffix, lowercased, matching the `us-<state>` convention already on disk.
10
+ #
11
+ # ── FIVE STRUCTURAL FACTS THAT SHAPE THIS FILE ─────────────────────────────
12
+ #
13
+ # 1. BRITISH COLUMBIA DELEGATES THE ENTIRE PLATE DESIGN TO A CROWN INSURER,
14
+ # IN ONE SENTENCE OF STATUTE, AND WRITES NOTHING ELSE DOWN.
15
+ # Motor Vehicle Act, R.S.B.C. 1996, c. 318, s. 12(1), verbatim:
16
+ # "Each number plate must (a) be marked with the licence number of the
17
+ # motor vehicle or trailer for which it is issued, and (b) be of a
18
+ # material and design determined by the Insurance Corporation of
19
+ # British Columbia."
20
+ # That is the whole design law of British Columbia. No size, no colour, no
21
+ # character height, no serial grammar — the DELEGATE decides, and the
22
+ # delegate is an insurance corporation, not a ministry. This is the
23
+ # Washington State pattern (RCW 46.16A.200(1) hands design to the director)
24
+ # arriving in Canada, and it sets the evidence ceiling for the whole file:
25
+ # every format claim here comes from ICBC's OWN PUBLICATION, not from law.
26
+ #
27
+ # 2. THE PUBLICATION EXISTS, IT IS DATED, AND IT IS THE FIND OF THIS PASS.
28
+ # ICBC "Vehicle licensing & insurance bulletin", bulletin 33, 9 June 2025,
29
+ # "New licence plate number configurations", is a four-page law-enforcement
30
+ # bulletin that TABULATES the current and incoming character pattern of
31
+ # eight BC plate types in ICBC's own notation (`#` = a number 0-9,
32
+ # `@` = any letter other than I, O or Q). It is the closest thing British
33
+ # Columbia has to a statutory format annex, it is primary (the delegate's
34
+ # own act under s. 12(1)(b)), and every `format` block below that carries
35
+ # `evidence: agency-bulletin` is anchored on one of its rows. Verbatim, on
36
+ # the alphabet: "The new licence plate patterns may include the letters
37
+ # 'U', 'Y' and 'Z', which were not previously used. The letters 'I', 'O'
38
+ # and 'Q' remain excluded from use because they present identification
39
+ # issues." And on length: "All BC licence plate types consist of no more
40
+ # than six characters." That sentence is the outer bound in every
41
+ # `regex_statutory` in this file.
42
+ #
43
+ # 3. NO SIZE IS PRESCRIBED ANYWHERE, SO NO SERIES HERE CARRIES ONE.
44
+ # Division 3 of the Motor Vehicle Act Regulations (B.C. Reg. 26/58) —
45
+ # "Display and Use of Number Plates", ss. 3.01 to 3.15 — was read in full.
46
+ # It legislates ATTACHMENT (3.011), ORIENTATION (3.02, 3.021), LEGIBILITY
47
+ # (3.03), and then twelve sections of transfer/remission/disposal
48
+ # administration. It prescribes no dimension, no colour and no character
49
+ # metric. `design.plate` is therefore ABSENT from every series in this file
50
+ # and its absence is a sourced finding, exactly as in plates/gb.yml. The
51
+ # "12 x 6 inch North American plate" is a real convention and an UNSOURCED
52
+ # one here; it is recorded as a note, never as a dimension.
53
+ #
54
+ # 4. THE PLATE IS ICBC'S PROPERTY, NOT THE OWNER'S, AND THE BINDING IS TO THE
55
+ # VEHICLE VIA THE LICENCE. s. 12(6), verbatim: "Number plates and
56
+ # validation decals issued under this section are the property of the
57
+ # Insurance Corporation of British Columbia whether they were issued
58
+ # before, on or after the date this section comes into force." Reg. 3.031
59
+ # then lets a registered owner move plates between their OWN vehicles on
60
+ # payment, and reg. 3.05 forces removal on transfer of title — so a BC
61
+ # plate follows the OWNER's registration, not the car. `binding: vehicle`
62
+ # is retained because the plate is issued against a vehicle licence, with
63
+ # the transferability recorded in `binding_note`.
64
+ #
65
+ # 5. THE SEPARATOR QUESTION IS OPEN AND IS SAID SO, NOT GUESSED.
66
+ # ICBC's bulletin writes every pattern SOLID (`@###@@`, example `A123BC`).
67
+ # A physical BC passenger plate prints a visible gap between character
68
+ # groups, and secondary sources render the serial hyphenated (`A12-3BC`).
69
+ # ICBC states no separator glyph and no gap POSITION. Under PRD-PLATES
70
+ # § 2.6 the dataset ships the printed form; where the authority itself
71
+ # prints the form solid and states nothing else, the solid form is what is
72
+ # shipped, and the gap is recorded as an open question rather than placed
73
+ # at a guessed offset. A § 2.6-forgiving consumer canonicalises both forms
74
+ # to the same serial, so nothing is lost at match time — only the ability
75
+ # to SAY where the gap falls, which no primary establishes.
76
+ #
77
+ # REGEX POLICY (identical to plates/gb.yml, plates/de.yml, plates/us-fl.yml):
78
+ # `format.regex` is the lint-round-trippable regex — the lint generates
79
+ # serials from `format.pattern` (9 -> any digit, L -> any A-Z) and requires
80
+ # the regex to accept all of them, so `regex` can never carry the I/O/Q
81
+ # exclusion. `format.regex_strict` carries ICBC's own alphabet.
82
+ # `format.regex_statutory` carries the six-character bound the bulletin states
83
+ # for every BC plate type.
84
+ jurisdiction: ca-bc
85
+ authority:
86
+ name: Insurance Corporation of British Columbia (ICBC), as delegate of the Province under the Motor Vehicle Act
87
+ url: "https://www.icbc.com/vehicle-registration/licence-plates"
88
+ binding: vehicle
89
+ binding_note: >-
90
+ The plate is issued against a vehicle LICENCE and is ICBC's property
91
+ throughout (MVA s. 12(6)). It is not permanently married to the vehicle: reg.
92
+ 3.031(1) lets a registered owner or lessee move plates from one of their own
93
+ vehicles to another on compliance with licensing and payment, and reg. 3.05
94
+ forces the transferor to REMOVE the plates before giving up possession on a
95
+ sale. So on a sale the plate stays with the seller — the opposite of the
96
+ British rule and of most US states — while remaining, in law, ICBC's.
97
+ instrument:
98
+ statute:
99
+ citation: "Motor Vehicle Act, R.S.B.C. 1996, c. 318, s. 12 (Number plates); s. 3 (registration, licence and insurance); s. 13 (offences)"
100
+ source: "https://www.bclaws.gov.bc.ca/civix/document/id/complete/statreg/96318_01 # s. 12(1)(a)-(b), (2)-(6) read verbatim 2026-08-02"
101
+ regulation:
102
+ citation: "Motor Vehicle Act Regulations, B.C. Reg. 26/58 (O.C. 1004/58), Division 3 (Display and Use of Number Plates), Division 22 (Antique Motor Vehicles), Division 22A (Collector Motor Vehicles), Division 34 (Personalized Number Plates)"
103
+ consolidation: "This consolidation is current to July 28, 2026. Last amended April 20, 2026 by B.C. Reg. 59/2026."
104
+ source: "https://www.bclaws.gov.bc.ca/civix/document/id/complete/statreg/26_58_01 # Division 3 ss. 3.01-3.15 read in full 2026-08-02"
105
+ source_div22: "https://www.bclaws.gov.bc.ca/civix/document/id/complete/statreg/26_58_06 # Divisions 22 and 22A"
106
+ source_div34: "https://www.bclaws.gov.bc.ca/civix/document/id/complete/statreg/26_58_10 # Division 34"
107
+ agency_bulletin:
108
+ citation: "ICBC, Vehicle licensing & insurance bulletin 33, 9 June 2025 — 'New licence plate number configurations'"
109
+ issued: "2025-06-09"
110
+ author: "Christopher Dicdiquin, Manager, Vehicle Registration Policy and Programs, ICBC"
111
+ self_declared_authority: >-
112
+ The bulletin's own Reference block names exactly four authorities:
113
+ "Motor Vehicle Act s. 3(7) / s. 12 / s. 13", "Motor Vehicle Act
114
+ Regulations Div. 3", "Vehicle licensing and insurance bulletins", and
115
+ "License Plate Standard, ed. 3 (AAMVA)". ICBC therefore cites the SAME
116
+ AAMVA Edition 3 the US files cite — a voluntary standard with no
117
+ enforcement power, adopted here by a Canadian Crown corporation.
118
+ source: "https://partners.icbc.com/assets/5GMseymkqs8E4Otb8osoGQ/bulletin-33-new-licence-plate-configurations.pdf # pp. 1-3: alphabet, six-character rule, the eight-row current/new pattern table, the Reference block"
119
+ licence: "bclaws.gov.bc.ca content is Copyright (c) King's Printer, Victoria, British Columbia, Canada, published under the King's Printer licence; the statute and regulation are edicts of government. The ICBC bulletin is an ICBC publication, served without click-through, and is cited (facts extracted) rather than reproduced."
120
+
121
+ # ---------------------------------------------------------------------------
122
+ # artwork_risk — PRD-PLATES § 4 requires this per federated subdivision.
123
+ # ---------------------------------------------------------------------------
124
+ artwork_risk:
125
+ posture: unresearched-crown-copyright-presumed
126
+ basis: >-
127
+ Canada has no Feist and no state-works doctrine: Crown copyright subsists
128
+ under s. 12 of the Copyright Act (R.S.C. 1985, c. C-42) in works "prepared
129
+ or published by or under the direction or control of His Majesty or any
130
+ government department". British Columbia's own bclaws pages carry
131
+ "Copyright (c) King's Printer, Victoria, British Columbia, Canada". No BC
132
+ equivalent of {{PD-FLGov}} exists on Commons. Nothing was found either
133
+ asserting or disclaiming copyright in the PLATE DESIGN specifically, so the
134
+ posture is recorded as UNRESEARCHED and the § 3 placeholder default governs.
135
+ emblem_rule: >-
136
+ PRD-PLATES § 3 placeholder rule applies to the provincial flag device on
137
+ the standard base and to all three BC Parks artworks (Kermode bear, Purcell
138
+ Mountains, Porteau Cove), which are commissioned photographic/illustrative
139
+ works, not statutory drawings. Render emblem slots as
140
+ `{present: true, rendered: placeholder}`.
141
+ contrast_note: >-
142
+ The neighbouring territories are the instructive contrast and are NOT
143
+ guesswork: the Northwest Territories holds a REGISTERED CANADIAN TRADE-MARK
144
+ over its polar-bear plate (TMA558214) and licensed it to Nunavut. See
145
+ plates/ca-nt.yml. No comparable BC registration was searched for; that is a
146
+ named gap, not a clearance.
147
+ sources:
148
+ - "https://www.bclaws.gov.bc.ca/civix/document/id/complete/statreg/96318_01 # King's Printer copyright notice on the served text"
149
+
150
+ # ---------------------------------------------------------------------------
151
+ # Display rules — the part of BC law that IS specific.
152
+ # ---------------------------------------------------------------------------
153
+ display_rules:
154
+ attachment: >-
155
+ Reg. 3.011, verbatim: "Number plates issued for a vehicle under the
156
+ Commercial Transport Act or Motor Vehicle Act must be attached (a) one plate
157
+ to the front and one plate to the rear of the vehicle, if 2 number plates
158
+ are issued for a vehicle, and (b) to the rear of the vehicle, if a single
159
+ number plate is issued for a vehicle." Note the shape of the rule: BC does
160
+ not legislate HOW MANY plates a class gets — it legislates where they go
161
+ once ICBC has decided. The two-plate passenger convention is ICBC's, not
162
+ the regulation's.
163
+ orientation: >-
164
+ Reg. 3.02: "A number plate shall at all times be securely fastened in a
165
+ horizontal position to the vehicle for which it is issued." Reg. 3.021
166
+ (added by B.C. Reg. 193/2015): "Despite section 3.02, a number plate may be
167
+ attached in vertical position on the left front fork of a motorcycle, with
168
+ the first number or letter at the bottom of the fork." A VERTICAL,
169
+ BOTTOM-UP motorcycle plate is a real and lawful BC reading order — a
170
+ consumer doing OCR on a BC motorcycle must handle 90-degree rotation.
171
+ legibility: >-
172
+ Reg. 3.03: the plate "must be kept entirely unobstructed and free from dirt
173
+ or foreign material, so that the numbers and letters on it may be plainly
174
+ seen and read at all times and so that the numbers and letters may be
175
+ accurately photographed using a speed monitoring device or traffic light
176
+ safety device prescribed under section 83.1 of the Act." BC legislates
177
+ machine readability by name, which is unusual and is why bulletin 33 spends
178
+ a paragraph on ALPR compatibility.
179
+ validation_decal: >-
180
+ Reg. 3.012: a validation decal goes on the FRONT plate for a Commercial
181
+ Transport Act vehicle over 5 500 kg licensed GVW and on the REAR plate for
182
+ every other vehicle. Reg. 3.012(2) carves out decals issued before
183
+ 1 May 2022 — ICBC stopped issuing decals in 2022, so a current BC plate
184
+ carries no visible validity marker.
185
+ off_road: "Reg. 3.0111: s. 3.011 does not apply to an off-road vehicle registered under the Off-Road Vehicle Act displaying a number plate or number sticker issued under that Act (a separate regime, out of scope here)."
186
+ sources:
187
+ - "https://www.bclaws.gov.bc.ca/civix/document/id/complete/statreg/26_58_01 # Division 3 ss. 3.011, 3.0111, 3.012, 3.02, 3.021, 3.03"
188
+
189
+ # ---------------------------------------------------------------------------
190
+ # Jurisdiction-wide facts, cited once and referenced per series.
191
+ # ---------------------------------------------------------------------------
192
+ common:
193
+ alphabet:
194
+ excluded: ["I", "O", "Q"]
195
+ statement: >-
196
+ ICBC bulletin 33, verbatim: "In the patterns below, # represents a number
197
+ (0-9) and @ represents any letter (other than I, O, or Q.)" and "The
198
+ letters 'I', 'O' and 'Q' remain excluded from use because they present
199
+ identification issues."
200
+ newly_admitted: ["U", "Y", "Z"]
201
+ newly_admitted_statement: >-
202
+ Verbatim: "The new licence plate patterns may include the letters 'U',
203
+ 'Y' and 'Z', which were not previously used." This is the single most
204
+ useful era signal in the file: a BC serial containing U, Y or Z is
205
+ 2025-or-later on ICBC's own statement.
206
+ source: "https://partners.icbc.com/assets/5GMseymkqs8E4Otb8osoGQ/bulletin-33-new-licence-plate-configurations.pdf # p.1 alphabet paragraph, p.2 pattern-table legend"
207
+ length_bound:
208
+ max_characters: 6
209
+ statement: >-
210
+ Verbatim: "Will licence plates still have six characters maximum? Yes. By
211
+ altering the pattern of number and letter positions for each licence
212
+ plate type, ICBC was able to increase available licence plate
213
+ combinations using the same number of characters." And in Background:
214
+ "All BC licence plate types consist of no more than six characters."
215
+ source: "https://partners.icbc.com/assets/5GMseymkqs8E4Otb8osoGQ/bulletin-33-new-licence-plate-configurations.pdf # pp.1-2"
216
+ why_the_2025_recut:
217
+ statement: >-
218
+ Verbatim: "The changes are necessary to ensure every licence plate has a
219
+ unique alpha-numeric number, because the existing patterns are nearly used
220
+ up." And: "To ensure there is sufficient inventory of unique licence plate
221
+ numbers for the next twenty years, character pattern updates are planned
222
+ for 16 licence plate types. Ten of these are scheduled for rollout as
223
+ required over the next year." SIXTEEN types are being re-cut; the bulletin
224
+ tabulates EIGHT. The other eight are a known, named gap in this file.
225
+ source: "https://partners.icbc.com/assets/5GMseymkqs8E4Otb8osoGQ/bulletin-33-new-licence-plate-configurations.pdf # p.2 Background"
226
+ plate_count_note: >-
227
+ ICBC issues 40-odd plate types (bulletin 33: "ICBC maintains approximately
228
+ 40 licence plate types"). This file authors the ten for which a grammar or a
229
+ dated design was secured. The remainder are a recorded gap, not an omission.
230
+ dimensions_note: >-
231
+ NEGATIVE FINDING, recorded so nobody repeats the hunt. Neither MVA s. 12
232
+ nor Division 3 of B.C. Reg. 26/58 prescribes any plate dimension, and no
233
+ ICBC page carrying one was found. The 12 x 6 in / 300 x 150 mm North
234
+ American convention is real and is NOT asserted here. `design.plate` is
235
+ absent from every series by design.
236
+ colour_note: >-
237
+ Blue characters on a reflective white ground with the provincial flag device
238
+ is the standard base as depicted on ICBC's own pages. No colour is in any
239
+ instrument; every hex below is `hex_basis: observed`.
240
+
241
+ series:
242
+
243
+ # =========================================================================
244
+ # STANDARD PASSENGER — the current recut and the series it replaces.
245
+ # =========================================================================
246
+ - id: ca-bc-standard-2025
247
+ class: standard
248
+ categories: [car, van, truck, bus]
249
+ period: { start: 2025 }
250
+ period_evidence: first-issue-announced
251
+ matching: strict
252
+ format:
253
+ pattern: "L999LL"
254
+ regex: '\A[A-Z]\d{3}[A-Z]{2}\z'
255
+ regex_strict: '\A[A-HJ-NPR-Z]\d{3}[A-HJ-NPR-Z]{2}\z'
256
+ regex_statutory: '\A[A-Z0-9](?: ?[A-Z0-9]){0,5}\z'
257
+ evidence: agency-bulletin
258
+ charset:
259
+ excluded: ["I", "O", "Q"]
260
+ notes: >-
261
+ ICBC bulletin 33 row "Passenger": current pattern @@###@, NEW pattern
262
+ @###@@, "Example of new pattern: A123BC". `@` is defined in the
263
+ bulletin's own legend as "any letter (other than I, O, or Q.)"
264
+ `regex_strict` is that legend spelled out; `regex` cannot carry it
265
+ because the lint generates I, O and Q from the human pattern.
266
+ separator_note: >-
267
+ ICBC prints the pattern and its example SOLID. The physical plate shows
268
+ a group gap and secondary renderings hyphenate it (`A12-3BC`), but ICBC
269
+ states neither a glyph nor a gap POSITION, so none is asserted. A
270
+ PRD-PLATES § 2.6 forgiving consumer strips the gap and matches this
271
+ regex unchanged.
272
+ progression: "not published. ICBC states only that the recut exists to extend the six-character space; no block-allocation order was found."
273
+ design:
274
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
275
+ foreground: "#12326E"
276
+ legend_top: "BRITISH COLUMBIA"
277
+ legend_bottom: "Beautiful British Columbia"
278
+ emblem: { present: true, rendered: placeholder, description: "provincial flag device" }
279
+ rear_differs: false
280
+ design_note: >-
281
+ Bulletin 33, verbatim: "All regular BC plates will remain six characters
282
+ with the same design, reflectivity, and materials, making them scannable
283
+ as usual." So the 2025 recut is a SERIAL-GRAMMAR change on an UNCHANGED
284
+ BASE — the base and the format have different lifetimes, and a schema
285
+ that conflates them cannot model British Columbia. Same finding as
286
+ Oregon's 1987 fir base outliving two serial arrangements.
287
+ notes: >-
288
+ Rollout, verbatim: "ICBC will be gradually introducing new licence plate
289
+ character configurations on some British Columbia licence plates. This will
290
+ begin with the B.C. Parks - Porteau Cove series within the next few weeks,
291
+ followed by regular passenger licence plates as early as August 2025."
292
+ `period.start: 2025` rests on that sentence and on the bulletin's own date
293
+ (9 June 2025) — an authority statement of intended first issue, not a
294
+ confirmed first-issue observation, which is why the evidence grade is
295
+ `first-issue-announced` and not `agency-stated-date`. The predecessor
296
+ series continues to issue from stock in parallel; see ca-bc-standard-2014.
297
+ sources:
298
+ - "https://partners.icbc.com/assets/5GMseymkqs8E4Otb8osoGQ/bulletin-33-new-licence-plate-configurations.pdf # pattern, alphabet, rollout month, unchanged-base statement"
299
+ - "https://www.bclaws.gov.bc.ca/civix/document/id/complete/statreg/96318_01 # MVA s. 12(1)(b): the design is ICBC's to determine"
300
+
301
+ - id: ca-bc-standard-2014
302
+ class: standard
303
+ categories: [car, van, truck, bus]
304
+ period: { start: 2014, end: 2025 }
305
+ period_evidence: mixed-secondary-start-agency-end
306
+ matching: strict
307
+ format:
308
+ pattern: "LL999L"
309
+ regex: '\A[A-Z]{2}\d{3}[A-Z]\z'
310
+ regex_strict: '\A[A-HJ-NPR-TVWX]{2}\d{3}[A-HJ-NPR-TVWX]\z'
311
+ regex_statutory: '\A[A-Z0-9](?: ?[A-Z0-9]){0,5}\z'
312
+ evidence: agency-bulletin-for-format
313
+ charset:
314
+ excluded: ["I", "O", "Q", "U", "Y", "Z"]
315
+ notes: >-
316
+ Six letters, not three, and the extra three are the era signal. ICBC
317
+ bulletin 33 says the new patterns "may include the letters 'U', 'Y'
318
+ and 'Z', which were not previously used" — so the pre-2025 alphabet is
319
+ A-Z minus I, O, Q, U, Y, Z, which is exactly what `regex_strict`
320
+ spells (A-H, J-N, P, R-T, V, W, X).
321
+ separator_note: "As ca-bc-standard-2025: ICBC prints @@###@ solid; the gap position is unstated."
322
+ design:
323
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
324
+ foreground: "#12326E"
325
+ legend_top: "BRITISH COLUMBIA"
326
+ legend_bottom: "Beautiful British Columbia"
327
+ emblem: { present: true, rendered: placeholder, description: "provincial flag device" }
328
+ rear_differs: false
329
+ notes: >-
330
+ THE TWO ENDS OF THIS PERIOD HAVE DIFFERENT EVIDENCE GRADES AND THE KEY
331
+ SAYS SO. The END is strong: ICBC bulletin 33 (9 June 2025) tabulates
332
+ @@###@ as the "Current pattern" being replaced for Passenger, which dates
333
+ the changeover to 2025 from the authority. The START is weak: 2014 comes
334
+ only from the per-jurisdiction encyclopedia article used as a finding aid,
335
+ whose format-history row carries no footnote; no ICBC or provincial source
336
+ dating the AB1-23C arrangement was found. Treat 2014 as unverified.
337
+ Parallel issuance with ca-bc-standard-2025 is REAL — old plate stock is
338
+ issued until exhausted ("New licence plate configurations will roll out as
339
+ old inventories get exhausted") — which is why the two series overlap.
340
+ sources:
341
+ - "https://partners.icbc.com/assets/5GMseymkqs8E4Otb8osoGQ/bulletin-33-new-licence-plate-configurations.pdf # 'Current pattern' column = @@###@; old-inventory exhaustion rule"
342
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_British_Columbia # FINDING AID ONLY (PRD-PLATES §4 Wikipedia row): the unfootnoted 2014 start; accessed 2026-08-02"
343
+
344
+ # =========================================================================
345
+ # COMMERCIAL / FARM / TRAILER / PRORATE / INDUSTRIAL — the other seven rows
346
+ # of the bulletin's table. Each is a distinct plate TYPE in ICBC's own terms
347
+ # with its own grammar, which is why each is its own series.
348
+ # =========================================================================
349
+ - id: ca-bc-commercial-truck-2025
350
+ class: standard
351
+ categories: [truck]
352
+ period: { start: 2025 }
353
+ period_evidence: first-issue-announced
354
+ matching: strict
355
+ format:
356
+ pattern: "9LL999"
357
+ regex: '\A\d[A-Z]{2}\d{3}\z'
358
+ regex_strict: '\A\d[A-HJ-NPR-Z]{2}\d{3}\z'
359
+ regex_statutory: '\A[A-Z0-9](?: ?[A-Z0-9]){0,5}\z'
360
+ evidence: agency-bulletin
361
+ charset: { excluded: ["I", "O", "Q"] }
362
+ design:
363
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
364
+ foreground: "#12326E"
365
+ emblem: { present: true, rendered: placeholder }
366
+ notes: >-
367
+ Bulletin 33 row "Commercial Truck": current @#####, new #@@###, "Example
368
+ of new pattern: 1AB234". Commercial vehicles over 5 500 kg licensed GVW
369
+ are licensed under the COMMERCIAL TRANSPORT ACT rather than the Motor
370
+ Vehicle Act (reg. 3.012(1)(a) turns on exactly that threshold) and carry
371
+ their validation decal on the FRONT plate. The superseded @##### grammar
372
+ is not given a series of its own because no source dates it.
373
+ sources:
374
+ - "https://partners.icbc.com/assets/5GMseymkqs8E4Otb8osoGQ/bulletin-33-new-licence-plate-configurations.pdf # Commercial Truck row"
375
+
376
+ - id: ca-bc-farm-2025
377
+ class: agricultural
378
+ categories: [truck]
379
+ period: { start: 2025 }
380
+ period_evidence: first-issue-announced
381
+ matching: strict
382
+ format:
383
+ pattern: "99999L"
384
+ regex: '\A\d{5}[A-Z]\z'
385
+ regex_strict: '\A\d{5}[A-HJ-NPR-Z]\z'
386
+ regex_statutory: '\A[A-Z0-9](?: ?[A-Z0-9]){0,5}\z'
387
+ evidence: agency-bulletin
388
+ charset: { excluded: ["I", "O", "Q"] }
389
+ design:
390
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
391
+ foreground: "#12326E"
392
+ notes: >-
393
+ Bulletin 33 row "Farm Truck": current G#####, new #####A, "Example of new
394
+ pattern: 12345A". The recut RETIRES the leading G — the old grammar's only
395
+ geographic-free type marker — and moves the letter to the tail, so a BC
396
+ farm plate is no longer recognisable by its first character. Farm vehicles
397
+ are also the one class BC bars from personalised plates (reg. 34.05(1)(a)).
398
+ sources:
399
+ - "https://partners.icbc.com/assets/5GMseymkqs8E4Otb8osoGQ/bulletin-33-new-licence-plate-configurations.pdf # Farm Truck row"
400
+ - "https://www.bclaws.gov.bc.ca/civix/document/id/complete/statreg/26_58_10 # reg. 34.05(1)(a): no personalised plate on a farm vehicle"
401
+
402
+ - id: ca-bc-trailer-utility-2025
403
+ class: trailer
404
+ categories: [trailer]
405
+ period: { start: 2025 }
406
+ period_evidence: first-issue-announced
407
+ matching: strict
408
+ format:
409
+ pattern: "9ULLL9"
410
+ regex: '\A\dU[A-Z]{3}\d\z'
411
+ regex_strict: '\A\dU[A-HJ-NPR-Z]{3}\d\z'
412
+ regex_statutory: '\A[A-Z0-9](?: ?[A-Z0-9]){0,5}\z'
413
+ evidence: agency-bulletin
414
+ charset: { excluded: ["I", "O", "Q"] }
415
+ design:
416
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
417
+ foreground: "#12326E"
418
+ notes: >-
419
+ Bulletin 33 row "Utility Trailer": current U####A, new #U@@@#, "Example of
420
+ new pattern: 1UABC2". The literal U is a TYPE MARKER that survives the
421
+ recut but MOVES from position 1 to position 2 — and note the collision it
422
+ creates with fact 2 above: U is simultaneously a newly admitted SERIAL
423
+ letter elsewhere in the system from 2025. A parser must not read "contains
424
+ U" as "utility trailer"; only "U in position 2 of a six-character serial"
425
+ carries that meaning, and even that is a shape hit.
426
+ Trailers are barred from personalised plates (reg. 34.05(1)(f)).
427
+ sources:
428
+ - "https://partners.icbc.com/assets/5GMseymkqs8E4Otb8osoGQ/bulletin-33-new-licence-plate-configurations.pdf # Utility Trailer row"
429
+ - "https://www.bclaws.gov.bc.ca/civix/document/id/complete/statreg/26_58_10 # reg. 34.05(1)(f)"
430
+
431
+ - id: ca-bc-prorate-2025
432
+ class: standard
433
+ categories: [truck, bus]
434
+ period: { start: 2025 }
435
+ period_evidence: first-issue-announced
436
+ matching: strict
437
+ format:
438
+ pattern: "9999P9"
439
+ regex: '\A\d{4}P\d\z'
440
+ regex_statutory: '\A[A-Z0-9](?: ?[A-Z0-9]){0,5}\z'
441
+ evidence: agency-bulletin
442
+ design:
443
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
444
+ foreground: "#12326E"
445
+ notes: >-
446
+ Bulletin 33 row "Prorate": current #####P, new ####P#, "Example of new
447
+ pattern: 1234P5". A prorate plate is an International Registration Plan
448
+ apportioned plate for interjurisdictional commercial carriers; the literal
449
+ P is the type marker and moves from the tail to position 5. No
450
+ `regex_strict` is carried because the grammar has no free letter position
451
+ left to restrict.
452
+ sources:
453
+ - "https://partners.icbc.com/assets/5GMseymkqs8E4Otb8osoGQ/bulletin-33-new-licence-plate-configurations.pdf # Prorate row"
454
+
455
+ - id: ca-bc-industrial-2025
456
+ class: standard
457
+ categories: [truck]
458
+ period: { start: 2025 }
459
+ period_evidence: first-issue-announced
460
+ matching: strict
461
+ format:
462
+ pattern: "9X9999"
463
+ regex: '\A\dX\d{4}\z'
464
+ regex_statutory: '\A[A-Z0-9](?: ?[A-Z0-9]){0,5}\z'
465
+ evidence: agency-bulletin
466
+ design:
467
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
468
+ foreground: "#12326E"
469
+ notes: >-
470
+ Bulletin 33 row "Industrial": current X#####, new #X####, "Example of new
471
+ pattern: 1X2345". Industrial plates are for machines used off-highway that
472
+ make limited highway movements; Division 24 of B.C. Reg. 26/58 ("Vehicles
473
+ of Unusual Size, Weight or Operating Characteristics") is the neighbouring
474
+ regime and reg. 3.121 forbids moving plates between a Division 24 vehicle
475
+ and any other class — a hard, sourced class boundary.
476
+ sources:
477
+ - "https://partners.icbc.com/assets/5GMseymkqs8E4Otb8osoGQ/bulletin-33-new-licence-plate-configurations.pdf # Industrial row"
478
+ - "https://www.bclaws.gov.bc.ca/civix/document/id/complete/statreg/26_58_01 # reg. 3.121, reg. 3.13 classes of vehicles"
479
+
480
+ # =========================================================================
481
+ # BC PARKS — the specialty programme, and the one series in this file with a
482
+ # first-issue date to the DAY from a provincial news release.
483
+ # =========================================================================
484
+ - id: ca-bc-parks-2025
485
+ class: specialty
486
+ categories: [car, van, truck]
487
+ period: { start: 2025 }
488
+ period_evidence: first-issue-announced
489
+ matching: strict
490
+ format:
491
+ pattern: "P999LL"
492
+ regex: '\A[PRS]\d{3}[A-Z]{2}\z'
493
+ regex_strict: '\A[PRS]\d{3}[A-HJ-NPR-Z]{2}\z'
494
+ regex_statutory: '\A[A-Z0-9](?: ?[A-Z0-9]){0,5}\z'
495
+ evidence: agency-bulletin
496
+ charset: { excluded: ["I", "O", "Q"] }
497
+ first_character_is_the_design: >-
498
+ The leading letter identifies WHICH park artwork the plate carries, and
499
+ it is a closed three-member set from bulletin 33: S = Porteau Cove,
500
+ P = Kermode, R = Purcell. This is the only geographic-ish decode
501
+ dimension British Columbia has, and it decodes the DESIGN, not the
502
+ registrant's location. Small and closed, so it is inline here rather
503
+ than in a _decode file.
504
+ variants:
505
+ - name: "BC Parks - Porteau Cove"
506
+ format: { pattern: "S999LL", regex: '\AS\d{3}[A-Z]{2}\z' }
507
+ - name: "BC Parks - Purcell"
508
+ format: { pattern: "R999LL" }
509
+ design:
510
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
511
+ foreground: "#12326E"
512
+ emblem: { present: true, rendered: placeholder, description: "one of three park scenes: Kermode bear / Purcell Mountains / Porteau Cove" }
513
+ notes: >-
514
+ Bulletin 33 rows "Parks - Porteau Cove" (current RS###@, new S###@@,
515
+ example S123AA), "Parks - Kermode" (current RK###@, new P###@@, example
516
+ P123AA) and "Parks - Purcell" (current RM###@, new R###@@, example
517
+ R123AA). Porteau Cove is the FIRST type in the whole 2025 recut: "This
518
+ will begin with the B.C. Parks - Porteau Cove series within the next few
519
+ weeks" (bulletin dated 9 June 2025). The three superseded grammars
520
+ (RS###@ / RK###@ / RM###@) belong to ca-bc-parks-2017.
521
+ sources:
522
+ - "https://partners.icbc.com/assets/5GMseymkqs8E4Otb8osoGQ/bulletin-33-new-licence-plate-configurations.pdf # the three Parks rows + rollout order"
523
+
524
+ - id: ca-bc-parks-2017
525
+ class: specialty
526
+ categories: [car, van, truck]
527
+ period: { start: 2017, end: 2025 }
528
+ period_evidence: agency-stated-date
529
+ matching: strict
530
+ format:
531
+ pattern: "RK999L"
532
+ regex: '\AR[KMS]\d{3}[A-Z]\z'
533
+ regex_strict: '\AR[KMS]\d{3}[A-HJ-NPR-TVWX]\z'
534
+ regex_statutory: '\A[A-Z0-9](?: ?[A-Z0-9]){0,5}\z'
535
+ evidence: agency-bulletin
536
+ charset: { excluded: ["I", "O", "Q", "U", "Y", "Z"] }
537
+ decode_inline:
538
+ RK: "Kermode bear"
539
+ RM: "Purcell Mountains"
540
+ RS: "Porteau Cove"
541
+ design:
542
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
543
+ foreground: "#12326E"
544
+ emblem: { present: true, rendered: placeholder, description: "one of three park scenes" }
545
+ notes: >-
546
+ START IS PRIMARY AND TO THE DAY. Province of British Columbia news release
547
+ 2017ENV0020-000696 (19 March 2017), verbatim: "The three licence plate
548
+ designs - a Kermode bear found only in British Columbia, the snow-capped
549
+ Purcell Mountains, and a stunning view from Porteau Cove overlooking Howe
550
+ Sound - were unveiled by Environment Minister Mary Polak and Transportation
551
+ and Infrastructure Minister Todd Stone on Jan. 18, 2017, in Vancouver" and
552
+ "became available for purchase at Autoplan broker offices on Jan. 29,
553
+ 2017". Unveiling and FIRST ISSUE are eight days apart and this file records
554
+ the issue date, not the unveiling. END is the 2025 recut per bulletin 33.
555
+ `regex_strict` restricts the tail letter to the pre-2025 alphabet, which is
556
+ what makes an RK/RM/RS plate era-datable on sight.
557
+ sources:
558
+ - "https://news.gov.bc.ca/releases/2017ENV0020-000696 # unveiled 18 Jan 2017, on sale 29 Jan 2017, the three designs, the ICBC partnership"
559
+ - "https://partners.icbc.com/assets/5GMseymkqs8E4Otb8osoGQ/bulletin-33-new-licence-plate-configurations.pdf # the RS/RK/RM 'Current pattern' column"
560
+
561
+ # =========================================================================
562
+ # CLASSES WHOSE GRAMMAR ICBC HAS NOT PUBLISHED. Each is recall-only, bounded
563
+ # by the one thing that IS sourced for every BC plate: six characters.
564
+ # =========================================================================
565
+ - id: ca-bc-motorcycle
566
+ class: motorcycle
567
+ categories: [motorcycle]
568
+ period: { start: 1970 }
569
+ period_evidence: not-established
570
+ matching: recall-only
571
+ format:
572
+ pattern: "999LL"
573
+ regex: '\A[A-Z0-9](?: ?[A-Z0-9]){0,5}\z'
574
+ evidence: none-published
575
+ charset: { excluded: ["I", "O", "Q"] }
576
+ design:
577
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
578
+ foreground: "#12326E"
579
+ mounting_note: >-
580
+ Reg. 3.021 permits a BC motorcycle plate to be mounted VERTICALLY on the
581
+ left front fork, first character at the BOTTOM. Reading order is
582
+ bottom-to-top in that mounting.
583
+ notes: >-
584
+ RECALL-ONLY AND HONEST ABOUT WHY. Bulletin 33 does not tabulate the
585
+ motorcycle pattern, and no other ICBC publication carrying it was found.
586
+ The regex is the six-character bound the bulletin states for EVERY BC
587
+ type — a genuine outer claim, not a guess — so a match here means "this
588
+ string has a shape British Columbia issues" and nothing more.
589
+ `period.start: 1970` is a floor carried only to satisfy the schema's
590
+ integer-year requirement and is marked `not-established`; it must not be
591
+ read as a claim. The 2025 recut list names sixteen types of which the
592
+ bulletin tabulates eight; motorcycle may be among the untabulated eight.
593
+ sources:
594
+ - "https://partners.icbc.com/assets/5GMseymkqs8E4Otb8osoGQ/bulletin-33-new-licence-plate-configurations.pdf # the six-character bound and the I/O/Q exclusion; motorcycle NOT tabulated"
595
+ - "https://www.bclaws.gov.bc.ca/civix/document/id/complete/statreg/26_58_01 # reg. 3.021 vertical fork mounting"
596
+
597
+ - id: ca-bc-personalized
598
+ class: personalized
599
+ categories: [car, van, truck, motorcycle]
600
+ period: { start: 1979 }
601
+ period_evidence: enabling-instrument
602
+ matching: recall-only
603
+ format:
604
+ pattern: "LLLLLL"
605
+ regex: '\A[A-Z0-9](?: ?[A-Z0-9]){0,5}\z'
606
+ evidence: regulation-for-restrictions-only
607
+ design:
608
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
609
+ foreground: "#12326E"
610
+ notes: >-
611
+ Division 34 of B.C. Reg. 26/58 is the personalised-plate regime and it was
612
+ ADDED BY B.C. Reg. 295/79 — every operative section of Division 34 carries
613
+ the enactment note "[en. B.C. Reg. 295/79, s. (c)]", which is what
614
+ `period.start: 1979` rests on (`enabling-instrument`: the year the
615
+ regime was created, not a first-issue observation). Reg. 34.04 states the
616
+ refusal grounds verbatim: a combination "identical to one already in use",
617
+ "identical to a number plate in an existing or projected series of number
618
+ plates to be issued", one that "could create identification problems", one
619
+ that "is unseemly, vulgar, indecent or may offend any person", or one that
620
+ "might distract the drivers of other vehicles so as to reduce the level of
621
+ their driving care or attention". Reg. 34.05(1) bars personalised plates
622
+ on farm vehicles, 'vintage'-plated antique cars, collector-plated vehicles,
623
+ trailers, Commercial Transport Act vehicles over 5 500 kg, and Division 24
624
+ vehicles other than neighbourhood zero-emission vehicles. Reg. 34.10(1)(c)
625
+ dates the fee regime to plates "issued on or after January 1, 1984".
626
+ No character-count rule is stated in the regulation; the six-character
627
+ bound comes from bulletin 33.
628
+ sources:
629
+ - "https://www.bclaws.gov.bc.ca/civix/document/id/complete/statreg/26_58_10 # Division 34 ss. 34.01-34.08, enactment note B.C. Reg. 295/79"
630
+ - "https://partners.icbc.com/assets/5GMseymkqs8E4Otb8osoGQ/bulletin-33-new-licence-plate-configurations.pdf # six-character bound"
631
+
632
+ - id: ca-bc-vintage-antique
633
+ class: historic
634
+ categories: [car, van, truck]
635
+ period: { start: 1966 }
636
+ period_evidence: enabling-instrument
637
+ matching: recall-only
638
+ format:
639
+ pattern: "999999"
640
+ regex: '\A[A-Z0-9](?: ?[A-Z0-9]){0,5}\z'
641
+ evidence: none-published
642
+ design:
643
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
644
+ foreground: "#12326E"
645
+ notes: >-
646
+ British Columbia runs TWO parallel old-vehicle regimes and they are not the
647
+ same thing. Division 22 (ANTIQUE MOTOR VEHICLES), enacted by B.C. Reg.
648
+ 55/66 — hence `period.start: 1966` — defines an antique motor vehicle as
649
+ "a motor vehicle 30 years of age or older maintained as nearly as possible
650
+ with original component parts, and owned as a collector's item and operated
651
+ solely for use in exhibition or club activities, parades and other like
652
+ functions", and reg. 22.03(1)(b) directs ICBC to issue "a distinctive
653
+ number plate or plates". Reg. 34.05(1)(b) calls the resulting plates
654
+ "'vintage' number plates" in terms. Reg. 22.03(1)(a) is the unusual part:
655
+ the licence is "valid for as long as the vehicle is in existence and
656
+ continues to be operated as an antique motor vehicle" — a NON-EXPIRING
657
+ registration, which is why BC antique plates carry no validity marker of
658
+ any kind. No serial grammar is published, hence recall-only.
659
+ sources:
660
+ - "https://www.bclaws.gov.bc.ca/civix/document/id/complete/statreg/26_58_06 # Division 22 ss. 22.01-22.04, enactment note B.C. Reg. 55/66"
661
+ - "https://www.bclaws.gov.bc.ca/civix/document/id/complete/statreg/26_58_10 # reg. 34.05(1)(b) naming them 'vintage' plates"
662
+
663
+ - id: ca-bc-collector
664
+ class: historic
665
+ categories: [car, van, truck]
666
+ period: { start: 2006 }
667
+ period_evidence: enabling-instrument
668
+ matching: recall-only
669
+ format:
670
+ pattern: "LLL999"
671
+ regex: '\A[A-Z0-9](?: ?[A-Z0-9]){0,5}\z'
672
+ evidence: none-published
673
+ design:
674
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
675
+ foreground: "#12326E"
676
+ notes: >-
677
+ The SECOND old-vehicle regime, and a distinct one: Division 22A (COLLECTOR
678
+ MOTOR VEHICLES) was enacted by B.C. Reg. 139/2006 (hence
679
+ `period.start: 2006`) and amended by B.C. Reg. 105/2017. Its four
680
+ qualifying items are a genuinely useful vehicle-catalogue hook and are
681
+ quoted rather than paraphrased: (1) a vehicle "at least 25 years old" and
682
+ "maintained or restored to a condition that conforms to the original
683
+ manufacturer's specifications"; (2) at least 15 years old AND "no longer
684
+ produced, or of limited availability", same condition test; (3) a MODIFIED
685
+ motor vehicle manufactured 1974 or earlier and registered in BC as a 1974
686
+ or earlier model whose body, chassis, power train or steering/braking has
687
+ been altered by a non-manufacturer; (4) a CONSTRUCTED motor vehicle
688
+ manufactured 1942 or earlier (or built to resemble one) and registered as
689
+ a 1942-or-earlier model. Reg. 22A.04(1) is the schema-stressing part: one
690
+ collector licence and plate "may, with the prior approval of the Insurance
691
+ Corporation of British Columbia, be used on ANY of the collector motor
692
+ vehicles in respect of which the licence was issued" — a ONE-PLATE-MANY-
693
+ VEHICLES binding that a vehicle-keyed consumer must not assume away.
694
+ Distinct from ca-bc-vintage-antique: different regime, different
695
+ eligibility, different enacting instrument, overlapping in time.
696
+ sources:
697
+ - "https://www.bclaws.gov.bc.ca/civix/document/id/complete/statreg/26_58_06 # Division 22A ss. 22A.01-22A.04, enactment note B.C. Reg. 139/2006"