vehicles 0.6.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +164 -0
  3. data/CHANGELOG.md +274 -0
  4. data/README.md +55 -10
  5. data/data/PROVENANCE-vehicles.md +12 -0
  6. data/data/plates/PROVENANCE.md +5 -4
  7. data/data/plates/_decode/at-districts.yml +287 -0
  8. data/data/plates/_decode/ch-cantons.yml +110 -0
  9. data/data/plates/_decode/cn-issuing-offices.yml +463 -0
  10. data/data/plates/_decode/cn-provinces.yml +614 -0
  11. data/data/plates/_decode/cz-kraj.yml +159 -0
  12. data/data/plates/_decode/dk-serial-blocks.yml +327 -0
  13. data/data/plates/_decode/fr-departements.yml +191 -0
  14. data/data/plates/_decode/gb-age-identifiers.yml +170 -0
  15. data/data/plates/_decode/gb-memory-tags.yml +202 -0
  16. data/data/plates/_decode/gr-prefectures.yml +1408 -0
  17. data/data/plates/_decode/hr-cities.yml +315 -0
  18. data/data/plates/_decode/ie-counties.yml +227 -0
  19. data/data/plates/_decode/in-state-codes.yml +169 -0
  20. data/data/plates/_decode/is-districts-1938.yml +116 -0
  21. data/data/plates/_decode/it-provinces.yml +348 -0
  22. data/data/plates/_decode/jp-office-marks.yml +960 -0
  23. data/data/plates/_decode/jp-use-marks.yml +205 -0
  24. data/data/plates/_decode/kr-authority-marks.yml +146 -0
  25. data/data/plates/_decode/kr-use-syllables.yml +194 -0
  26. data/data/plates/_decode/lu-series-order.yml +638 -0
  27. data/data/plates/_decode/mx-entity-series.yml +380 -0
  28. data/data/plates/_decode/my-index-marks.yml +271 -0
  29. data/data/plates/_decode/no-counties-1913.yml +148 -0
  30. data/data/plates/_decode/no-districts.yml +901 -0
  31. data/data/plates/_decode/pl-powiats.yml +567 -0
  32. data/data/plates/_decode/pt-trailer-services.yml +96 -0
  33. data/data/plates/_decode/ro-counties.yml +213 -0
  34. data/data/plates/_decode/se-diplomatic.yml +220 -0
  35. data/data/plates/_decode/si-regions.yml +123 -0
  36. data/data/plates/_decode/sk-districts.yml +314 -0
  37. data/data/plates/_decode/th-registration-elements.yml +208 -0
  38. data/data/plates/_decode/ua-regions.yml +393 -0
  39. data/data/plates/_decode/za-licence-marks.yml +215 -0
  40. data/data/plates/_meta/classes.yml +1 -0
  41. data/data/plates/_meta/separators.yml +102 -0
  42. data/data/plates/ad.yml +961 -0
  43. data/data/plates/ar.yml +762 -0
  44. data/data/plates/at.yml +1424 -0
  45. data/data/plates/au-act.yml +472 -0
  46. data/data/plates/au-nsw.yml +282 -0
  47. data/data/plates/au-nt.yml +431 -0
  48. data/data/plates/au-qld.yml +272 -0
  49. data/data/plates/au-sa.yml +248 -0
  50. data/data/plates/au-tas.yml +302 -0
  51. data/data/plates/au-vic.yml +215 -0
  52. data/data/plates/au-wa.yml +309 -0
  53. data/data/plates/be.yml +1840 -0
  54. data/data/plates/br.yml +1152 -0
  55. data/data/plates/ca-ab.yml +430 -0
  56. data/data/plates/ca-bc.yml +697 -0
  57. data/data/plates/ca-mb.yml +499 -0
  58. data/data/plates/ca-nb.yml +537 -0
  59. data/data/plates/ca-nl.yml +743 -0
  60. data/data/plates/ca-ns.yml +808 -0
  61. data/data/plates/ca-nt.yml +610 -0
  62. data/data/plates/ca-nu.yml +280 -0
  63. data/data/plates/ca-on.yml +881 -0
  64. data/data/plates/ca-pe.yml +592 -0
  65. data/data/plates/ca-qc.yml +1036 -0
  66. data/data/plates/ca-sk.yml +256 -0
  67. data/data/plates/ca-yt.yml +656 -0
  68. data/data/plates/ch.yml +1273 -0
  69. data/data/plates/cn.yml +1431 -0
  70. data/data/plates/cy.yml +688 -0
  71. data/data/plates/cz.yml +1179 -0
  72. data/data/plates/de.yml +553 -118
  73. data/data/plates/dk.yml +1647 -0
  74. data/data/plates/ee.yml +1275 -0
  75. data/data/plates/es.yml +228 -32
  76. data/data/plates/fi.yml +1271 -0
  77. data/data/plates/fr.yml +1265 -0
  78. data/data/plates/gb.yml +1188 -0
  79. data/data/plates/gr.yml +721 -0
  80. data/data/plates/hr.yml +860 -0
  81. data/data/plates/hu.yml +959 -0
  82. data/data/plates/ie.yml +775 -0
  83. data/data/plates/in.yml +1172 -0
  84. data/data/plates/is.yml +667 -0
  85. data/data/plates/it.yml +1317 -0
  86. data/data/plates/jp.yml +3650 -0
  87. data/data/plates/kr.yml +1375 -0
  88. data/data/plates/li.yml +1010 -0
  89. data/data/plates/lt.yml +879 -0
  90. data/data/plates/lu.yml +842 -0
  91. data/data/plates/lv.yml +924 -0
  92. data/data/plates/mc.yml +1024 -0
  93. data/data/plates/mt.yml +854 -0
  94. data/data/plates/mx.yml +1372 -0
  95. data/data/plates/my.yml +685 -0
  96. data/data/plates/nl.yml +44 -0
  97. data/data/plates/no.yml +1018 -0
  98. data/data/plates/nz.yml +1699 -0
  99. data/data/plates/pl.yml +1296 -0
  100. data/data/plates/pt.yml +847 -0
  101. data/data/plates/ro.yml +785 -0
  102. data/data/plates/se.yml +1091 -0
  103. data/data/plates/si.yml +1105 -0
  104. data/data/plates/sk.yml +1439 -0
  105. data/data/plates/sm.yml +1119 -0
  106. data/data/plates/th.yml +1150 -0
  107. data/data/plates/ua.yml +1672 -0
  108. data/data/plates/us-ak.yml +763 -0
  109. data/data/plates/us-al.yml +457 -0
  110. data/data/plates/us-ar.yml +427 -0
  111. data/data/plates/us-as.yml +454 -0
  112. data/data/plates/us-az.yml +430 -0
  113. data/data/plates/us-ca.yml +892 -0
  114. data/data/plates/us-co.yml +452 -0
  115. data/data/plates/us-ct.yml +427 -0
  116. data/data/plates/us-dc.yml +614 -0
  117. data/data/plates/us-de.yml +551 -0
  118. data/data/plates/us-fl.yml +319 -96
  119. data/data/plates/us-ga.yml +644 -0
  120. data/data/plates/us-gu.yml +658 -0
  121. data/data/plates/us-hi.yml +585 -0
  122. data/data/plates/us-ia.yml +438 -0
  123. data/data/plates/us-id.yml +531 -0
  124. data/data/plates/us-il.yml +516 -0
  125. data/data/plates/us-in.yml +324 -0
  126. data/data/plates/us-ks.yml +351 -0
  127. data/data/plates/us-ky.yml +770 -0
  128. data/data/plates/us-la.yml +568 -0
  129. data/data/plates/us-ma.yml +379 -0
  130. data/data/plates/us-md.yml +536 -0
  131. data/data/plates/us-me.yml +445 -0
  132. data/data/plates/us-mi.yml +408 -0
  133. data/data/plates/us-mn.yml +411 -0
  134. data/data/plates/us-mo.yml +356 -0
  135. data/data/plates/us-mp.yml +402 -0
  136. data/data/plates/us-ms.yml +432 -0
  137. data/data/plates/us-mt.yml +619 -0
  138. data/data/plates/us-nc.yml +602 -0
  139. data/data/plates/us-nd.yml +419 -0
  140. data/data/plates/us-ne.yml +483 -0
  141. data/data/plates/us-nh.yml +394 -0
  142. data/data/plates/us-nj.yml +547 -0
  143. data/data/plates/us-nm.yml +574 -0
  144. data/data/plates/us-nv.yml +655 -0
  145. data/data/plates/us-ny.yml +592 -0
  146. data/data/plates/us-oh.yml +404 -0
  147. data/data/plates/us-ok.yml +513 -0
  148. data/data/plates/us-or.yml +392 -0
  149. data/data/plates/us-pa.yml +506 -0
  150. data/data/plates/us-pr.yml +507 -0
  151. data/data/plates/us-ri.yml +445 -0
  152. data/data/plates/us-sc.yml +605 -0
  153. data/data/plates/us-sd.yml +428 -0
  154. data/data/plates/us-tn.yml +471 -0
  155. data/data/plates/us-tx.yml +535 -0
  156. data/data/plates/us-ut.yml +384 -0
  157. data/data/plates/us-va.yml +567 -0
  158. data/data/plates/us-vi.yml +489 -0
  159. data/data/plates/us-vt.yml +458 -0
  160. data/data/plates/us-wa.yml +484 -0
  161. data/data/plates/us-wi.yml +509 -0
  162. data/data/plates/us-wv.yml +446 -0
  163. data/data/plates/us-wy.yml +523 -0
  164. data/data/plates/va.yml +604 -0
  165. data/data/plates/za.yml +1141 -0
  166. data/data/vehicles.json +160653 -105090
  167. data/lib/vehicles/configuration.rb +17 -3
  168. data/lib/vehicles/dataset.rb +73 -18
  169. data/lib/vehicles/fuzzy.rb +115 -0
  170. data/lib/vehicles/http.rb +48 -0
  171. data/lib/vehicles/make.rb +36 -6
  172. data/lib/vehicles/mcp_server.rb +5 -5
  173. data/lib/vehicles/model.rb +21 -2
  174. data/lib/vehicles/plates/series.rb +172 -18
  175. data/lib/vehicles/plates/template_fill.rb +188 -0
  176. data/lib/vehicles/plates/templates.rb +162 -0
  177. data/lib/vehicles/plates.rb +12 -0
  178. data/lib/vehicles/providers/hosted_provider.rb +28 -55
  179. data/lib/vehicles/validators/vehicle_make_validator.rb +3 -1
  180. data/lib/vehicles/validators/vehicle_model_validator.rb +1 -1
  181. data/lib/vehicles/version.rb +1 -1
  182. data/lib/vehicles.rb +32 -16
  183. data/rakelib/data_refresh.rake +109 -0
  184. data/rakelib/plates_refresh.rake +29 -0
  185. data/sig/vehicles.rbs +18 -0
  186. metadata +164 -2
@@ -0,0 +1,854 @@
1
+ # plates/mt.yml — Malta (PRD-PLATES gate L1, wave 2).
2
+ #
3
+ # THE INTERESTING THING ABOUT MALTA IS THE LETTER BLOCK, AND IT IS PUBLISHED.
4
+ # Most small jurisdictions allocate class-marking letters by unpublished
5
+ # administrative practice. Malta does not: regulation 31 of S.L. 368.02, headed
6
+ # "Particular registration marks", enumerates the blocks in binding subsidiary
7
+ # legislation, block by block, with the vehicle class each denotes. That
8
+ # regulation is quoted verbatim in the series below and is the backbone of this
9
+ # file. Everything here is primary — legislation.mt, consolidated to 23-01-2026
10
+ # — and no secondary source was needed except for ONE table, flagged where it
11
+ # appears.
12
+ #
13
+ # ============================================================================
14
+ # THE INSTRUMENT CHAIN, AND A CORRECTION TO THE OBVIOUS GUESS
15
+ # ============================================================================
16
+ # Plates are NOT under Cap. 65 (the Traffic Regulation Ordinance, 1931). They
17
+ # were until 2004 and are not now; L.N. 476 of 2004 reg. 52 deleted the plate
18
+ # regulations out of S.L. 65.11. All current plate law is in ONE instrument:
19
+ #
20
+ # * CAP. 368 — Motor Vehicles Registration and Licensing Act (Act X of 1994,
21
+ # in force 1-1-1994). The parent Act. Art. 20 is the regulation-making
22
+ # power; art. 8(4) creates the weekend/high-emission regime; art. 25 (added
23
+ # by Act XIII of 2015) creates the vintage regime.
24
+ # * S.L. 368.02 — Registration and Licensing of Motor Vehicles Regulations,
25
+ # originating as L.N. 198 of 2009, deemed in force 1-1-2009 (save reg. 6(3),
26
+ # 1-8-2009). THE MASTER INSTRUMENT. Reg. 30 + First Schedule (mark formats
27
+ # and fees), reg. 31 (the letter blocks), reg. 32 (display), reg. 34 +
28
+ # Second Schedule (plate specification), reg. 36/36A (trade and temporary
29
+ # plates), reg. 6C/6D (weekend and vintage).
30
+ # Amended by L.N. 110 and 195 of 2011, 127 of 2013, 178 and 342 of 2015,
31
+ # 125 of 2017, 139 of 2018, 265 of 2022, 340 of 2024, 160 and 262 of 2025,
32
+ # 21 of 2026, and by Act XV of 2009 and Act XXI of 2020.
33
+ # * S.L. 499.59 — Taxi Services Regulations (L.N. 369 of 2010), which govern
34
+ # the taxi mark and are the ONLY place Maltese law encodes geography.
35
+ #
36
+ # THE REVOCATION CHAIN, walked instrument by instrument, because it is what
37
+ # dates the series:
38
+ # Motor Vehicles Regulations 1948
39
+ # -> repealed by L.N. 128 of 1994 (Motor Vehicles Regulations 1994, S.L.
40
+ # 65.11), made by the COMMISSIONER OF POLICE with the Traffic Control
41
+ # Board under s.17 of the Ordinance;
42
+ # -> L.N. 114 of 2004, Vehicles Identification Plates Regulations, IN FORCE
43
+ # 9 MARCH 2004 — the FIRST published prescription of the three-letter,
44
+ # three-digit format;
45
+ # -> L.N. 476 of 2004, in force 1 MAY 2004 (Malta's EU accession day),
46
+ # which revoked L.N. 114 of 2004 and introduced the EU band;
47
+ # -> L.N. 198 of 2009 reg. 45 revoked L.N. 476 of 2004; it is today's
48
+ # S.L. 368.02.
49
+ #
50
+ # ============================================================================
51
+ # THE BIG SOURCED NEGATIVE: BEFORE 2004 MALTA PUBLISHED NO PLATE FORMAT
52
+ # ============================================================================
53
+ # The same finding this wave made in Cyprus, reached the same way — by reading
54
+ # the delegating provision rather than by failing to find a schedule. L.N. 128
55
+ # of 1994, reg. 32, verbatim:
56
+ #
57
+ # "Each identification number and letter shall be assigned to a motor vehicle
58
+ # by the Commissioner of Police. The dimensions of any letter figure of the
59
+ # identification number of any motor vehicle, the total width of the space
60
+ # taken by any such letter figure and the space between any two such letter
61
+ # figures shall be those as may be determined FROM TIME TO TIME BY THE
62
+ # COMMISSIONER OF POLICE on the advice of the Traffic Control Board or, in
63
+ # the case of public transport vehicles, by the Public Transport Authority."
64
+ #
65
+ # And reg. 31: "Every motor vehicle shall bear an identification number which
66
+ # will be allotted to it and issued by the Commissioner of Police" — with no
67
+ # format prescribed anywhere.
68
+ #
69
+ # CONSEQUENCE: the 1952, 1979 and 1995 series changes were ADMINISTRATIVE
70
+ # DECISIONS of the Commissioner of Police under a delegating regulation. There
71
+ # is no instrument to date them from. Every pre-2004 series below is therefore
72
+ # `matching: recall-only` with `period_evidence: secondary-dated`, and their
73
+ # boundaries are observational, not legislated. That is a well-evidenced gap:
74
+ # all 30 Cap. 65 subsidiary instruments and both Cap. 368 ones were enumerated
75
+ # and the whole 1948->2009 revocation chain was walked to establish it.
76
+ #
77
+ # ============================================================================
78
+ # THREE SECONDARY CLAIMS THIS FILE REFUTES FROM THE PRIMARY
79
+ # ============================================================================
80
+ # 1. "GVH = Department of Health." FALSE. Reg. 31(2): GVH is Government
81
+ # HEAVY vehicles, GVN is other Government vehicles. There is no health block.
82
+ # 2. "Trailers begin with TR." FALSE — there is no Maltese trailer mark at all.
83
+ # Reg. 32(4) makes a trailer display THE TOWING VEHICLE'S mark.
84
+ # 3. "Malta mandates FE-Schrift." NOT IN LAW. No typeface is named anywhere in
85
+ # Maltese plate law; see the font block on mt-standard-2004.
86
+ # A fourth, "vintage plates went silver-on-black in 2017", is off by a year AND
87
+ # omits an entire intermediate design — they were GREEN from 2015 and became
88
+ # silver-on-black in 2018. Both steps are instrument-dated below.
89
+ #
90
+ # ============================================================================
91
+ # WHAT MALTESE LAW DOES **NOT** SPECIFY — a sourced negative worth shipping
92
+ # ============================================================================
93
+ # The Second Schedule to S.L. 368.02 prescribes NO OVERALL PLATE DIMENSIONS,
94
+ # NO CHARACTER HEIGHT and NO CHARACTER STROKE WIDTH. It gives two diagrams
95
+ # (bitmaps reading "MAL 777", with no dimensional annotations), a 5 mm black
96
+ # border, "metal material", the colours, and detailed geometry for the EU band
97
+ # ONLY. The 520 x 110 mm that circulates for Malta is NOT a Maltese legal
98
+ # requirement; it is the European convention. This file therefore carries no
99
+ # `design.plate` dimensions for any series, and that absence is deliberate and
100
+ # sourced rather than a gap in research.
101
+ #
102
+ # COLOUR POLICY: the Second Schedule names plate colours in words ("black
103
+ # characters ... on white reflective material", "silver characters on a black
104
+ # background", "red characters") with no chromaticity data. The ONE numeric
105
+ # colour in Maltese plate law is the euroband blue, given as a MUNSELL
106
+ # reference — "Retro-reflecting blue background (Munsell reference 5, 9 pb
107
+ # 3,4/15,1)" — which is a colour-order-system notation, not an sRGB value and
108
+ # not a CIE box. It is recorded verbatim on the band as `color_spec_munsell`;
109
+ # the hex beside it stays `hex_basis: observed`.
110
+ jurisdiction: mt
111
+ authority:
112
+ name: Transport Malta / Authority for Transport in Malta — Motor Vehicles Registration and Licensing Act (Cap. 368) and S.L. 368.02
113
+ url: "https://legislation.mt/eli/sl/368.2/eng"
114
+ binding: vehicle
115
+
116
+ letter_blocks:
117
+ note: >-
118
+ THE CENTRE OF THIS FILE. S.L. 368.02 reg. 31, "Particular registration
119
+ marks", is the published allocation of letter blocks to vehicle classes.
120
+ Reg. 31(1) opens: "Registration marks allotted to vehicles used for hire or
121
+ for reward shall include the following Roman Alphabet letters followed by
122
+ three numbers". Note the drafting convention that runs through it: "a
123
+ letter followed by the letters XX" means a VARIABLE leading letter plus a
124
+ fixed two- or three-letter block, so the printed mark is four characters
125
+ (e.g. a route bus is [letter]BUS); where the text says only "the letters
126
+ XXX", the block is the whole letter group. That distinction is what makes
127
+ the regex families below three-or-four letters wide.
128
+ source: "https://legislation.mt/eli/sl/368.2/eng # S.L. 368.02 reg. 31, consolidated to 23-01-2026; text served as PDF from https://legislation.mt/getpdf/6980741263aaee247463a137"
129
+ hire_or_reward: # reg. 31(1), each entry quoted from the regulation
130
+ - { block: BUS, leading_letter: true, meaning: "route buses", verbatim: "a letter followed by the letters BUS in the case of route buses" }
131
+ - { block: PY, leading_letter: true, meaning: "passenger transport vehicles other than route buses (coaches)", verbatim: "a letter followed by the letters PY in the case of passenger transport vehicles other than route buses" }
132
+ - { block: LY, leading_letter: true, meaning: "light passenger transport vehicles", verbatim: "a letter followed by the letters LY in the case of light passenger transport vehicles" }
133
+ - { block: XY, leading_letter: true, meaning: "vintage buses", verbatim: "a letter followed by the letters XY in the case of vintage buses" }
134
+ - { block: QZ, leading_letter: true, meaning: "motor vehicles used for hire or leasing", verbatim: "a letter followed by the letters QZ in the case of motor vehicles used for hire or leasing" }
135
+ - { block: HQ, leading_letter: true, meaning: "carriage of goods by hauliers operating nationally", verbatim: "a letter followed by the letters HQ in the case of vehicles used for the carriage of goods by hauliers operating nationally" }
136
+ - { block: OY, leading_letter: true, meaning: "open-top buses", verbatim: "a letter followed by the letters OY in respect of open-top buses" }
137
+ - { block: RY, leading_letter: true, meaning: "trackless trains", verbatim: "a letter followed by the letters RY in respect of trackless trains" }
138
+ - { block: HRS, leading_letter: false, meaning: "motor hearses", verbatim: "the letters HRS in the case of motor hearses" }
139
+ - { block: CABS, leading_letter: false, meaning: "electric mini cabs", verbatim: "the letters CABS in the case of electric mini cabs" }
140
+ - { block: TEY, leading_letter: false, meaning: "electric trolley vehicles", verbatim: "the letters TEY in respect of electric trolley vehicles", added_by: "L.N. 139 of 2018" }
141
+ - { block: MHY, leading_letter: false, meaning: "Malta heritage buses", verbatim: "the letters MHY in respect of Malta heritage buses", added_by: "L.N. 139 of 2018" }
142
+ - { block: CSH, leading_letter: false, meaning: "car sharing vehicles", verbatim: "the letters CSH in respect of car sharing vehicles", added_by: "L.N. 139 of 2018" }
143
+ - { block: "TAXI M", leading_letter: false, meaning: "taxis operated in Malta", note: "reg. 31(1) writes 'the letters TAXI M followed by three numerical figures'; S.L. 499.59 puts the M AFTER the digits and governs — see mt-taxi-2010" }
144
+ - { block: "TAXI G", leading_letter: false, meaning: "taxis operated in Gozo", note: "same conflict as TAXI M" }
145
+ official: # reg. 31(2)-(7)
146
+ - { block: GVH, meaning: "Government Department, HEAVY vehicles", verbatim: "the three Roman Alphabet letters GVH followed by three numbers in the case of heavy vehicles", correction: "NOT 'Department of Health' — that is a persistent secondary error" }
147
+ - { block: GVN, meaning: "Government Department, other vehicles", verbatim: "the letters GVN followed by three numbers in the case of other vehicles" }
148
+ - { block: GVP, meaning: "Police Department", verbatim: "Motor vehicles registered and licensed in the name of the Police Department shall be allotted registration marks with the three Roman Alphabet letters GVP followed by three numbers" }
149
+ - { block: GVA, meaning: "Armed Forces of Malta", verbatim: "Motor vehicles registered and licensed in the name of the Armed Forces of Malta shall be allotted registration marks with the three Roman Alphabet letters GVA followed by three numbers" }
150
+ - { block: CD, leading_letter: false, meaning: "diplomatic representations in Malta", verbatim: "the letters CD followed by another letter and three numbers" }
151
+ - { block: DMS, meaning: "staff of diplomatic missions", verbatim: "the letters DMS followed by three numbers" }
152
+ - { block: GV, leading_letter: true, meaning: "N1 vehicles with a seating capacity of not more than two persons", verbatim: "The registration marks for N1 vehicles with a seating capacity of not more than two persons shall be a letter followed by the letters GV and three numbers", note: "so a BARE [x]GV mark is a small van, NOT a government vehicle — the government blocks are the three-letter GVN/GVH/GVP/GVA. This is the subtlest trap in the Maltese system" }
153
+ ministerial:
154
+ block: "GM"
155
+ verbatim: "any motor vehicle assigned to a Government Minister and bearing, instead of its identification number, the letters G.M."
156
+ source_reg: "S.L. 368.02 reg. 17(3); the same wording goes back to L.N. 128 of 1994 reg. 28(2)"
157
+ note: >-
158
+ THE INSTRUMENT PRINTS IT WITH FULL STOPS — "G.M." — and the mark REPLACES
159
+ the identification number rather than accompanying it. The full stop is
160
+ not in this dataset's serial alphabet and is in the forgiving set
161
+ (plates/_meta/separators.yml), so the block is recorded here as GM. Not
162
+ authored as a series: reg. 17(3) prescribes no digits and the mark is a
163
+ substitution for a number rather than a number, so there is no pattern to
164
+ write. Secondary sources describe a "GM 99" form; no instrument supports
165
+ the two digits.
166
+ lapsed:
167
+ note: "blocks that were prescribed and then withdrawn — kept because plates issued under them remain on the road, exactly as the period discipline in PRD-PLATES §2.4 requires for decode rows"
168
+ blocks:
169
+ - { block: BY, meaning: "route buses", period: "2004-2018", note: "replaced by BUS by L.N. 139 of 2018 s.4(a). The familiar DBY / EBY / FBY marks of the old Malta buses are instances of this rule with a varying leading letter — not three separate blocks" }
170
+ - { block: CY, meaning: "coaches", period: "2004-2011", note: "replaced by PY by L.N. 110 of 2011 s.6(b)" }
171
+ - { block: MY, meaning: "minibuses and midibuses", period: "2004-2011", note: "replaced by LY" }
172
+ - { block: SY, meaning: "special minibuses", period: "2004-2011", note: "replaced by XY" }
173
+ - { block: VY, meaning: "vans", period: "2004-2011", note: "replaced by the GV N1 rule" }
174
+ - { block: GY, meaning: "public hire vehicles driven by the service operator or his employee (chauffeur-driven)", period: "2004-2011", note: "deleted by L.N. 110 of 2011 s.6(f). Cap. 368 Fifth Schedule Category E(4) still refers to a mark 'having one letter followed by the letters GY prior to the 1st January, 2010'" }
175
+ - { block: TY, meaning: "taxicars in Malta", period: "2004-2011", note: "replaced by TAXI M" }
176
+ - { block: WY, meaning: "taxicars in Gozo", period: "2004-2011", note: "replaced by TAXI G. TY/WY were the earlier Malta/Gozo geographic pair" }
177
+ - { block: K, leading_letter: false, meaning: "self-drive motor vehicles including motor cycles", period: "2004-2011", note: "'two letters followed by the letter K'; deleted by L.N. 110 of 2011. Cap. 368 Fifth Schedule Category E(3) refers to it 'prior to the 1st January, 2010'" }
178
+ - { block: RIP, meaning: "motor hearses", period: "2004-2009", note: "replaced by HRS in L.N. 198 of 2009" }
179
+ - { block: TF, meaning: "vehicles exempt from duty and/or registration tax", period: "2004-2009", note: "L.N. 476 of 2004 reg. 33(6): 'the first two letters TF followed by another letter and three numbers'. Dropped entirely in 2009 — so the widely-repeated 'TF = tax-free' is true only of 2004-2009 plates" }
180
+ not_found:
181
+ note: >-
182
+ Claims searched for in Cap. 368, S.L. 368.02, L.N. 198/2009, L.N. 476/2004
183
+ and L.N. 128/1994, with zero hits in every instrument:
184
+ POSTA (mobile post offices) — no instrument;
185
+ TR / TRL (trailers) — no instrument, and affirmatively contradicted by
186
+ reg. 32(4), which makes a trailer carry the TOWING vehicle's mark;
187
+ any AGRICULTURAL series — "agricultural tractor" is defined in reg. 2 but
188
+ no plate series attaches to it;
189
+ any distinct MOPED series — mopeds fall under the general motorcycle rule;
190
+ the historical YELLOW rental and RED taxi/bus PLATE colours — the nearest
191
+ primary is a DOOR-MARKING rule (S.L. 499.59 reg. 24(5)) requiring the
192
+ taxi's progressive number painted black-on-white in Malta and
193
+ red-on-white in Gozo, 75 mm high, which must not be conflated with plate
194
+ colour.
195
+
196
+ series:
197
+
198
+ # =========================================================================
199
+ # THE CURRENT ORDINARY SERIES — three letters, a gap, three digits.
200
+ # =========================================================================
201
+ - id: mt-standard-2004
202
+ class: standard
203
+ categories: [car, van, truck, motorcycle]
204
+ period: { start: 2004 }
205
+ period_evidence: enacted-commencement
206
+ matching: strict
207
+ format:
208
+ pattern: "LLL 999"
209
+ regex: '\A[A-Z]{3} \d{3}\z'
210
+ charset:
211
+ notes: >-
212
+ NO LETTER EXCLUSIONS. Malta prescribes "three Roman Alphabet
213
+ characters" and excludes nothing — no vowel rule, no I/O/Q rule. That
214
+ is a sourced negative and it is unusual for Europe; contrast Spain
215
+ (20 letters), Italy (22), Greece (14) and Cyprus (12). Consequently
216
+ there is no regex_strict: `regex` already IS the sourced grammar, the
217
+ §2.7 case where a strict twin would add nothing.
218
+ digits: "three Arabic numerals; no range stated, so no leading-zero claim is made"
219
+ pattern_source: >-
220
+ First Schedule to S.L. 368.02, "Standard Alphanumeric Format (Random)",
221
+ verbatim: "Composed of two sets of three characters each, the first set
222
+ composed of three Roman Alphabet characters and the second set composed
223
+ of three Arabic numerals, e.g. XXX 111." The wording originates in the
224
+ First Schedule to L.N. 114 of 2004.
225
+ progression: >-
226
+ RANDOM, and the instrument says so in the format's own name — "Standard
227
+ Alphanumeric Format (RANDOM)". There is no sequential progression to
228
+ infer an era from, which makes a Maltese standard mark undatable from
229
+ the string alone. The one piece of structure is the first letter, and it
230
+ encodes a MONTH rather than a year or a place — see month_encoding.
231
+ separator_note: >-
232
+ No separator glyph is prescribed. The First Schedule's own example is
233
+ written "XXX 111" with a gap and the Second Schedule requires "a
234
+ watermark in the space between the letters and the numbers" — so the gap
235
+ is a real, specified feature of the plate that is occupied by a security
236
+ watermark, not merely typographic whitespace. The emitted SPACE is the
237
+ correct encoding, and it is the same situation as the Italian marchio
238
+ and the German Plaketten: something sits IN the gap, and it is not part
239
+ of the serial.
240
+ month_encoding:
241
+ rule_verbatim: "Where the registration mark is of the Standard Alphanumeric Format (Random) type, the first letter shall stand for the month in which the licence of the vehicle shall be renewed."
242
+ rule_source: "https://legislation.mt/eli/sl/368.2/eng # S.L. 368.02, First Schedule, final line; introduced by L.N. 195 of 2011 when it substituted the First Schedule"
243
+ rule_evidence: instrument-in-force
244
+ note: >-
245
+ THE MOST MISREPORTED FACT ABOUT MALTESE PLATES. The leading letter is a
246
+ CALENDAR code — the month the annual licence falls due — and is
247
+ routinely described as a regional code. It is not: Malta encodes no
248
+ geography in an ordinary mark at all (see region_encoding). Note the
249
+ consequence for a parse API: the leading letter is the ONE decodable
250
+ field of a Maltese standard mark, and what it decodes to is a renewal
251
+ month, which changes nothing about where or when the vehicle was
252
+ registered.
253
+ table_evidence: secondary-wikipedia
254
+ table_note: >-
255
+ THE RULE IS PRIMARY; THE MAPPING BELOW IS NOT. S.L. 368.02 states THAT
256
+ the first letter stands for the renewal month but does not publish WHICH
257
+ letter means which month — the assignment is presumably administrative.
258
+ The twelve rows below are therefore `secondary-wikipedia` and are the
259
+ only secondary data in this file. They are internally consistent
260
+ (A-L cover January-December, M-X repeat the cycle, Y and Z extend it to
261
+ January and February, exhausting all 26 letters exactly), which is
262
+ corroboration but not a source.
263
+ table_source: "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Malta # revision 1365210379 of 2026-07-21T00:33:53Z, fetched as wikitext 2026-08-02. secondary-wikipedia"
264
+ months:
265
+ - { month: 1, name: January, letters: [A, M, Y] }
266
+ - { month: 2, name: February, letters: [B, N, Z] }
267
+ - { month: 3, name: March, letters: [C, O] }
268
+ - { month: 4, name: April, letters: [D, P] }
269
+ - { month: 5, name: May, letters: [E, Q] }
270
+ - { month: 6, name: June, letters: [F, R] }
271
+ - { month: 7, name: July, letters: [G, S] }
272
+ - { month: 8, name: August, letters: [H, T] }
273
+ - { month: 9, name: September, letters: [I, U] }
274
+ - { month: 10, name: October, letters: [J, V] }
275
+ - { month: 11, name: November, letters: [K, W] }
276
+ - { month: 12, name: December, letters: [L, X] }
277
+ design:
278
+ plate:
279
+ note: >-
280
+ NO PLATE DIMENSIONS EXIST IN MALTESE LAW — a sourced negative, not a
281
+ gap. The Second Schedule requires only that the plate be rectangular
282
+ and "correspond with either diagram No 1 or diagram No 2 shown below";
283
+ the diagrams are bitmaps showing specimen plates reading "MAL 777"
284
+ with no dimensional annotations. No overall size, no character height
285
+ and no stroke width appear anywhere. The 520 x 110 mm commonly quoted
286
+ for Malta is the European convention, not a Maltese requirement, and
287
+ is deliberately NOT recorded here as a fact.
288
+ material: "metal — Second Schedule, verbatim: 'The plate shall be made from metal material.'"
289
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
290
+ foreground: "#000000"
291
+ foreground_note: >-
292
+ Second Schedule, verbatim: "The registration mark, with the exception of
293
+ vintage vehicles and vehicles registered in terms of article 8(4) of the
294
+ Act, shall be formed of black characters and shall be exhibited on white
295
+ reflective material in such a way that the black characters will at all
296
+ times appear on a white background."
297
+ border: { color: "#000000", width: 5, unit: mm, note: "Second Schedule, verbatim: 'The periphery of the plate shall be marked all around by a black border having a stroke width of 5 millimetres.'" }
298
+ security: { watermark: true, note: "Second Schedule: 'There shall be a watermark in the space between the letters and the numbers.' The watermark occupies the printed gap — see format.separator_note" }
299
+ content_restriction: >-
300
+ Second Schedule, verbatim and with its own typo preserved: "The plate on
301
+ which a registration mark is exhibited shall not contain any words,
302
+ letters, numbers, emblems or other marks of any kind other THEN those
303
+ required under these regulations." [sic — "other then"]. So Malta
304
+ forbids dealer legends, national emblems and slogans on the plate by
305
+ express prohibition, which is a stronger position than most.
306
+ band:
307
+ side: left
308
+ color: "#003399"
309
+ hex_basis: observed
310
+ color_spec_munsell: "5, 9 pb 3,4/15,1"
311
+ content: eu-stars+M
312
+ h_min: 98
313
+ w: [40, 50]
314
+ unit: mm
315
+ note: >-
316
+ The best-specified object in Maltese plate law, and the only place it
317
+ gives geometry. Second Schedule, verbatim: "Colours: 1.
318
+ Retro-reflecting blue background (Munsell reference 5, 9 pb 3,4/15,1)
319
+ 2. 12 retro-reflecting yellow stars 3. Retro-reflecting distinguishing
320
+ sign of Malta, of a white colour"; "The blue background shall be not
321
+ less than 98mm in height, with a width of not less than 40 mm and not
322
+ more than 50 mm"; "The centrepoints of the 12 stars shall form a
323
+ circle with a 15 mm radius and the straight forming the apexes of the
324
+ stars shall be 4 mm to 5 mm in length"; "The distinguishing sign of
325
+ Malta shall have a height of 20 mm and a stroke width of between 4 mm
326
+ and 5 mm, and shall appear underneath the circle of stars." Reduced
327
+ proportionally on two-line and motorcycle plates. NOTE the Munsell
328
+ reference: it is a colour-order-system notation, NOT an sRGB value and
329
+ NOT a CIE box, so it constrains a colour without yielding a hex — the
330
+ hex beside it stays `observed`, exactly as the Spanish CIE boxes do.
331
+ The distinguishing sign is the letter M, and it is WHITE by
332
+ specification rather than taking the ground colour — which is the
333
+ opposite of the Greek and Cypriot rule.
334
+ statutory_hook: "S.L. 368.02 reg. 32(2), verbatim: 'Besides the registration mark, the plate shall also bear the international distinguishing sign of Malta in accordance with Council Regulation (EC) No 2411/98 on the recognition in intra-Community traffic of the distinguishing signs of the Member States in which motor vehicles and their trailers are registered.'"
335
+ font:
336
+ name: "not named by any instrument"
337
+ note: >-
338
+ REFUTED SECONDARY CLAIM. Malta is widely said to mandate FE-Schrift.
339
+ No typeface is named anywhere in Maltese plate law — the entire Second
340
+ Schedule was read and its diagram pages rendered as images to check
341
+ for annotations. Unlike Cyprus, which at least publishes drawn
342
+ specimens, Malta publishes neither a name nor a dimensioned drawing.
343
+ The letterforms are therefore, on the face of the law, unconstrained.
344
+ PRD-PLATES §6 posture: the render layer picks a free face and records
345
+ the substitution, because there is no statutory drawing to derive from.
346
+ license: "n/a — nothing prescribed"
347
+ rear_differs: false
348
+ region_encoding: none
349
+ region_encoding_note: >-
350
+ NONE IN AN ORDINARY MARK — a sourced negative. Malta encodes no geography
351
+ in the standard series; the leading letter is a renewal MONTH (see
352
+ month_encoding), which is the fact most often misreported as a regional
353
+ code. The ONLY geographic encoding anywhere in Maltese plate law is the
354
+ taxi M/G suffix for Malta and Gozo (see mt-taxi-2010), and its lapsed
355
+ predecessor pair TY/WY.
356
+ sources:
357
+ - "https://legislation.mt/eli/sl/368.2/eng # S.L. 368.02, consolidated to 23-01-2026 (PDF: https://legislation.mt/getpdf/6980741263aaee247463a137): reg. 30 + First Schedule (the Standard Alphanumeric Format and the renewal-month rule); reg. 31 (letter blocks); reg. 32(2) (the EU distinguishing sign); reg. 34 + Second Schedule (plate specification, colours, border, watermark, band geometry). Accessed 2026-08-02"
358
+ - "https://legislation.mt/eli/ln/2004/114/eng # L.N. 114 of 2004, Vehicles Identification Plates Regulations — THE PERIOD START: 'These regulations shall come into force on the 9th March 2004', and the First Schedule's first published statement of the three-letter/three-digit format"
359
+ - "https://legislation.mt/eli/ln/2004/476/eng # L.N. 476 of 2004, in force 1-5-2004: introduced the EU band in its Second Schedule and revoked L.N. 114 of 2004; reg. 52 also deleted the plate rules from the 1994 Motor Vehicles Regulations"
360
+ - "https://legislation.mt/eli/ln/2009/198/eng # L.N. 198 of 2009: 'deemed to have come into force on the 1st January, 2009 save for sub-regulation (3) of regulation 6 which shall come into force on the 1st August, 2009'; reg. 45 revoked L.N. 476 of 2004. Carried the format and band forward unchanged"
361
+ - "https://legislation.mt/eli/cap/368/eng # Cap. 368, Motor Vehicles Registration and Licensing Act (Act X of 1994, in force 1-1-1994): art. 20 the regulation-making power"
362
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Malta # secondary-wikipedia, ONE item only: the letter-to-month mapping table in month_encoding.months, which no instrument publishes. Revision 1365210379 of 2026-07-21T00:33:53Z"
363
+ notes: >-
364
+ THE CURRENT MALTESE SERIES. PERIOD START 9 MARCH 2004, the commencement of
365
+ L.N. 114 of 2004, which is the first instrument ever to prescribe a plate
366
+ FORMAT in Malta. A GRANULARITY NOTE THE SCHEMA FORCES AND THAT IS WORTH
367
+ STATING: the EU band did not arrive with that instrument but with L.N. 476
368
+ of 2004 on 1 MAY 2004, Malta's EU accession day — so there was a
369
+ seven-week window in which this exact format was issued WITHOUT the band.
370
+ That is a genuine design difference and under PRD-PLATES §2.3 it would
371
+ merit its own series, but `period` is modelled in INTEGER YEARS and both
372
+ dates fall in 2004, so the two are indistinguishable in this schema and
373
+ are recorded as one series with the sequence written into the sources
374
+ above. The three-letter/three-digit shape itself is older than 2004 —
375
+ administratively from about 1995 (see mt-standard-1995) — so 2004 dates
376
+ the LEGISLATION, not the look. NOTHING IN THE STRING DATES A MALTESE
377
+ PLATE: allocation is expressly random.
378
+
379
+ # =========================================================================
380
+ # TAXIS — the only geography in Maltese plate law, and a live conflict.
381
+ # =========================================================================
382
+ - id: mt-taxi-2010
383
+ class: taxi
384
+ categories: [car]
385
+ period: { start: 2010 }
386
+ period_evidence: enacted-commencement
387
+ matching: strict
388
+ format:
389
+ pattern: "TAXI 999 L"
390
+ regex: '\ATAXI \d{3} [A-Z]\z'
391
+ regex_strict: '\ATAXI \d{3} [GM]\z'
392
+ charset:
393
+ notes: "the suffix is M for Malta or G for Gozo and nothing else; regex_strict carries that closed pair, which `regex` cannot because the lint's generator emits all 26 letters for an L"
394
+ digits: "001 onwards; see progression for the three separate ranges"
395
+ progression: >-
396
+ S.L. 499.59 reg. 24 splits the numbering three ways, verbatim: taxis
397
+ already licensed in MALTA when the regulations commenced take "three
398
+ numbers from '001' to '200' followed by the letter 'M'"; taxis licensed
399
+ in GOZO take "three numbers commencing from '001' onwards followed by
400
+ the letter 'G'"; and taxis granted a NEW Malta licence after
401
+ commencement take "three numbers commencing from '201' onwards followed
402
+ by the letter 'M'". So on the Malta side the number band 001-200 versus
403
+ 201+ separates pre- from post-2010 licences, which is a genuine age
404
+ signal — the only one in the Maltese system.
405
+ design:
406
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
407
+ foreground: "#000000"
408
+ note: >-
409
+ No distinct taxi PLATE colour is prescribed. The Second Schedule's
410
+ black-on-white rule excepts only vintage and art. 8(4) vehicles, so
411
+ taxis take the ordinary colours. The red/black distinction that exists
412
+ for Maltese taxis is a DOOR MARKING, not a plate: S.L. 499.59 reg. 24(5)
413
+ requires the progressive number "painted by the licence holder in black
414
+ on a white background in respect of taxis licensed to be used only in
415
+ Malta and in red on a white background in respect of taxis licensed to
416
+ be used only in Gozo", 75 mm high and not more than 60 mm wide. Recorded
417
+ here precisely so a render layer does not colour the plate.
418
+ border: { color: "#000000", width: 5, unit: mm }
419
+ band: { side: left, color: "#003399", hex_basis: observed, content: eu-stars+M }
420
+ region_encoding: inline
421
+ region_encoding_mechanism: >-
422
+ THE ONLY GEOGRAPHIC ENCODING IN MALTESE PLATE LAW. Suffix M = the island
423
+ of Malta; suffix G = Gozo. Two rows, so inline rather than a decode file.
424
+ Its lapsed predecessor was a PREFIX pair on the ordinary format: [x]TY for
425
+ taxicars in Malta and [x]WY for taxicars in Gozo (L.N. 476 of 2004 reg.
426
+ 33(1)(vii)-(viii), carried into L.N. 198 of 2009 reg. 31(1)(vii)-(viii)),
427
+ replaced by TAXI M / TAXI G by L.N. 110 of 2011.
428
+ region_codes:
429
+ - { code: M, area: "Malta (island)" }
430
+ - { code: G, area: "Gozo" }
431
+ sources:
432
+ - "https://legislation.mt/eli/sl/499.59/eng # S.L. 499.59, Taxi Services Regulations (L.N. 369 of 2010), reg. 24(1)-(3): the TAXI + three digits + M/G form and the three numbering bands; reg. 24(5) the door-marking rule. Commencement stated on the consolidation: 1st November 2010; 1st May 2011; 1st November 2011. PDF: https://legislation.mt/getpdf/6131f456a77e7700c82a9fb7"
433
+ - "https://legislation.mt/eli/sl/368.2/eng # S.L. 368.02 reg. 31(1)(v)-(vi) and its First Schedule, which defers to the Taxi Services Regulations — 'Composed as prescribed in the Taxi Services Regulations. (S.L. 499.59)' — and sets the taxi plate fee at EUR 60 per pair"
434
+ notes: >-
435
+ A LIVE CONFLICT BETWEEN TWO INSTRUMENTS, RECORDED AND RESOLVED RATHER THAN
436
+ AVERAGED. S.L. 368.02 reg. 31(1)(v) describes the mark as "the letters
437
+ TAXI M followed by three numerical figures" — letter BEFORE the digits.
438
+ S.L. 499.59 reg. 24(1) describes it as "TAXI" followed by three numbers
439
+ "followed by the letter 'M'" — letter AFTER the digits. They cannot both
440
+ be right. The resolution is internal to the instruments: the First
441
+ Schedule to S.L. 368.02 expressly defers the taxi mark's composition to
442
+ S.L. 499.59, so the Taxi Services Regulations govern and the real printed
443
+ form is TAXI 123 M. This file follows that, and records the conflict so a
444
+ verifier meeting reg. 31(1)(v) does not think the dataset is wrong.
445
+ PERIOD: 2010, the commencement of S.L. 499.59; the regulations carry three
446
+ commencement dates (1-11-2010, 1-5-2011, 1-11-2011) for different Parts
447
+ and the plate provision is not separately dated among them, so the
448
+ earliest is taken and the ambiguity is recorded here.
449
+
450
+ # =========================================================================
451
+ # THE HIRE-OR-REWARD FAMILY — one recall-only union over fifteen blocks.
452
+ # =========================================================================
453
+ - id: mt-hire-reward-2009
454
+ class: taxi
455
+ categories: [bus, coach, van, truck, car]
456
+ period: { start: 2009 }
457
+ period_evidence: enacted-commencement
458
+ matching: recall-only
459
+ format:
460
+ pattern: "LLLL 999"
461
+ regex: '\A[A-Z]{3,4} \d{3}\z'
462
+ pattern_note: >-
463
+ A UNION OVER THE reg. 31(1) BLOCKS, hence recall-only. The family spans
464
+ three-letter fixed blocks (HRS, TEY, MHY, CSH) and four-letter
465
+ leading-letter-plus-block marks ([x]BUS, [x]PY, [x]LY, [x]XY, [x]QZ,
466
+ [x]HQ, [x]OY, [x]RY) plus the four-letter CABS, so the regex accepts
467
+ three or four letters and three digits. A match says only "this string
468
+ has the shape of a Maltese hire-or-reward mark" — it cannot tell you
469
+ which block, and it will also match plenty of strings that are not in
470
+ any block. The blocks themselves are enumerated, verbatim and with their
471
+ meanings, in the file-level letter_blocks section; that table is the
472
+ real content and this series is the matcher for it. Taxis are excluded
473
+ here and modelled separately because their form differs (mt-taxi-2010).
474
+ design:
475
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
476
+ foreground: "#000000"
477
+ border: { color: "#000000", width: 5, unit: mm }
478
+ band: { side: left, color: "#003399", hex_basis: observed, content: eu-stars+M }
479
+ note: "no distinct colour is prescribed for any hire-or-reward class — the Second Schedule's black-on-white rule excepts only vintage and art. 8(4) vehicles"
480
+ region_encoding: none
481
+ sources:
482
+ - "https://legislation.mt/eli/sl/368.2/eng # S.L. 368.02 reg. 31(1), every block quoted verbatim in letter_blocks.hire_or_reward"
483
+ - "https://legislation.mt/eli/ln/2011/110/eng # L.N. 110 of 2011 s.6: the 2011 rewrite (CY->PY, MY->LY, SY->XY, VY->GV, GY deleted, TY/WY->TAXI M/TAXI G, CABS added)"
484
+ - "https://legislation.mt/eli/ln/2018/139/eng # L.N. 139 of 2018 (Government Gazette 19,984, 27-04-2018) s.4: BY->BUS, and the addition of TEY, MHY and CSH"
485
+ notes: >-
486
+ MALTA'S PUBLIC-TRANSPORT AND HIRE MARKS, as one recall-only series over a
487
+ published block list. CLASS CAVEAT, and it is now the THIRD time this wave
488
+ has hit it: `_meta/classes.yml` has no class for "public service /
489
+ hire-or-reward", so `taxi` is recorded as the nearest member and badly
490
+ understates a family that is mostly buses, coaches, hearses, trolleys and
491
+ car-sharing vehicles. Greece's Δ.Χ. and Cyprus's yellow class have exactly
492
+ the same problem. A `public-service` class is flagged as a vocabulary gap
493
+ from all three files. PERIOD: 2009, the commencement of the instrument
494
+ that carries the current reg. 31; individual blocks arrived and lapsed at
495
+ dated points recorded in letter_blocks, and the 2004-2009 predecessor list
496
+ is recorded there too under `lapsed` rather than authored as its own
497
+ series, because its plates are on the same base design.
498
+
499
+ # =========================================================================
500
+ # OFFICIAL SERIES — GVN/GVH/GVP/GVA, and the N1 [x]GV trap.
501
+ # =========================================================================
502
+ - id: mt-government-2009
503
+ class: government
504
+ categories: [car, van, truck, bus]
505
+ period: { start: 2009 }
506
+ period_evidence: enacted-commencement
507
+ matching: strict
508
+ format:
509
+ pattern: "GVL 999"
510
+ regex: '\AGV[A-Z] \d{3}\z'
511
+ regex_strict: '\AGV[AHNP] \d{3}\z'
512
+ charset:
513
+ notes: >-
514
+ The four official three-letter blocks of reg. 31(2)-(4): GVN
515
+ (Government Department, other vehicles), GVH (Government Department,
516
+ HEAVY vehicles), GVP (Police Department), GVA (Armed Forces of Malta).
517
+ regex_strict carries exactly those four; `regex` is the GV+any-letter
518
+ shape, which is deliberately looser because reg. 31(7) puts ordinary
519
+ N1 small vans on a [letter]GV mark and a consumer needs to see the
520
+ collision rather than have it hidden.
521
+ design:
522
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
523
+ foreground: "#000000"
524
+ border: { color: "#000000", width: 5, unit: mm }
525
+ band: { side: left, color: "#003399", hex_basis: observed, content: eu-stars+M }
526
+ note: "no distinct colour: Malta marks officialdom by letter block only, unlike Cyprus, which gives Ministry vehicles an orange plate"
527
+ region_encoding: none
528
+ sources:
529
+ - "https://legislation.mt/eli/sl/368.2/eng # S.L. 368.02 reg. 31(2) (GVH heavy / GVN other), reg. 31(3) (GVP police), reg. 31(4) (GVA Armed Forces), all quoted verbatim in letter_blocks.official; reg. 31(7) the [x]GV N1 rule"
530
+ notes: >-
531
+ MALTESE OFFICIAL MARKS. TWO TRAPS, both sourced. FIRST: GVH is GOVERNMENT
532
+ HEAVY VEHICLES, not the Department of Health — the "health" reading is a
533
+ persistent secondary error and there is no health block at all. SECOND,
534
+ and subtler: reg. 31(7) allots "a letter followed by the letters GV and
535
+ three numbers" to N1 vehicles with not more than two seats, so an ordinary
536
+ small van carries a mark like XGV 123 that LOOKS official and is not. The
537
+ discriminator is position — the government blocks are three letters
538
+ beginning GV (GVN 123), the van rule is a letter then GV (XGV 123) — and
539
+ it is why this series' `regex` is written GV + one letter rather than as
540
+ an alternation: a parse API must be able to see both readings of a
541
+ GV-containing Maltese mark and rank them, not have one silently hidden.
542
+ Police and the Armed Forces are inside this scheme, unlike Cyprus, whose
543
+ Καν. 6(21)(β) expressly excludes both from its government plate.
544
+
545
+ - id: mt-diplomatic-2009
546
+ class: diplomatic
547
+ categories: [car, van]
548
+ period: { start: 2009 }
549
+ period_evidence: enacted-commencement
550
+ matching: strict
551
+ format:
552
+ pattern: "CDL 999"
553
+ regex: '\ACD[A-Z] \d{3}\z'
554
+ charset: { notes: "reg. 31(5), verbatim: 'the letters CD followed by another letter and three numbers'. The trailing letter is unconstrained, so `regex` is already the sourced grammar and no strict twin is needed" }
555
+ design:
556
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
557
+ foreground: "#000000"
558
+ border: { color: "#000000", width: 5, unit: mm }
559
+ band: { side: left, color: "#003399", hex_basis: observed, content: eu-stars+M }
560
+ region_encoding: none
561
+ sources:
562
+ - "https://legislation.mt/eli/sl/368.2/eng # S.L. 368.02 reg. 31(5)"
563
+ notes: >-
564
+ DIPLOMATIC REPRESENTATIONS IN MALTA. Note that Malta, unlike Cyprus and
565
+ Spain, gives diplomatic vehicles NO distinct colour — the mark is the only
566
+ signal. No per-mission decode is published: the trailing letter is not
567
+ stated to encode the mission, and this file makes no such claim.
568
+
569
+ - id: mt-diplomatic-staff-2009
570
+ class: consular
571
+ categories: [car, van]
572
+ period: { start: 2009 }
573
+ period_evidence: enacted-commencement
574
+ matching: strict
575
+ format:
576
+ pattern: "DMS 999"
577
+ regex: '\ADMS \d{3}\z'
578
+ charset: { notes: "reg. 31(6), verbatim: 'the letters DMS followed by three numbers'" }
579
+ design:
580
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
581
+ foreground: "#000000"
582
+ border: { color: "#000000", width: 5, unit: mm }
583
+ band: { side: left, color: "#003399", hex_basis: observed, content: eu-stars+M }
584
+ region_encoding: none
585
+ sources:
586
+ - "https://legislation.mt/eli/sl/368.2/eng # S.L. 368.02 reg. 31(6)"
587
+ notes: >-
588
+ STAFF OF DIPLOMATIC MISSIONS — a separate block from the CD mark of the
589
+ missions themselves, which is a distinction many jurisdictions do not
590
+ draw. CLASS CAVEAT: recorded as `consular` because the controlled
591
+ vocabulary distinguishes only diplomatic from consular and DMS is neither
592
+ exactly — it is mission STAFF rather than a consular post. Introduced with
593
+ L.N. 198 of 2009; it does not appear in the 2004 list.
594
+
595
+ # =========================================================================
596
+ # VINTAGE — two instrument-dated designs, and the 2017 folklore corrected.
597
+ # =========================================================================
598
+ - id: mt-vintage-green-2015
599
+ class: historic
600
+ categories: [car, van, truck, bus, motorcycle]
601
+ period: { start: 2015, end: 2018 }
602
+ period_evidence: instrument-dated-both-ends
603
+ matching: strict
604
+ format:
605
+ pattern: "LLL 999"
606
+ regex: '\A[A-Z]{3} \d{3}\z'
607
+ charset: { notes: "the ordinary Standard Alphanumeric mark; vintage status changes the plate's COLOURS, not its grammar" }
608
+ design:
609
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
610
+ foreground: "#007A33"
611
+ foreground_note: "L.N. 178 of 2015 s.17, verbatim: 'The plate on which the registration mark of a vintage vehicle is exhibited shall carry green characters.' The ground is not restated and remains the Second Schedule's white."
612
+ border: { color: "#000000", width: 5, unit: mm }
613
+ band: { side: left, color: "#003399", hex_basis: observed, content: eu-stars+M }
614
+ region_encoding: none
615
+ sources:
616
+ - "https://legislation.mt/eli/ln/2015/178/eng # L.N. 178 of 2015 (Government Gazette 19,436, 05-06-2015) s.17: the GREEN characters rule; s.16 set the changeover fee at EUR 17.50 per plate 'for the replacement of vintage vehicle plates carrying black characters with new plates carrying green characters' — which also establishes that vintage plates were ORDINARY BLACK ON WHITE before 2015"
617
+ - "https://legislation.mt/eli/ln/2018/139/eng # L.N. 139 of 2018 s.7(b): THE END — substitutes the green rule with the silver-on-black rule"
618
+ - "https://legislation.mt/eli/cap/368/eng # Cap. 368 art. 25 (added by Act XIII of 2015): the vintage regime — 30 years or older from date of manufacture, a vintage vehicle classification committee, and 'Vintage vehicles which are older than fifty years shall be exempt from the payment of registration tax when they are registered for the first time in Malta'"
619
+ notes: >-
620
+ THE GREEN VINTAGE PLATE, 2015-2018 — a design that most secondary accounts
621
+ of Malta omit entirely, jumping straight from black-on-white to
622
+ silver-on-black and dating the latter to 2017. Both halves of that are
623
+ wrong and both are corrected from the instruments: the intermediate design
624
+ existed, it was green characters, and the silver-on-black change is 2018.
625
+ Note also what L.N. 178 of 2015 s.16 incidentally proves by prescribing a
626
+ swap fee from BLACK to GREEN plates: before June 2015 there was no special
627
+ vintage plate at all. This series is instrument-dated at both ends, which
628
+ is why it is one of the few in this wave carrying
629
+ `instrument-dated-both-ends`.
630
+
631
+ - id: mt-vintage-silver-2018
632
+ class: historic
633
+ categories: [car, van, truck, bus, motorcycle]
634
+ period: { start: 2018 }
635
+ period_evidence: enacted-commencement
636
+ matching: strict
637
+ format:
638
+ pattern: "LLL 999"
639
+ regex: '\A[A-Z]{3} \d{3}\z'
640
+ charset: { notes: "the ordinary Standard Alphanumeric mark; only the colours differ" }
641
+ design:
642
+ background: { color: "#000000", finish: non-retroreflective, hex_basis: observed }
643
+ foreground: "#C0C0C0"
644
+ foreground_note: >-
645
+ L.N. 139 of 2018 s.7(b), verbatim, substituting the 2015 wording: 'The
646
+ plate on which the registration mark of a vintage vehicle is exhibited
647
+ shall carry silver characters on a black background.' This is the one
648
+ Maltese plate whose GROUND colour changes, and the Second Schedule
649
+ confirms it: the vintage and art. 8(4) plates keep 'the same dimensions
650
+ and composition of all other registration plates' except for 'the colour
651
+ of the characters, the periphery of the plate and, in the case of
652
+ vintage vehicles, the colour of the plate'.
653
+ border: { color: "#C0C0C0", width: 5, unit: mm, note: "the Second Schedule excepts 'the periphery of the plate' from the ordinary rule for these classes, so the border is not black here; its colour is not separately stated and silver is inferred from the character colour — recorded as an inference, not a citation" }
654
+ band: { side: left, color: "#003399", hex_basis: observed, content: eu-stars+M }
655
+ region_encoding: none
656
+ sources:
657
+ - "https://legislation.mt/eli/ln/2018/139/eng # L.N. 139 of 2018 (Government Gazette 19,984, 27-04-2018) s.7(b): the silver-on-black rule; s.6 updated the swap-fee wording from black->green to green->silver"
658
+ - "https://legislation.mt/eli/sl/368.2/eng # S.L. 368.02 Second Schedule as consolidated (carries the silver-on-black text) and reg. 6D(7), added by L.N. 178 of 2015 and substituted by L.N. 160 of 2025: 'The registration mark allotted by the Authority to vehicles which are registered as vintage vehicles in accordance with article 25 of the Act is to be displayed on a vehicle registration plate having such specifications as established in the Second Schedule'"
659
+ - "https://legislation.mt/eli/cap/368/eng # Cap. 368 art. 25 (Act XIII of 2015, amended by Act XVIII of 2021 and Act IX of 2025): the 30-year threshold and the 50-year tax exemption"
660
+ notes: >-
661
+ THE CURRENT MALTESE VINTAGE PLATE — silver on black, from L.N. 139 of 2018
662
+ (gazetted 27-04-2018), NOT 2017 as commonly stated. Eligibility is a
663
+ ROLLING 30-year rule from date of manufacture under Cap. 368 art. 25, with
664
+ a classification committee — which is worth contrasting with Cyprus, whose
665
+ black historic plate is keyed to a FIXED calendar date (registration on or
666
+ before 31-12-1974) and whose eligible population therefore shrinks every
667
+ year while Malta's grows.
668
+
669
+ # =========================================================================
670
+ # THE WEEKEND / HIGH-EMISSION PLATE — a genuine `seasonal` class.
671
+ # =========================================================================
672
+ - id: mt-weekend-2015
673
+ class: seasonal
674
+ categories: [car, motorcycle]
675
+ period: { start: 2015 }
676
+ period_evidence: enacted-commencement
677
+ matching: strict
678
+ format:
679
+ pattern: "LLL 999"
680
+ regex: '\A[A-Z]{3} \d{3}\z'
681
+ charset: { notes: "the ordinary Standard Alphanumeric mark; the restriction is marked by character colour alone" }
682
+ design:
683
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
684
+ foreground: "#CE1126"
685
+ foreground_note: "Second Schedule, verbatim: 'The plate on which the registration mark of a vehicle registered for use on the road in Malta solely and exclusively on Saturdays, Sundays, national holidays and other public holidays in terms of article 8(4) of the Act shall carry red characters.'"
686
+ border: { color: "#CE1126", width: 5, unit: mm, note: "as with the vintage plate, the Second Schedule excepts 'the periphery of the plate' for this class; the colour is inferred from the characters and is not separately stated" }
687
+ band: { side: left, color: "#003399", hex_basis: observed, content: eu-stars+M }
688
+ region_encoding: none
689
+ sources:
690
+ - "https://legislation.mt/eli/cap/368/eng # Cap. 368 art. 8(4): the restricted-use registration category"
691
+ - "https://legislation.mt/eli/ln/2015/178/eng # L.N. 178 of 2015: added S.L. 368.02 reg. 6C and the Second Schedule's red-characters rule"
692
+ - "https://legislation.mt/eli/sl/368.2/eng # S.L. 368.02 reg. 6C as amended by L.N. 265 of 2022 and L.N. 21 of 2026: M1 vehicles at or above 200 g/km CO2 NEDC / 220 g/km WLTP, and motorcycles of 801cc and above"
693
+ notes: >-
694
+ A RESTRICTED-USE PLATE MARKED ONLY BY THE COLOUR OF ITS CHARACTERS, and a
695
+ genuinely good fit for the `seasonal` class in _meta/classes.yml — which
696
+ was written for German Saisonkennzeichen but describes this exactly: a
697
+ validity-window plate. Malta's window is weekly rather than annual. The
698
+ regime is an EMISSIONS measure: reg. 6C confines it to M1 vehicles at or
699
+ above 200 g/km CO2 (NEDC) or 220 g/km (WLTP), and to motorcycles of 801cc
700
+ and above. A DISCREPANCY BETWEEN ACT AND REGULATION, recorded not
701
+ reconciled: Cap. 368 art. 8(4) states the window as including "Fridays as
702
+ from 18.00 onwards", while reg. 6C says "Fridays" and separately prohibits
703
+ parking "on Friday before 18:00hrs". Both texts are in force; a consumer
704
+ needing the exact window must read both.
705
+
706
+ # =========================================================================
707
+ # PERSONALISED AND SPECIAL FORMATS — the outer legal bound, recall-only.
708
+ # =========================================================================
709
+ - id: mt-personalised-2011
710
+ class: personalized
711
+ categories: [car, van, truck, bus, motorcycle]
712
+ period: { start: 2011 }
713
+ period_evidence: enacted-commencement
714
+ matching: recall-only
715
+ format:
716
+ pattern: "LLL999"
717
+ regex: '\A[A-Z0-9]{1,9}\z'
718
+ pattern_note: >-
719
+ THE OUTER LEGAL BOUND, hence recall-only, and it is genuinely this wide.
720
+ S.L. 368.02 reg. 30(2), verbatim: "The registration mark may take any of
721
+ the special numeric, special alphabetical or special alphanumeric
722
+ formats specified in the First Schedule and can be composed of up to a
723
+ MAXIMUM OF NINE CHARACTERS." The First Schedule defines them: Special
724
+ Numeric Format, "Composed solely of any Arabic numeral"; Special
725
+ Alphabetical Format, "Composed of any character of the Roman Alphabet";
726
+ Special Numeric and Alphabetical, "Composed of a mixture of numeric and
727
+ alphabetical". So one to nine characters, letters and/or digits, in any
728
+ arrangement. A match here is a shape hit and nothing more — this regex
729
+ subsumes almost every other Maltese series and must never be used to
730
+ assert that a string IS a Maltese plate. `pattern` shows a
731
+ representative six-character form only.
732
+ progression: "none — owner-chosen"
733
+ design:
734
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
735
+ foreground: "#000000"
736
+ border: { color: "#000000", width: 5, unit: mm }
737
+ band: { side: left, color: "#003399", hex_basis: observed, content: eu-stars+M }
738
+ region_encoding: none
739
+ region_encoding_note: "none, and note that a personalised mark DEFEATS the renewal-month rule of the standard series, since the First Schedule ties that rule to the Standard Alphanumeric Format (Random) type only"
740
+ sources:
741
+ - "https://legislation.mt/eli/sl/368.2/eng # S.L. 368.02 reg. 30(2)-(4) and the First Schedule (substituted by L.N. 195 of 2011, amended by L.N. 110 of 2011, 178 of 2015 and 139 of 2018): the special formats, the nine-character maximum, the fees, and the transfer rules"
742
+ - "https://legislation.mt/eli/ln/2011/195/eng # L.N. 195 of 2011: substituted the First Schedule wholesale — the instrument that dates this series"
743
+ notes: >-
744
+ MALTESE SPECIAL AND PERSONALISED MARKS. Fees, from the First Schedule and
745
+ recorded because they are the clearest evidence of the tiering: Standard
746
+ Alphanumeric (Random) EUR 70 per pair; Standard Alphanumeric
747
+ (Personalised), "where the choice of the characters and numerals shall lie
748
+ with the person requesting the Numbers", EUR 200 per pair; each of the
749
+ three Special formats EUR 1,500 per pair; duplicate plates EUR 35 each.
750
+ TRANSFERABILITY IS THE INTERESTING RULE, reg. 30(4): random marks are NOT
751
+ transferable independently of the vehicle, PERSONALISED marks ARE, and
752
+ other marks transfer on payment of EUR 466 with exemptions for transfers
753
+ causa mortis, between spouses, ascendants or direct collaterals, and
754
+ between a company and its director or majority shareholder. A RESIDUAL
755
+ GAP, recorded: reg. 30(3) provides that marks "shall be made available to
756
+ the public in such manner as the Authority may from time to time establish
757
+ by means of a NOTICE IN THE GAZETTE", so which specific marks are released
758
+ is administrative and is not on legislation.mt. The nine-character maximum
759
+ also means Malta is the one jurisdiction in this wave whose statutory
760
+ bound is materially wider than its ordinary series, which is exactly what
761
+ `regex_statutory` exists for elsewhere — here the width is so great that a
762
+ separate recall-only series is the honest encoding rather than a twin on
763
+ mt-standard-2004.
764
+
765
+ # =========================================================================
766
+ # THE PRE-LEGISLATION SERIES — administrative, hence recall-only.
767
+ # =========================================================================
768
+ - id: mt-standard-1995
769
+ class: standard
770
+ categories: [car, van, truck, bus, motorcycle]
771
+ period: { start: 1995, end: 2004 }
772
+ period_evidence: secondary-dated
773
+ matching: recall-only
774
+ format:
775
+ pattern: "LLL 999"
776
+ regex: '\A[A-Z]{3} ?\d{3}\z'
777
+ pattern_note: "recall-only because no instrument prescribed a format before 9-3-2004; see the file header. The optional gap reflects that no separator was prescribed either"
778
+ design:
779
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
780
+ foreground: "#000000"
781
+ band: { side: none, note: "the EU band arrives with L.N. 476 of 2004 on 1-5-2004; it cannot have been prescribed for this series" }
782
+ region_encoding: none
783
+ sources:
784
+ - "https://legislation.mt/eli/ln/1994/128/eng # L.N. 128 of 1994 (Motor Vehicles Regulations 1994, S.L. 65.11) regs. 31-32 — THE SOURCED NEGATIVE: the mark and all character dimensions are 'determined from time to time by the Commissioner of Police on the advice of the Traffic Control Board'. No format is prescribed. PDF: https://legislation.mt/getpdf/60225bddbc8272018c134581"
785
+ - "https://legislation.mt/eli/ln/2004/114/eng # L.N. 114 of 2004 — the END of the unlegislated era: the first published format, in force 9-3-2004"
786
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Malta # secondary-wikipedia: the c.1995 introduction of the three-letter/three-digit system. Revision 1365210379 of 2026-07-21T00:33:53Z. NO primary exists for this boundary"
787
+ notes: >-
788
+ THE THREE-LETTER FORMAT BEFORE IT WAS LEGISLATED. Same shape as
789
+ mt-standard-2004 and no instrument behind it: under L.N. 128 of 1994 the
790
+ Commissioner of Police set the format administratively. The 1995 start is
791
+ a secondary date with no gazette reference and should be treated as
792
+ observational. The end, by contrast, IS instrument-dated — 9 March 2004,
793
+ when L.N. 114 of 2004 first prescribed the format in law — and the two
794
+ entries overlap in 2004 for that reason, with distinct notes. A consumer
795
+ cannot distinguish a 1998 plate from a 2005 one by its STRING; the
796
+ discriminator is the EU band on the physical plate.
797
+
798
+ - id: mt-standard-1979
799
+ class: standard
800
+ categories: [car, van, truck, bus, motorcycle]
801
+ period: { start: 1979, end: 1995 }
802
+ period_evidence: secondary-dated
803
+ matching: recall-only
804
+ format:
805
+ pattern: "L-9999"
806
+ regex: '\A[A-Z][- ]?\d{1,4}\z'
807
+ pattern_note: "one letter and up to four digits, reported as printed with a hyphen. recall-only: no instrument, no letter set, no digit-count rule. The separator class accepts a hyphen or a space and the quantifier makes it optional, because nothing prescribes it"
808
+ design:
809
+ background: { color: "#FFFFFF", hex_basis: observed }
810
+ foreground: "#000000"
811
+ band: { side: none }
812
+ note: "secondary sources describe background colours varying by use in this era — white for private and diplomatic, yellow for rental, red for taxi and bus. NO INSTRUMENT SUPPORTS THIS: the colours were searched for across Cap. 368, S.L. 368.02, L.N. 198/2009, L.N. 476/2004 and L.N. 128/1994 with zero hits. Recorded as an unsourced secondary description and NOT as a design claim; the hexes above are the private-vehicle case only"
813
+ region_encoding: none
814
+ sources:
815
+ - "https://legislation.mt/eli/ln/1994/128/eng # L.N. 128 of 1994 regs. 31-32 — the delegating provision that explains why no format instrument exists for this era"
816
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Malta # secondary-wikipedia: the 1979-1995 one-letter/four-digit format written with a hyphen, and the by-use colour scheme recorded above as unsourced. Revision 1365210379 of 2026-07-21T00:33:53Z"
817
+ notes: >-
818
+ THE LETTER-AND-FOUR-DIGITS ERA. Entirely secondary and entirely
819
+ administrative. Recorded because the shape is distinctive and a parse API
820
+ benefits from recognising it, not because any of its boundaries are
821
+ established. Secondary accounts also attach class meanings to the leading
822
+ letter in this era (X for rental, Y for taxis and buses, P and Q for
823
+ scooters and motorcycles); those are recorded here as reported and are
824
+ NOT authored into the letter_blocks table, which contains only blocks
825
+ quoted from instruments.
826
+
827
+ - id: mt-standard-1952
828
+ class: standard
829
+ categories: [car, van, truck, bus, motorcycle]
830
+ period: { start: 1952, end: 1979 }
831
+ period_evidence: secondary-dated
832
+ matching: recall-only
833
+ format:
834
+ pattern: "99999"
835
+ regex: '\A\d{1,5}\z'
836
+ pattern_note: "purely numeric, up to five digits. recall-only and deliberately wide: no instrument, and the number certainly grew in width over the era rather than being fixed at five"
837
+ design:
838
+ background: { color: "#000000", hex_basis: observed }
839
+ foreground: "#FFFFFF"
840
+ band: { side: none }
841
+ note: "secondary sources describe a black ground for private vehicles in this era, with yellow for rental and red for taxi and bus. Unsourced — see mt-standard-1979.design.note; the hexes record the private case only and are `observed` in the weakest sense"
842
+ region_encoding: none
843
+ sources:
844
+ - "https://legislation.mt/eli/ln/1994/128/eng # L.N. 128 of 1994 — repealed the Motor Vehicles Regulations 1948 that governed the start of this era, and itself prescribed no format"
845
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Malta # secondary-wikipedia: the five-digit numeric era, c.1952-1979. Revision 1365210379 of 2026-07-21T00:33:53Z"
846
+ notes: >-
847
+ THE NUMERIC ERA. The weakest-evidenced series in this file and marked as
848
+ such at every field: no instrument, no dated boundary, no sourced colour.
849
+ It is authored rather than omitted because a bare numeric string is
850
+ otherwise unattributable and a parse API asking "could this be Maltese?"
851
+ deserves a shape to match, clearly labelled recall-only. PRE-1952 MALTA IS
852
+ NOT MODELLED: the Motor Vehicles Regulations 1948 and the calesse-era
853
+ registrations that secondary sources mention for the 19th century are L4
854
+ historical depth under PRD-PLATES §7 and no primary was consulted.