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,489 @@
1
+ # plates/us-vi.yml — United States Virgin Islands (PRD-PLATES gate L2, territories).
2
+ #
3
+ # THE SOURCING SITUATION HERE IS THE INVERSE OF GUAM'S, AND IT IS STATED UP
4
+ # FRONT BECAUSE IT SHAPES EVERY ENTRY BELOW. Guam's statute is fully reachable
5
+ # and its agency is not; the Virgin Islands' agency is fully reachable and its
6
+ # statute is not. Title 20 of the Virgin Islands Code (Motor Vehicles) could NOT
7
+ # be obtained in this pass by any route attempted — law.justia.com returns HTTP
8
+ # 403 to both curl and WebFetch, lexisnexis.com/hottopics/vicode/ and
9
+ # advance.lexis.com serve JavaScript shells with no extractable text,
10
+ # vicode.lexisnexis.com does not resolve, legvi.org returns 403, law.onecle.com
11
+ # and law.resource.org have no VI tree, and the Wayback Machine holds NO
12
+ # snapshot of the Justia VI Title 20 pages (the availability API returns an
13
+ # empty archived_snapshots object). Those are recorded as measured dead ends.
14
+ #
15
+ # WHAT WE HAVE INSTEAD IS BETTER THAN USUAL FOR A DESIGN QUESTION: the VI Bureau
16
+ # of Motor Vehicles publishes its own plate announcements, and its March 2023
17
+ # notice gives a HARD EFFECTIVE DATE for the current base from the issuing
18
+ # agency itself. That is a primary source of exactly the kind PRD-PLATES §4
19
+ # ranks second only to statute — and it is why the USVI is the only jurisdiction
20
+ # in the territories group whose current AND previous standard bases are both
21
+ # minted as dated series.
22
+ #
23
+ # WHAT IS DELIBERATELY NOT HERE (PRD-PLATES §2.5): individual specialty DESIGNS.
24
+ jurisdiction: us-vi
25
+ authority:
26
+ name: United States Virgin Islands Bureau of Motor Vehicles (BMV)
27
+ url: "https://bmv.vi.gov/"
28
+ binding: vehicle
29
+ statute_edition: >-
30
+ NOT OBTAINED. Title 20 of the Virgin Islands Code governs motor vehicles and
31
+ is cited by BMV itself — see § 335 (notice of transfer, 24-hour duty) and
32
+ § 218a (Certificate of Title fee exemption for seniors and disabled persons),
33
+ both quoted on BMV's Vehicles page. Neither section's text, nor any
34
+ plate-format, plate-design or plate-display section, was reachable. Every
35
+ statutory reference in this file is therefore SECOND-HAND THROUGH BMV and is
36
+ marked as such.
37
+
38
+ # ---------------------------------------------------------------------------
39
+ # artwork_risk — required per jurisdiction by PRD-PLATES §4 / §7.1.
40
+ # ---------------------------------------------------------------------------
41
+ artwork_risk:
42
+ posture: unresearched-presumed-protected
43
+ basis: >-
44
+ Two things are established and they point the same way. First, US federal
45
+ copyright law APPLIES IN THE VIRGIN ISLANDS: the US Copyright Office states
46
+ that "US federal copyright law applies in the US Virgin Islands, Guam, and
47
+ the Northern Mariana Islands but not in American Samoa". Second, NO Commons
48
+ public-domain tag exists for the government of the Virgin Islands —
49
+ Template:PD-USVIGov returns 404 — and {{PD-USGov-Unincorporated}} is
50
+ expressly limited to UNORGANIZED territories, which the USVI is not. There is
51
+ no analogue here to Florida's Microdecisions v. Skinner or to Puerto Rico's
52
+ {{PD-PRGov}}.
53
+ conclusion: >-
54
+ Treat USVI plate ARTWORK as presumptively protected. The exposure is
55
+ concrete and unusually sharp: the current base is a COMMEMORATIVE design
56
+ built around a "175th Emancipation" logo, and a commemorative logo is far
57
+ closer to a discrete authored work than a state map or a generic floral
58
+ motif is. Do not approximate it, do not trace it, and do not render it.
59
+ edicts: >-
60
+ Edicts of government remain public domain at every level
61
+ ({{PD-US-GovEdict}}), so Title 20 VIC would be freely usable — if it could be
62
+ obtained. It could not. That is the central irony of this file and the reason
63
+ its evidence grades are lower than Guam's or Puerto Rico's despite the USVI
64
+ having the single best-dated series in the group.
65
+ emblem_rule: >-
66
+ PRD-PLATES §3's placeholder default applies without exception to the 175TH
67
+ EMANCIPATION LOGO and to the Virgin Islands coat of arms. Render
68
+ `emblem: {present: true, rendered: placeholder}` and do not revisit until a
69
+ USVI government-works copyright posture is affirmatively established.
70
+ photograph_caution: >-
71
+ plateshack.com carries no extractable licence and is treated as all rights
72
+ reserved. No image was copied; its pages were used only to corroborate which
73
+ series exist and to date them.
74
+ sources:
75
+ - "https://commons.wikimedia.org/wiki/Commons:Copyright_rules_by_territory/United_States # the US Copyright Office position that federal copyright law applies in the US Virgin Islands; the US Territories tag list, which contains no Virgin Islands entry; and the UNORGANIZED-territories limit on {{PD-USGov-Unincorporated}}"
76
+ - "https://commons.wikimedia.org/wiki/Template:PD-USVIGov # HTTP 404 — a measured negative: no Commons public-domain tag exists for the government of the US Virgin Islands"
77
+ - "https://bmv.vi.gov/2023/03/03/2023-emancipation-license-plates/ # the current base is expressly a COMMEMORATIVE design, which is what sharpens the artwork risk"
78
+
79
+ # ---------------------------------------------------------------------------
80
+ # The US standards chain. NOTHING here quotes SAE J686 (paywalled, unpinned).
81
+ # ---------------------------------------------------------------------------
82
+ us_standards:
83
+ no_federal_mandate: true
84
+ usvi_position: "No evidence was found that the USVI has adopted the AAMVA standard, and no VI instrument was reachable in which such an adoption could be recorded. AAMVA geometry is recorded as context only."
85
+ aamva_edition_3:
86
+ dimensions_delegated: "AAMVA §3.1 delegates dimensions and bolt holes to SAE J686, whose text is PAYWALLED and was NOT obtained. No J686 dimension is quoted here."
87
+ character_layout: "AAMVA §2.2: characters at least 2.5 in high, spaced at least 0.25 in apart, stroke weight 0.2-0.4 in, at least 1.25 in clear of top and bottom edges"
88
+ replacement_cycle: >-
89
+ AAMVA §1.1 recommends a rolling or full replacement cycle not to exceed
90
+ 7-10 years. THE USVI IS THE ONE TERRITORY IN THIS GROUP THAT DEMONSTRABLY
91
+ RAN A FULL REPLACEMENT: BMV's March 2023 notice makes the new plate
92
+ MANDATORY, requires the old plates to be surrendered before a registration
93
+ renewal can complete, and states the renewal "will not be completed until
94
+ the old plates have been turned in". That is a full-fleet replacement
95
+ executed through the renewal cycle, and it is documented by the issuing
96
+ agency rather than inferred.
97
+ source: "https://www.aamva.org/getmedia/646bcc8a-219b-47d8-b5cd-726240473163/License-Plate-Standard-Edition-3_September-2025-Update.pdf"
98
+
99
+ display_rules:
100
+ default: >-
101
+ UNRESOLVED — RECORDED AS A GAP RATHER THAN GUESSED. The front/rear rule for
102
+ the Virgin Islands lives in Title 20 VIC, which was not obtainable, and BMV's
103
+ public pages do not state it. The US/world dossier's front-plate survey is a
104
+ Wikipedia aggregate and is a locator, not an authority. NO front/rear claim
105
+ is made for this jurisdiction.
106
+ surrender_on_transfer: >-
107
+ Second-hand through BMV, which paraphrases Title 20 § 335: the transferor
108
+ must notify BMV of a transfer within 24 hours on BMV forms; on receipt BMV
109
+ marks the transferor's registration licence "cancelled" and VOIDS the
110
+ corresponding LICENSE PLATES; the cancellation and voiding take effect 48
111
+ hours after the Director receives the notice; the vehicle may be operated
112
+ during that 48-hour window but afterwards only if the transferee has applied
113
+ for and received a new registration licence AND new plates.
114
+ cancellation: "BMV: to cancel a registration, 'the plates and sticker must be removed from the vehicle and returned to the BMV' with a signed cancellation application — so the USVI, like Puerto Rico, treats the plate as returnable state property, and validates on a separate STICKER"
115
+ inspection_cycle: >-
116
+ BMV: all vehicles require annual inspection EXCEPT private vehicles that are
117
+ six, eight and ten years old; private vehicles that are seven, nine and older
118
+ must be inspected. An alternating-year exemption keyed to even ages is an
119
+ oddity worth recording, and it is quoted from BMV verbatim in substance.
120
+ sources:
121
+ - "https://bmv.vi.gov/vehicles/ # BMV's own statement of the Title 20 § 335 transfer/voiding rule, the plate-and-sticker return requirement on cancellation, the annual inspection rule and its age exemptions, the dealer-only third-party/double transfer rule, and the § 218a senior/disabled title-fee exemption"
122
+
123
+ series:
124
+
125
+ # =========================================================================
126
+ # THE STANDARD-ISSUE SERIES — and the ISLAND PREFIX, which is the best
127
+ # region-encoding fact in the territories group after Guam's office table.
128
+ # =========================================================================
129
+ - id: us-vi-standard-2023
130
+ class: standard
131
+ categories: [car, van, truck, bus]
132
+ period: { start: 2023 }
133
+ period_evidence: agency-instrument-date
134
+ matching: strict
135
+ format:
136
+ pattern: "LLL 999"
137
+ regex: '\A[A-Z]{3} ?\d{3}\z'
138
+ regex_strict: '\A[CTJ][A-Z]{2} ?\d{3}\z'
139
+ charset:
140
+ notes: >-
141
+ The first letter is not free: it is the ISLAND CODE (see
142
+ region_encoding), which is why `regex_strict` exists and pins it to
143
+ [CTJ]. The remaining two letters and three numerals have no sourced
144
+ restriction — no VI instrument stating letter exclusions (the I/O/Q
145
+ exclusions common in US states) was obtainable, so none is claimed.
146
+ pattern_note: >-
147
+ `regex` is the round-trippable printed form and carries no charset
148
+ restriction, per PRD-PLATES §2.7. `regex_strict` adds the one restriction
149
+ that IS attested — the island prefix — and is contained in `regex` by
150
+ construction. There is no `regex_statutory` because Title 20 VIC could not
151
+ be obtained and therefore no outer legal bound is known.
152
+ design:
153
+ plate: { w: 12, h: 6, unit: in, w_mm: 304.8, h_mm: 152.4 }
154
+ plate_dimension_note: "12 x 6 in aluminium is locator-reported; no VI instrument fixing it was obtainable"
155
+ background: { finish: retroreflective }
156
+ colour_note: >-
157
+ NO HEX IS RECORDED. The reported design is a three-band composition —
158
+ teal top stripe, white middle stripe, gold bottom stripe, with black
159
+ embossed serials and the 175th Emancipation logo centred. "Teal" and
160
+ "gold" are colour NAMES from a locator, not values from a spec, and
161
+ inventing hexes for them would be exactly the laundering PRD-PLATES §9
162
+ warns about. Recorded as descriptions; hexes await a BMV or Title 20
163
+ source.
164
+ legend_top: "U.S. VIRGIN ISLANDS"
165
+ legend_slogan_reported: "175th Emancipation"
166
+ graphic: { present: true, rendered: placeholder, description: "175th Emancipation commemorative logo, centred — locator-grade description; the design is COMMEMORATIVE and carries the highest artwork risk in this group" }
167
+ emblem: { present: true, rendered: placeholder }
168
+ band: { side: none }
169
+ rear_differs: false
170
+ validation: "a separate WINDSHIELD STICKER, not a plate decal — BMV requires 'the plates and sticker' to be surrendered together on cancellation, and dated VI windshield stickers are independently photographed"
171
+ mandatory_replacement:
172
+ effective: "2023-03-01"
173
+ rule: >-
174
+ BMV, in its own words: "Effective March 1, 2023, all vehicles with
175
+ TEMPORARY plates that were issued by the BMV will be exchanged at no cost
176
+ for the new MANDATORY VI 175th Emancipation Commemorative Plates, an
177
+ appointment is required. All other vehicles will only be issued the new
178
+ Emancipation Plates during their annual registration renewal process. In
179
+ order to renew the registration, the old plates must be removed and
180
+ returned to the BMV. The vehicle registration renewal process will not be
181
+ completed until the old plates have been turned in."
182
+ concessions: "free for registrants aged 65 and over; personalised BMV plates charged at $49; plates are collected in person and are NOT mailed even where the renewal is completed online"
183
+ region_encoding:
184
+ scheme: island-prefix
185
+ note: >-
186
+ The FIRST LETTER of the serial encodes the island of registration. This
187
+ is the USVI's signature plate fact and the reason its serials are
188
+ three-letter rather than two: the prefix is meaning, not padding.
189
+ table:
190
+ C: "Saint Croix"
191
+ T: "Saint Thomas (and Saint John before 1975)"
192
+ J: "Saint John (introduced 1975, when it was split out of the T block)"
193
+ evidence: >-
194
+ LOCATOR-GRADE, AND SAID SO. The C/T/J assignment comes from a Wikipedia
195
+ locator's per-era serial table and is corroborated only indirectly, by
196
+ photographs captioned as St. Thomas and St. Croix taxi plates. No VI
197
+ instrument was obtainable. It is recorded as a decode because it is
198
+ internally consistent across seven decades of reported serials — C-123 and
199
+ T-123 from 1939, J-123 appearing exactly at the reported 1975 split — but
200
+ it must be verified against Title 20 before any parse API decodes an
201
+ island from it.
202
+ sources:
203
+ - "https://bmv.vi.gov/2023/03/03/2023-emancipation-license-plates/ # THE PRIMARY DATE SOURCE: BMV's own notice — effective March 1 2023, the plates are MANDATORY, temporary-plate holders exchange at no cost by appointment, all other vehicles receive them at annual renewal, old plates must be surrendered before renewal completes, free at 65 and over, $49 for personalised, collected in person"
204
+ - "https://bmv.vi.gov/fees/ # BMV's published fee schedule — Personalized Plates $49.00, Registration Cancellation $12.00, Moving Permit $20.00, Certificates of Title $54.00 (free for seniors)"
205
+ - "https://bmv.vi.gov/vehicles/ # the plate-and-sticker surrender rule on cancellation, and the Title 20 § 335 transfer/voiding rule quoted second-hand"
206
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_the_United_States_Virgin_Islands # LOCATOR ONLY (PRD-PLATES §4): the CAB 123 / TAB 123 / JAB 123 arrangement, the C/T/J island prefixes and the 1975 introduction of J, the teal/white/gold banded design with the 175th Emancipation logo, and 12x6 in aluminium construction"
207
+ - "http://www.plateshack.com/y2k/Virgin_Islands/viy2k.html # CORROBORATION (PRD-PLATES §4): a photograph captioned 'New Virgin Islands standard license plate issued in 2023 - 175th Anniversary of Emancipation', which independently confirms BMV's date and design name. No licence statement on the site; no image or text copied"
208
+ notes: >-
209
+ USVI STANDARD ISSUE, CURRENT BASE — AND THE BEST-DATED SERIES IN THE
210
+ TERRITORIES GROUP. `period_evidence: agency-instrument-date` is a real
211
+ claim: the issuing agency published the effective date, the mandatory
212
+ status, and the mechanism of changeover, and an independent photograph
213
+ confirms it. Compare Guam and the Northern Marianas in this same group,
214
+ where every base boundary is secondary. THE TRANSITION IS MODELLED HONESTLY
215
+ AS AN OVERLAP: because the new plates were issued at each vehicle's annual
216
+ renewal rather than in a single swap, the 2016 base remained lawfully on the
217
+ road throughout 2023 and beyond. That is precisely the parallel-issuance
218
+ case PRD-PLATES §2.2 sanctions, and the two series overlap deliberately.
219
+
220
+ - id: us-vi-standard-2016
221
+ class: standard
222
+ categories: [car, van, truck, bus]
223
+ period: { start: 2016, end: 2023 }
224
+ period_evidence: mixed-locator-start-agency-end
225
+ matching: strict
226
+ format:
227
+ pattern: "LLL 999"
228
+ regex: '\A[A-Z]{3} ?\d{3}\z'
229
+ regex_strict: '\A[CTJ][A-Z]{2} ?\d{3}\z'
230
+ charset: { notes: "same island-prefixed grammar as the current base; the serial arrangement did NOT change at the 2023 boundary, only the artwork did" }
231
+ design:
232
+ plate: { w: 12, h: 6, unit: in }
233
+ background: { finish: retroreflective }
234
+ emblem: { present: true, rendered: placeholder }
235
+ note: "the preceding base's artwork is L4 scope and its evidence is photographic, not instrumental; it is not described here"
236
+ region_encoding:
237
+ scheme: island-prefix
238
+ note: "identical C/T/J scheme — see us-vi-standard-2023's table; the prefix long predates both bases"
239
+ evidence: locator-grade
240
+ sources:
241
+ - "https://bmv.vi.gov/2023/03/03/2023-emancipation-license-plates/ # THE END BOUNDARY IS PRIMARY: BMV's notice makes the successor plate mandatory from March 1 2023 and requires surrender of 'the old plates' at renewal, which is what closes this series"
242
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_the_United_States_Virgin_Islands # LOCATOR ONLY: the April 2016 start of this base and its February 2023 end. The START is locator-grade and is NOT corroborated by any agency source"
243
+ - "http://www.plateshack.com/y2k/Virgin_Islands/viy2k.html # CORROBORATION: dated photographs of VI plates in use in 2017, 2018 and September 2019, which place a distinct base in circulation across this window without fixing either boundary"
244
+ notes: >-
245
+ THE PREVIOUS USVI STANDARD BASE — the "one series back" PRD-PLATES §7 asks
246
+ for at L2. ITS TWO BOUNDARIES HAVE DIFFERENT EVIDENCE GRADES AND THE FIELD
247
+ SAYS SO: `period_evidence: mixed-locator-start-agency-end`. The END is
248
+ anchored by BMV's own mandatory-replacement notice and is a real claim; the
249
+ START is a Wikipedia locator's April 2016 and is not corroborated anywhere.
250
+ A verifier should attack the 2016 figure first. NOTE ALSO that the serial
251
+ grammar is UNCHANGED across the boundary — same island prefix, same
252
+ three-plus-three shape — so unlike Guam's 1994/2009 boundary this one cannot
253
+ be detected from the serial at all. Only the artwork changed, which means a
254
+ parse API can never date a USVI plate from its number.
255
+
256
+ # =========================================================================
257
+ # CORE DISTINCT CLASSES. The USVI demonstrably serialises these separately —
258
+ # BMV publishes a distinct application form for several of them — but NO
259
+ # format is sourced for any, because Title 20 was unobtainable. Every one is
260
+ # therefore `matching: recall-only` with the shape catch-all.
261
+ # =========================================================================
262
+ - id: us-vi-dealer
263
+ class: dealer
264
+ categories: [car, van, truck, bus, motorcycle]
265
+ period: { start: 2026 }
266
+ period_evidence: agency-instrument-in-force-upper-bound
267
+ matching: recall-only
268
+ format:
269
+ pattern: "LLL 999"
270
+ regex: '\A[A-Z0-9](?: ?[A-Z0-9])*\z'
271
+ charset: { notes: "no grammar sourced; Title 20 VIC unobtainable" }
272
+ pattern_note: "ILLUSTRATIVE PATTERN, CATCH-ALL REGEX. A match is a shape hit and nothing more — that is what `matching: recall-only` declares."
273
+ design: { plate: { note: "not sourced" }, emblem: { present: false } }
274
+ binding: business
275
+ eligibility: >-
276
+ BMV maintains a "Dealer License Plate Application Form", and separately
277
+ restricts THIRD-PARTY AND DOUBLE TRANSFERS to dealers holding a Power of
278
+ Attorney signed by the seller — so a VI dealer is a distinct regulated actor
279
+ with its own plate application route.
280
+ region_encoding: none
281
+ sources:
282
+ - "https://bmv.vi.gov/forms/ # BMV's published forms index, which lists a 'Dealer License Plate Application Form' under Vehicle Registration & Titling — direct agency evidence that a distinct dealer plate series exists"
283
+ - "https://bmv.vi.gov/vehicles/ # the dealer-only third-party and double-transfer rule and its Power of Attorney requirement"
284
+ notes: >-
285
+ USVI DEALER PLATES. Minted on the strength of the issuing agency publishing
286
+ a dedicated application form for them — which establishes the SERIES EXISTS
287
+ without establishing anything about its grammar. `period: {start: 2026}` is
288
+ the year BMV's forms index was read and is an UPPER BOUND on the true start,
289
+ recorded in the Florida manner rather than invented. This entry is a
290
+ placeholder with citations, and it is honest about being one.
291
+
292
+ - id: us-vi-temporary
293
+ class: temporary
294
+ categories: [car, van, truck, bus, motorcycle]
295
+ period: { start: 2026 }
296
+ period_evidence: agency-instrument-in-force-upper-bound
297
+ matching: recall-only
298
+ format:
299
+ pattern: "LLL 999"
300
+ regex: '\A[A-Z0-9](?: ?[A-Z0-9])*\z'
301
+ charset: { notes: "no grammar sourced" }
302
+ pattern_note: "illustrative pattern, catch-all regex — see us-vi-dealer's note"
303
+ design: { plate: { note: "not sourced" }, emblem: { present: false } }
304
+ variants_evidenced:
305
+ - "DEALER TEMPORARY TAGS — BMV publishes both a 'Dealer Temporary Tag Application Form' and a 'Dealer Temporary Tag Issuance Form', the two-form structure implying dealer authorisation followed by per-tag issuance, the same shape as Guam's 16 GCA § 7179"
306
+ - "BMV-ISSUED TEMPORARY PLATES — the March 2023 notice refers to 'all vehicles with TEMPORARY plates that were issued by the BMV', confirming BMV issues temporaries directly and separately from the dealer channel"
307
+ - "MOVING PERMIT — BMV requires a first-time registrant to obtain a moving permit before presenting the vehicle for inspection; the fee is $20.00"
308
+ region_encoding: none
309
+ sources:
310
+ - "https://bmv.vi.gov/forms/ # the 'Dealer Temporary Tag Application Form' and 'Dealer Temporary Tag Issuance Form'"
311
+ - "https://bmv.vi.gov/2023/03/03/2023-emancipation-license-plates/ # BMV's reference to vehicles carrying TEMPORARY plates 'that were issued by the BMV' — evidence of a BMV-issued temporary channel distinct from the dealer one"
312
+ - "https://bmv.vi.gov/vehicles/ # the moving-permit requirement for first-time registration; https://bmv.vi.gov/fees/ prices it at $20.00"
313
+ notes: >-
314
+ USVI TEMPORARY PLATES — and there are demonstrably at least TWO channels,
315
+ dealer-issued and BMV-issued, plus a separate moving permit for the
316
+ pre-inspection stage. They are not split into separate series because
317
+ nothing distinguishes them in the evidence except the issuer, and minting
318
+ three format-identical placeholders would be modelling noise. The
319
+ two-channel structure is recorded in `variants_evidenced` so a later pass
320
+ knows exactly what to split.
321
+
322
+ - id: us-vi-motorcycle
323
+ class: motorcycle
324
+ categories: [motorcycle]
325
+ period: { start: 2026 }
326
+ period_evidence: photographic-in-use-upper-bound
327
+ matching: recall-only
328
+ format:
329
+ pattern: "LLL 999"
330
+ regex: '\A[A-Z0-9](?: ?[A-Z0-9])*\z'
331
+ charset: { notes: "no grammar sourced; the plate is reduced-size, which is why it is a separate series at all" }
332
+ pattern_note: "illustrative pattern, catch-all regex — see us-vi-dealer's note"
333
+ design: { plate: { note: "reduced size; no dimension sourced" }, emblem: { present: true, rendered: placeholder } }
334
+ region_encoding: { scheme: island-prefix, note: "presumed to share the C/T/J prefix; NOT verified for this class", evidence: unverified }
335
+ sources:
336
+ - "http://www.plateshack.com/y2k/Virgin_Islands/viy2k.html # CORROBORATION ONLY (PRD-PLATES §4): photographs of US Virgin Islands MOTORCYCLE plates with 2014 and 2017 expirations, establishing that a separately-issued motorcycle plate exists. No format, colour or dimension is claimed from a photograph"
337
+ notes: >-
338
+ USVI MOTORCYCLE PLATES. THE WEAKEST-EVIDENCED SERIES IN THIS FILE, and
339
+ flagged accordingly: its entire basis is two dated photographs on an
340
+ enthusiast site with no licence statement. It is minted rather than dropped
341
+ for one reason — PRD-PLATES §7's L2 scope names motorcycle as a core class
342
+ to spec where the jurisdiction separately serialises it, and a series with
343
+ citations and an explicit `recall-only` matcher is more useful to a consumer
344
+ than silence. `period: {start: 2026}` is a read-date upper bound and carries
345
+ no historical claim whatsoever.
346
+
347
+ - id: us-vi-taxi
348
+ class: taxi
349
+ categories: [car, van, bus]
350
+ period: { start: 2026 }
351
+ period_evidence: photographic-in-use-upper-bound
352
+ matching: recall-only
353
+ format:
354
+ pattern: "LLL 999"
355
+ regex: '\A[A-Z0-9](?: ?[A-Z0-9])*\z'
356
+ charset: { notes: "no grammar sourced" }
357
+ pattern_note: "illustrative pattern, catch-all regex — see us-vi-dealer's note"
358
+ design: { plate: { note: "not sourced" }, emblem: { present: true, rendered: placeholder } }
359
+ quota: "BMV publishes an 'Application for Rental Vehicles Quota' form, evidence that the USVI operates numeric quotas on at least one for-hire fleet class"
360
+ region_encoding: { scheme: island-prefix, note: "photographs are captioned as St. Thomas and St. Croix taxi plates, consistent with the island prefix applying to this class too", evidence: weak-corroboration }
361
+ sources:
362
+ - "http://www.plateshack.com/y2k/Virgin_Islands/viy2k.html # CORROBORATION ONLY: photographs of a '2010 issued U.S. Virgin Islands taxi plate used on St. Thomas' and a 'U.S. Virgin Islands, St. Croix taxi plate', establishing a separately-issued taxi series and its island association"
363
+ - "https://bmv.vi.gov/forms/ # the 'Application for Rental Vehicles Quota' form — agency evidence of quota administration over for-hire fleets"
364
+ notes: >-
365
+ USVI TAXI PLATES. Kept separate from the standard series because the
366
+ photographs show a distinct plate type and because the Virgin Islands'
367
+ economy makes for-hire vehicles a large and separately administered fleet.
368
+ EVIDENCE IS PHOTOGRAPHIC ONLY. The rental-quota form is included because it
369
+ is the one piece of AGENCY evidence that the USVI administers for-hire
370
+ classes numerically, which is the administrative fingerprint of a separate
371
+ serial namespace.
372
+
373
+ - id: us-vi-government
374
+ class: government
375
+ categories: [car, van, truck, bus]
376
+ period: { start: 2026 }
377
+ period_evidence: photographic-in-use-upper-bound
378
+ matching: recall-only
379
+ format:
380
+ pattern: "LLL 999"
381
+ regex: '\A[A-Z0-9](?: ?[A-Z0-9])*\z'
382
+ charset: { notes: "no grammar sourced" }
383
+ pattern_note: "illustrative pattern, catch-all regex — see us-vi-dealer's note"
384
+ design: { plate: { note: "not sourced" }, emblem: { present: true, rendered: placeholder } }
385
+ region_encoding: none
386
+ sources:
387
+ - "http://www.plateshack.com/y2k/Virgin_Islands/viy2k.html # CORROBORATION ONLY: photographs of a 'Virgin Islands Police Department Official plate' (ca. 2017) and a 'Virgin Islands Tax Assessor plate', establishing that VI government fleets carry OFFICIAL plates distinct from standard issue"
388
+ notes: >-
389
+ USVI GOVERNMENT PLATES. Recorded as one series rather than split into
390
+ government and police, even though the photographic evidence shows a POLICE
391
+ DEPARTMENT plate specifically, because nothing in the evidence establishes
392
+ whether police run their own namespace or sit inside a general official
393
+ series — and _meta/classes.yml defines `police` as police fleets WHERE
394
+ DISTINCT from government, a condition that cannot be tested here. Splitting
395
+ on a photograph would be inventing a distinction.
396
+
397
+ - id: us-vi-personalized
398
+ class: personalized
399
+ categories: [car, van, truck, motorcycle]
400
+ period: { start: 2026 }
401
+ period_evidence: agency-instrument-in-force-upper-bound
402
+ matching: recall-only
403
+ format:
404
+ pattern: "LLLLLL"
405
+ regex: '\A[A-Z0-9](?: ?[A-Z0-9])*\z'
406
+ charset:
407
+ notes: >-
408
+ NO LENGTH CAP AND NO ALPHABET RESTRICTION IS SOURCED. Title 20 VIC could
409
+ not be obtained, and BMV publishes a "Personalized License Plate" form
410
+ without stating the rules on its public pages. Contrast Guam, whose
411
+ seven-position cap is in statute, and Florida, whose is. The USVI's is
412
+ simply unknown, and an unbounded catch-all with `matching: recall-only`
413
+ is the only honest encoding of that.
414
+ pattern_note: "illustrative pattern; the regex claims nothing"
415
+ design: { plate: { note: "not sourced" }, emblem: { present: true, rendered: placeholder } }
416
+ fee: "$49.00, per BMV's published fee schedule and confirmed independently in BMV's March 2023 plate notice ('Personalized BMV plates will be charged $49')"
417
+ region_encoding: none
418
+ sources:
419
+ - "https://bmv.vi.gov/fees/ # 'Personalized Plates $49.00' in BMV's own published schedule"
420
+ - "https://bmv.vi.gov/forms/ # BMV's 'Personalized License Plate' application form"
421
+ - "https://bmv.vi.gov/2023/03/03/2023-emancipation-license-plates/ # independent confirmation of the $49 figure, and the distinction BMV draws between PERSONALIZED BMV plates and VANITY plates 'charged by the organization issuing the plates'"
422
+ notes: >-
423
+ USVI PERSONALISED PLATES. THE VALUABLE FACT HERE IS A DISTINCTION, NOT A
424
+ FORMAT: BMV's March 2023 notice separates "Personalized BMV plates", priced
425
+ by BMV at $49, from "Vanity plates", which "will continue to be charged BY
426
+ THE ORGANIZATION ISSUING THE PLATES". That is direct agency evidence that
427
+ the USVI runs an organisation-sponsored plate channel alongside its own
428
+ personalised channel — see us-vi-specialty-index — and it is the kind of
429
+ structural fact that a fee schedule alone would never surface.
430
+
431
+ # =========================================================================
432
+ # SPECIALTY — INDEX ONLY, per PRD-PLATES §2.5.
433
+ # =========================================================================
434
+ - id: us-vi-specialty-index
435
+ class: specialty
436
+ categories: [car, van, truck, motorcycle]
437
+ period: { start: 2026 }
438
+ period_evidence: agency-instrument-in-force-upper-bound
439
+ matching: recall-only
440
+ format:
441
+ pattern: "LLL 999"
442
+ regex: '\A[A-Z0-9](?: ?[A-Z0-9])*\z'
443
+ charset: { notes: "specialty plates are presumed to carry ordinary island-prefixed serials on alternative designs; not verified" }
444
+ pattern_note: "illustrative only — this is an INDEX entry, not a spec"
445
+ design:
446
+ plate: { note: "one design per programme; the designs themselves are L4 scope (PRD-PLATES §2.5) and none is described here" }
447
+ emblem: { present: true, rendered: placeholder }
448
+ program_index:
449
+ count_official: null
450
+ count_official_note: >-
451
+ NO COUNT IS PUBLISHED AND NONE IS INVENTED. BMV maintains no specialty
452
+ gallery, no programme list and no enumerated catalogue on its public site;
453
+ the only structural fact it publishes is that vanity plates are "charged by
454
+ the ORGANIZATION issuing the plates", which establishes the channel exists
455
+ without sizing it. This is the single largest gap in the USVI file and the
456
+ most valuable thing a follow-up pass could close.
457
+ channel_structure: >-
458
+ BMV DRAWS A TWO-CHANNEL DISTINCTION IN ITS OWN WORDS: "Personalized BMV
459
+ plates will be charged $49 and VANITY PLATES will continue to be charged
460
+ BY THE ORGANIZATION ISSUING THE PLATES." So in the USVI a sponsoring
461
+ organisation, not the Bureau, prices its own plate — an administrative
462
+ arrangement closer to Texas's vendored MyPlates model than to Florida's
463
+ statutory annual-use-fee model, and worth flagging for the encyclopedia.
464
+ programs_evidenced:
465
+ - "Humane Society of St. Thomas (type first issued 2006)"
466
+ - "Prince Hall Masons (2006)"
467
+ - "US Virgin Islands Olympics (2009-2010) and Paralympics (2002)"
468
+ - "Virgin Islands Vintage & Classic Car Club (in use 2018)"
469
+ - "Alpha Kappa Alpha (in use 2017)"
470
+ programs_evidenced_note: >-
471
+ PHOTOGRAPHIC EVIDENCE ONLY, from a single enthusiast site, and listed to
472
+ show the SHAPE of the programme — fraternal, sporting, animal-welfare and
473
+ car-club sponsors — not to assert a catalogue. Five attested programmes is
474
+ a floor, not a count.
475
+ region_encoding: none
476
+ sources:
477
+ - "https://bmv.vi.gov/2023/03/03/2023-emancipation-license-plates/ # BMV's own two-channel statement: personalised BMV plates at $49 versus vanity plates priced by the sponsoring organisation"
478
+ - "https://bmv.vi.gov/fees/ # the published fee schedule, which contains NO specialty or vanity line item — corroborating that those are priced outside BMV"
479
+ - "http://www.plateshack.com/y2k/Virgin_Islands/viy2k.html # CORROBORATION + GAP-FINDER: dated photographs of the five sponsored programmes listed above. No image or text copied; used only to establish that the channel is populated"
480
+ notes: >-
481
+ THE SPECIALTY PROGRAM INDEX — one entry standing for the whole programme,
482
+ per PRD-PLATES §2.5. THE HONEST HEADLINE IS THAT THIS INDEX HAS NO COUNT.
483
+ Florida's index records a contested count from two sources; Guam's and Puerto
484
+ Rico's record exact statutory counts; the USVI's records that the issuing
485
+ agency publishes nothing at all and that the pricing sits with third-party
486
+ sponsors. Recording the absence, with the reason and the five photographed
487
+ programmes that prove the channel is live, is more useful than a number
488
+ invented from a photo gallery — and it tells a verifier precisely where to
489
+ dig.