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,888 @@
1
+ # plates/es.yml — Spain (PRD-PLATES gate L0 pilot; PROVINCIAL-HISTORY REDATE
2
+ # PASS, 2026-08-02, to the L1 evidence standard).
3
+ #
4
+ # EVERY format, colour and letter-exclusion claim for the CURRENT series comes
5
+ # from Real Decreto 2822/1998 (Reglamento General de Vehículos) ANEXO XVIII,
6
+ # read in BOTH texts, because they differ and the difference IS the era
7
+ # boundary:
8
+ #
9
+ # * ORIGINAL text, BOE-A-1999-1826, in force 26-07-1999 — its Anexo XVIII
10
+ # I.A.a) still describes the PROVINCIAL ordinary-car system
11
+ # (province contraseña + 4 digits + 1-2 letters), while I.A.b)-d) and all
12
+ # of I.B/I.C already use the modern "prefix letter + 4 digits + 3 letters"
13
+ # shape. RD 2822/1998's own preamble states the novelty: "la supresión de
14
+ # las siglas de la provincia en todas las placas de matrícula, a excepción
15
+ # de las ordinarias de los vehículos automóviles".
16
+ # * ORDEN de 15 de septiembre de 2000, BOE-A-2000-16805, IN FORCE
17
+ # 17-09-2000 — replaces I.A.a) wholesale with the 4-digits + 3-letters
18
+ # national series AND adds the blue EU band (Cuadro 5). Its stated reason:
19
+ # "El sistema actual de numeración ... está próximo a agotarse en las
20
+ # provincias de Madrid y Barcelona".
21
+ # * CONSOLIDATED text (BOE-A-1999-1826-consolidado) — current wording,
22
+ # including the modern additions (decorative geometric designs permitted;
23
+ # ISO/IEC 30116:2016 OCR quality).
24
+ #
25
+ # This settles the "Spanish 2000 cutover" that PRD-PLATES §5.3 flags as a
26
+ # folklore-prone boundary: the instrument is dated, published and its entry
27
+ # into force is stated by BOE itself as 17-09-2000. No averaging required.
28
+ #
29
+ # THE PROVINCIAL HISTORY IS NOW INSTRUMENT-DATED TOO (redate pass). The
30
+ # earlier release of this file carried the INSTRUMENT WINDOW of RD 2822/1998
31
+ # (1999-2000) as the es-provincial period — an instrument date shipped as a
32
+ # series start, the exact defect the L1 period_evidence discipline exists to
33
+ # prevent, and one that produced a user-visible falsehood (a format that ran
34
+ # for three decades displayed as a two-year series). The primaries are now
35
+ # secured, all on boe.es (BOE + Gazeta facsimiles), all fetched 2026-08-02:
36
+ #
37
+ # * DECRETO 2046/1971, de 13 de agosto (BOE núm. 214, 07-09-1971,
38
+ # BOE-A-1971-1149) — rewrites Código de la Circulación arts. 230-234.
39
+ # New art. 231.I is the SUFFIX-LETTERS REFORM, verbatim: "la contraseña
40
+ # de la provincia donde se matricule el vehículo: Un número de cuatro
41
+ # cifras, que irá desde el 0000 al 9999, y una o dos letras de una serie,
42
+ # que comienza por la letra A y termina por las letras ZZ". Disposición
43
+ # final: in force "a los treinta días naturales de su publicación" =
44
+ # 7 OCTOBER 1971 — the folkloric "1971"/"October 1971" start, now dated
45
+ # to the day by its instrument. (Corrección de errores, BOE-A-1971-1472,
46
+ # checked: it does not touch the plate articles.)
47
+ # * The NUMERIC-ONLY provincial era behind it: RD 17-09-1900 (Gaceta 263,
48
+ # 20-09-1900) creates per-province registration; RO 24-05-1907 (Gaceta
49
+ # 160, 09-06-1907) prescribes the first plate FORMAT (contraseña + guión
50
+ # + number, black on white); re-enacted by the Reglamentos of 23-07-1918
51
+ # and 15-06-1926 and by the Código de la Circulación arts. 230-233
52
+ # (Decreto 25-09-1934, in force 01-11-1934 per BOE-A-1934-9025); closed
53
+ # by Decreto 2046/1971 (disposición transitoria primera keeps the old
54
+ # plates valid indefinitely).
55
+ #
56
+ # COLOUR POLICY: Anexo XVIII Cuadro 3 specifies, per colour, a FOUR-CORNER
57
+ # CIE chromaticity box plus a MINIMUM luminance factor. That constrains a
58
+ # GAMUT, not a value — so no single hex is a sourced claim. Each design below
59
+ # therefore carries `hex_basis: observed` for the rendered hex, plus
60
+ # `color_spec` with the cited Cuadro 3 box, plus `hex_cie_centroid` (the box
61
+ # centroid converted to sRGB at maximum in-gamut luminance) so the render
62
+ # layer can choose a spec-anchored value instead of the conventional one.
63
+ jurisdiction: es
64
+ authority:
65
+ name: Dirección General de Tráfico (DGT) — Reglamento General de Vehículos, RD 2822/1998, Anexo XVIII
66
+ url: "https://www.boe.es/buscar/act.php?id=BOE-A-1999-1826"
67
+ binding: vehicle
68
+
69
+ charset_defaults:
70
+ letters: [B, C, D, F, G, H, J, K, L, M, N, P, R, S, T, V, W, X, Y, Z]
71
+ excluded_letters: [A, E, I, O, U, "Ñ", Q]
72
+ excluded_digraphs: [CH, LL]
73
+ excluded_letters_note: >-
74
+ Anexo XVIII, verbatim: "tres letras, empezando por las letras BBB y
75
+ terminando por las letras ZZZ, suprimiéndose las cinco vocales, y las letras
76
+ Ñ y Q" — with the reasons given in the text itself: the vowels "se evitan
77
+ palabras malsonantes o acrósticos especialmente significados"; Ñ and Q "por
78
+ ser fácil su confusión con la letra N y el número 0, respectivamente"; and
79
+ CH and LL "por incompatibilidad con el diseño de la placa de matrícula que no
80
+ admitiría la consignación de cuatro caracteres en el último grupo". That
81
+ leaves exactly 20 letters. Note the sequence starts at BBB, NOT AAA.
82
+ source: "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII I.A: the BBB->ZZZ rule and every exclusion, verbatim"
83
+
84
+ color_spec_table: # cited once; referenced by each design below
85
+ source: "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII Cuadro 3, 'Coordenadas cromáticas' + luminance factors"
86
+ blanco: { cie_x: [0.355, 0.305, 0.285, 0.335], cie_y: [0.355, 0.305, 0.325, 0.375], luminance_factor_min: 0.35 }
87
+ rojo: { cie_x: [0.690, 0.595, 0.569, 0.655], cie_y: [0.310, 0.315, 0.341, 0.345], luminance_factor_min: 0.05 }
88
+ verde: { cie_x: [0.007, 0.248, 0.177, 0.026], cie_y: [0.703, 0.409, 0.362, 0.399], luminance_factor_min: 0.04 }
89
+ azul: { cie_x: [0.078, 0.150, 0.210, 0.137], cie_y: [0.171, 0.220, 0.160, 0.038], luminance_factor_min: 0.01 }
90
+ amarillo: { cie_x: [0.545, 0.487, 0.427, 0.465], cie_y: [0.454, 0.423, 0.483, 0.534], luminance_factor_min: 0.27 }
91
+
92
+ display_rules: # Anexo XVIII III, verbatim-sourced
93
+ two_plates: "automóviles except motorcycles and three-wheelers: one front (vertical axis on the median longitudinal plane; exceptionally left or right if construction forbids) and one rear"
94
+ one_plate_rear_only: "ciclomotores, motocicletas, vehículos de tres ruedas, cuatriciclos ligeros y pesados — one rear plate only; light and heavy quadricycles MAY additionally carry a front plate of the same characteristics"
95
+ trailers: "remolques/semirremolques over 750 kg carry their own plate at the rear plus, on the right, a second plate bearing the TOWING vehicle's registration; lighter ones carry only a repeat of the towing vehicle's registration"
96
+ source: "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII III. Número y ubicación de las placas"
97
+
98
+ series:
99
+
100
+ # =========================================================================
101
+ # THE CURRENT NATIONAL SERIES — 4 digits + 3 letters, EU band.
102
+ # =========================================================================
103
+ - id: es-national-2000
104
+ class: standard
105
+ categories: [car, van, truck, bus, motorcycle]
106
+ period: { start: 2000 } # Orden de 15-09-2000, in force 17-09-2000
107
+ period_evidence: instrument-in-force
108
+ matching: strict
109
+ format:
110
+ pattern: "9999 LLL"
111
+ regex: '\A\d{4} [A-Z]{3}\z'
112
+ regex_strict: '\A\d{4} [BCDFGHJKLMNPRSTVWXYZ]{3}\z'
113
+ charset:
114
+ letters: [B, C, D, F, G, H, J, K, L, M, N, P, R, S, T, V, W, X, Y, Z]
115
+ notes: "see charset_defaults; digits run 0000-9999; the letter group runs BBB to ZZZ"
116
+ progression: >-
117
+ Digits cycle 0000-9999 within a fixed letter triple, then the letter triple
118
+ advances one step in the 20-letter alphabet. Nationally sequential and
119
+ MONOTONIC from BBB, which makes the letter triple an approximate-age signal
120
+ and the ONLY decodable dimension of a post-2000 Spanish plate — there is no
121
+ geography whatsoever in this series.
122
+ separator_note: >-
123
+ Anexo XVIII prescribes "dos grupos de caracteres" and gives the inter-group
124
+ spacing in mm (Cuadro 1: 41 mm on the ordinaria larga) but prescribes no
125
+ separator GLYPH. The space in the pattern is the printed gap.
126
+ design:
127
+ plate: { w: 520, h: 110, unit: mm, reflective_surface: { w: 510, h: 100 } }
128
+ plate_variants:
129
+ - { w: 340, h: 220, unit: mm, reflective_surface: { w: 330, h: 210 }, note: "ordinaria alta (two-line)" }
130
+ - { w: 340, h: 110, unit: mm, reflective_surface: { w: 330, h: 100 }, note: "ordinaria larga delantera — the small FRONT plate, for M1 vehicles whose mounting cannot take the long plate, and for three-wheelers and quadricycles" }
131
+ - { w: 220, h: 160, unit: mm, reflective_surface: { w: 210, h: 150 }, note: "motocicletas ordinaria" }
132
+ - { w: 132, h: 96, unit: mm, reflective_surface: { w: 122, h: 86 }, note: "motocicletas corta — trial and enduro two-wheelers only" }
133
+ characters: { w: 45, h: 77, stroke: 10, gap: 14, group_gap: 41, unit: mm, note: "ordinaria larga; the 340x110 front plate uses 30 x 60 with a 6 mm stroke; motorcycle plates 30 x 60 / 6 mm; motocicletas corta 13 x 30 / 3.5 mm" }
134
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, hex_cie_centroid: "#FFFEF3", spec: blanco }
135
+ foreground: "#000000"
136
+ foreground_note: "caracteres estampados EN RELIEVE, pintados en color negro MATE — the statute specifies embossed characters and a matte finish, which the render layer should record even if it cannot depict it"
137
+ band: { side: left, color: "#003399", content: eu-stars+E, hex_basis: observed, spec: azul }
138
+ band_note: >-
139
+ "sobre una banda azul dispuesta verticalmente, el símbolo de la bandera
140
+ europea, que constará de 12 estrellas de color amarillo, y la sigla
141
+ distintiva de España representada por la letra E de color blanco, de
142
+ acuerdo con el cuadro 5". CUADRO 5 IS TITLED "DIMENSIONES Y COLORES DEL
143
+ DISTINTIVO COMUNITARIO (Dimensiones en mm.)" but renders as a DRAWING in
144
+ the BOE consolidated PDF — the millimetres are not text-extractable.
145
+ Corrects the EU dossier's expectation that ES Anexo XVIII Cuadro 5 supplies
146
+ Euroband geometry as text.
147
+ decoration_allowed: >-
148
+ Consolidated text only: "se permite la inclusión de diseños geométricos sin
149
+ significado reconocible, siempre que no afecten a las condiciones de
150
+ retrorreflexión y legibilidad", subject to ISO/IEC 30116:2016 OCR quality
151
+ testing. A modern addition absent from the 1999 original.
152
+ emblem: { present: false }
153
+ rear_differs: false
154
+ plate_construction: { border: "reborde plano sin cubrir ni pintar, 5 mm wide around the whole contour, embossed 0.8 +/-0.1 mm", corner_radius: { inner: 6, outer: 10, unit: mm }, character_relief: "0.9 mm +0.3/-0.2 above the ground", manipulator_number: "stamped in a 35 x 5 mm rectangle inside the left-hand bead" }
155
+ region_encoding: none
156
+ variants:
157
+ - class: taxi
158
+ design:
159
+ rear_differs: true
160
+ rear: { background: { color: "#003399", finish: retroreflective, hex_basis: observed, spec: azul }, foreground: "#FFFFFF" }
161
+ front: { background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec: blanco }, foreground: "#000000" }
162
+ note: >-
163
+ THE REAR PLATE ONLY is blue with white matte characters, for taxis and for
164
+ hire-with-driver vehicles of up to nine seats. The front plate stays
165
+ white/black. Same serial, same period, so a sub-entry per PRD-PLATES §2.3
166
+ — but note this is a genuine front/rear ASYMMETRY, not a colour-only
167
+ swap, and secondary sources routinely get it wrong by colouring both.
168
+ sources:
169
+ - "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII I.A.a) and Cuadro 1 note (7): 'salvo las placas de matrícula TRASERAS de los vehículos destinados al servicio de taxi y de alquiler con conductor de hasta nueve plazas'"
170
+ - class: motorcycle
171
+ design: { plate: { w: 220, h: 160, unit: mm } }
172
+ note: "Motorcycles carry the SAME national serial on a 220 x 160 plate (122 x 86 reflective on the 132 x 96 trial/enduro plate). Size-only variant, hence a sub-entry; recorded with a class so class-keyed queries can still reach it."
173
+ sources:
174
+ - "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII Cuadro 1: Motocicletas ordinaria 220x160 / 210x150; Motocicletas corta 132x96"
175
+ sources:
176
+ - "https://www.boe.es/buscar/doc.php?id=BOE-A-2000-16805 # Orden de 15-09-2000: replaces Anexo XVIII I.A.a) with '4 cifras + 3 letras' and adds the EU band; BOE's own Análisis block states 'Fecha de entrada en vigor: 17/09/2000'"
177
+ - "https://www.boe.es/eli/es/o/2000/09/15/(1) # canonical ELI for that Orden"
178
+ - "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII I.A.a) current wording: white retroreflective ground, black matte embossed characters, 4 digits 0000-9999 + 3 letters BBB->ZZZ minus vowels/Ñ/Q; Cuadro 1 dimensions; Cuadro 3 colour boxes"
179
+ - "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:31998R2411 # Reg. 2411/98 Art. 3 — the mutual-recognition rule the Orden's preamble invokes by name"
180
+ notes: >-
181
+ THE CURRENT SPANISH SERIES. Purely sequential and non-geographic: the 2000
182
+ reform deliberately removed the province code. Anexo XVIII adds the
183
+ reciprocal-recognition clause in terms: a Spanish car whose plate shows the EU
184
+ flag and the E sign "no será necesario que lleven en su parte posterior el
185
+ signo distintivo de la nacionalidad española previsto en la señal V-7".
186
+ DIMENSION CORRECTION worth recording: the statute says 520 x 110 mm, not the
187
+ 500 x 110 that circulates in secondary sources. START-DATE FOLKLORE FLAG
188
+ (redate pass): the legal start is 17-09-2000 (disposición final única:
189
+ "el día siguiente al de su publicación", BOE 223 of 16-09-2000; BOE Análisis
190
+ concurs) — a SUNDAY. The widely repeated "18 September 2000" is the first
191
+ working day, an issuance-practice date; both are true statements about
192
+ different things, and the instrument date is the one recorded here.
193
+
194
+ # =========================================================================
195
+ # THE 1971-2000 PROVINCIAL SUFFIX-LETTERS SERIES (redated; was 1999-2000).
196
+ # =========================================================================
197
+ - id: es-provincial
198
+ class: standard
199
+ categories: [car, van, truck, bus, motorcycle]
200
+ period: { start: 1971, end: 2000 }
201
+ period_evidence: instrument-dated-both-ends
202
+ matching: strict
203
+ format:
204
+ pattern: "LL-9999-LL"
205
+ regex: '\A[A-Z]{1,2}-\d{4}-[A-Z]{1,2}\z'
206
+ regex_strict: '\A(?:AB|AL|AV|BA|BI|BU|CA|CC|CE|CO|CR|CS|CU|GC|GE|GI|GR|GU|HU|IB|LE|LO|LU|MA|ML|MU|NA|OR|OU|PM|PO|SA|SE|SG|SH|SO|SS|TE|TF|TO|VA|VI|ZA|A|B|C|H|J|L|M|O|P|S|T|V|Z)-\d{4}-[A-Z]{1,2}\z'
207
+ charset:
208
+ notes: >-
209
+ TWO ENUMERATING INSTRUMENTS, three decades apart, SAME WORDING. Código de
210
+ la Circulación art. 231.I as rewritten by Decreto 2046/1971 (in force
211
+ 07-10-1971), verbatim: "la contraseña de la provincia donde se matricule
212
+ el vehículo: Un número de cuatro cifras, que irá desde el 0000 al 9999, y
213
+ una o dos letras de una serie, que comienza por la letra A y termina por
214
+ las letras ZZ, sin emplearse aquellas letras del alfabeto que puedan dar
215
+ lugar a confusión." Anexo XVIII I.A.a) of RD 2822/1998 as ORIGINALLY
216
+ enacted re-states it near-verbatim. Note the trailing letter group starts
217
+ at A (not BBB) and is ONE OR TWO letters, and that the excluded letters
218
+ are NOT enumerated in either text — hence regex_strict keeps [A-Z]{1,2}
219
+ for that group and constrains only the province contraseña, which IS
220
+ enumerated twice: art. 233 as rewritten 1971 (includes GE Gerona, OR
221
+ Orense, PM Baleares, SH Sahara) and Anexo XVIII II.A 1998 (52 codes;
222
+ GI, OU, IB replace GE, OR, PM after the province renames; no SH).
223
+ regex_strict is the UNION of both lists — 56 codes — because plates under
224
+ every one of them were lawfully issued inside this period. The SH reading
225
+ comes from a degraded facsimile ("Sahara ... SH" in the BOE scan) and is
226
+ flagged for the verifier.
227
+ progression: >-
228
+ Within a province the four digits cycle 0000-9999, then the trailing letter
229
+ group advances one step in a series the statute itself orders: "comienza
230
+ por la letra A y termina por las letras ZZ" — SINGLE letters first (M-1234-A),
231
+ TWO letters after Z was exhausted (M-1234-AB), which is why the suffix
232
+ count is an intra-series progression and not a separate series. Each
233
+ province advanced at its own registration rate, so the same suffix letter
234
+ maps to different years in different provinces — suffix decoding is
235
+ per-province or nothing. The Orden of 15-09-2000's preamble confirms the
236
+ exhaustion dynamic: the system "está próximo a agotarse en las provincias
237
+ de Madrid y Barcelona".
238
+ separator_note: >-
239
+ The GUIÓN IS STATUTORY in this era: the dimensions table of art. 232 as
240
+ rewritten by Decreto 2046/1971 carries an explicit "Longitud del guión"
241
+ row (as did its 1907, 1918, 1926 and 1934 predecessors for the numeric
242
+ era). The 1999 Anexo XVIII re-enactment prescribes group spacing in mm
243
+ without naming the glyph; the hyphen in the pattern is the statutory
244
+ printed separator, not a convention.
245
+ design:
246
+ plate: { w: 520, h: 110, unit: mm, reflective_surface: { w: 510, h: 100 } }
247
+ plate_variants:
248
+ - { w: 340, h: 220, unit: mm, note: "ordinaria alta con siglas de provincia" }
249
+ - { w: 340, h: 110, unit: mm, note: "ordinaria larga delantera con siglas de provincia" }
250
+ - { w: 220, h: 160, unit: mm, note: "motocicletas ordinaria con siglas de provincia" }
251
+ characters: { w: 45, h: 77, stroke: 10, gap: 8, group_gap: 27, unit: mm }
252
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec: blanco }
253
+ foreground: "#000000"
254
+ band: { side: none }
255
+ note: >-
256
+ No EU band: the band arrived with the Orden of 15-09-2000. Owners of
257
+ pre-2000 vehicles MAY voluntarily re-plate to the banded design while
258
+ KEEPING their provincial registration (Disposición transitoria primera), and
259
+ MUST adopt the new dimensions if they replace plates after loss, theft or
260
+ deterioration (Disposición transitoria segunda) — which is why the
261
+ consolidated Cuadro 1 still carries four "con siglas de provincia" rows
262
+ today, footnoted "Placas de matrícula con arreglo a lo establecido en las
263
+ disposiciones transitorias de la Orden de 15 de septiembre de 2000".
264
+ design_history: >-
265
+ The dimensions above are the 1999 Cuadro 1 values, which govern the era's
266
+ tail and every replacement plate made since. For 1971-1999 the governing
267
+ text was the Código de la Circulación as rewritten by Decreto 2046/1971:
268
+ art. 230.II, verbatim, "El fondo de las placas será reflectante, de color
269
+ blanco para los automóviles y rojo para los remolques y semirremolques.
270
+ Las letras y números serán de color negro mate" — so white REFLECTIVE
271
+ ground with black matte characters is a 1971 statutory fact, not a
272
+ 1980s-retrofit folklore date. Art. 232's table gives the era's placa larga
273
+ as 490 x 100 mm (not 520 x 110, which arrived with RD 2822/1998); the
274
+ 490 x 100 reading is from the BOE facsimile's partially degraded table and
275
+ is flagged for the verifier.
276
+ region_encoding: "plates/_decode/es-provinces.yml"
277
+ sources:
278
+ - "https://www.boe.es/buscar/doc.php?id=BOE-A-1971-1149 # Decreto 2046/1971, de 13 de agosto (BOE 214, 07-09-1971): art. 231.I = the suffix-letters format verbatim; art. 230.II colours; art. 232 dimensions + guión; art. 233 the 1971 contraseña list (GE, OR, PM, SH); disposición final = in force 30 días naturales after publication -> 07-10-1971; DT 1.ª old numeric plates keep validity. Facsimile: https://www.boe.es/boe/dias/1971/09/07/pdfs/A14559-14572.pdf — accessed 2026-08-02"
279
+ - "https://www.boe.es/buscar/doc.php?id=BOE-A-1971-1472 # Corrección de errores of Decreto 2046/1971 (BOE 275, 17-11-1971) — READ AND CHECKED: fixes arts. 146/165/208-209/24x only; the plate articles stand as published. Accessed 2026-08-02"
280
+ - "https://www.boe.es/buscar/doc.php?id=BOE-A-1999-1826 # ORIGINAL RD 2822/1998 text, Anexo XVIII I.A.a): province contraseña + 4 digits + 1-2 letters (A..ZZ) re-enacted; BOE Análisis block: 'Fecha de entrada en vigor: 26/07/1999'"
281
+ - "https://www.boe.es/buscar/doc.php?id=BOE-A-2000-16805 # the Orden that ENDED new issuance in this format: disposición final única 'entrará en vigor el día siguiente al de su publicación' (BOE 223, 16-09-2000) -> in force 17-09-2000, stated by BOE's own Análisis; plus both disposiciones transitorias (voluntary re-plating; mandatory new dimensions on replacement). Accessed 2026-08-02"
282
+ - "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII II.A: the 52 province contraseñas of the 1998 list; Cuadro 1 'con siglas de provincia' rows"
283
+ notes: >-
284
+ THE PROVINCIAL SUFFIX-LETTERS SYSTEM, 1971-2000 — Spain's only
285
+ region-decodable modern series, REDATED in the 2026-08-02 pass. Start:
286
+ Decreto 2046/1971 published BOE 07-09-1971, in force at 30 días naturales =
287
+ 7 OCTOBER 1971 (its own disposición final; the commonly repeated "October
288
+ 1971" is thereby confirmed and dated to the day). End for NEW registrations:
289
+ Orden de 15-09-2000, in force 17-09-2000 (disposición final única + BOE
290
+ Análisis). FOLKLORE FLAG, recorded not averaged: the enthusiast web and
291
+ Wikipedia commonly give 18 September 2000 — 17-09-2000 was a SUNDAY, so the
292
+ first national-series plates were ISSUED Monday the 18th; that is an
293
+ issuance-practice date, not the legal boundary, and the instrument date
294
+ stands. The former release of this entry carried period 1999-2000 (the RD
295
+ 2822/1998 instrument window) with the honest caveat that no 1971 primary was
296
+ secured; the primary is now secured and the period is corrected. The id
297
+ stays `es-provincial` (not `es-provincial-1971`) under the id contract
298
+ (PRD-QUALITY I-5/I-6): amend, never rename. Plates already issued remain
299
+ valid indefinitely and are re-issued on request; RGV Art. 27.2 lets an owner
300
+ swap a provincial plate for a national one on a change of province.
301
+ REMAINING GAPS at point of use: (1) the instruments that switched GE->GI,
302
+ OR->OU and PM->IB on plates after the 1992/1997/1998 province renames were
303
+ not chased — the 1998 Anexo XVIII list is the pinned post-rename authority;
304
+ (2) SH (Sahara) issuance necessarily ended with Spain's 1976 withdrawal, but
305
+ no instrument closing the code was located; (3) the per-province single- to
306
+ two-letter switchover dates are administrative allocation, published nowhere
307
+ located in this pass.
308
+
309
+ # =========================================================================
310
+ # THE NUMERIC-ONLY PROVINCIAL ERA, 1900-1971 (new in the redate pass).
311
+ # One recall-only series for seven decades of one continuous per-province
312
+ # numbering scheme whose surface details (code list, digit count) were
313
+ # revised by successive instruments — the era boundary INSIDE the era is
314
+ # soft, so a regex hit here is a shape claim, never a validity claim.
315
+ # =========================================================================
316
+ - id: es-provincial-numeric
317
+ class: standard
318
+ categories: [car, van, truck, bus, motorcycle]
319
+ period: { start: 1900, end: 1971 }
320
+ period_evidence: instrument-dated-both-ends
321
+ matching: recall-only
322
+ format:
323
+ pattern: "LL-999999"
324
+ regex: '\A[A-Z]{1,3}-\d{1,6}\z'
325
+ pattern_note: >-
326
+ REPRESENTATIVE ONLY, and the regex is deliberately wide — hence
327
+ recall-only. The contraseña ran ONE TO THREE letters: the 1907 list
328
+ includes three-letter codes (Albacete ALB, Cáceres CAC, Castellón CAS,
329
+ Segovia SEG, Teruel TER), trimmed in later lists. The number is the
330
+ province's permit order number with NO fixed width — it grew with the
331
+ province's registrations, from 1 digit to 6 (art. 233 of the 1934 Código
332
+ contemplates "cinco o más cifras" and Madrid exceeded 600000 before
333
+ 1971). No single regex is the grammar of any one year of this era.
334
+ progression: >-
335
+ Strictly sequential per province: the number is "el número de orden del
336
+ permiso de circulación" (1918 art. 13.d, 1926 art. 15.d, 1934 art. 232
337
+ — the 1907 text says "de la licencia"). Province + number therefore
338
+ encodes registration order within the province, which is why period
339
+ photographs can be dated by plate number against provincial totals —
340
+ an inference for the encyclopedia, not for this dataset.
341
+ separator_note: >-
342
+ The guión is statutory throughout: 1907 concl. 3.ª "separado por un
343
+ guión", and every subsequent dimensions table (1918, 1926, 1934) carries
344
+ a "Longitud del guión" row.
345
+ design:
346
+ background: { color: "#FFFFFF", finish: painted, hex_basis: observed, note: "no colour spec exists for this era beyond the words; no reflectivity requirement — reflectante arrives with Decreto 2046/1971" }
347
+ foreground: "#000000"
348
+ band: { side: none }
349
+ note: >-
350
+ BLACK ON WHITE FOR THE WHOLE ERA, by four successive instruments: 1907
351
+ concl. 3.ª "Las letras de la contraseña y el número se pintarán en negro
352
+ sobre fondo blanco"; 1918 art. 13.e) and 1926 art. 15.e) "caracteres
353
+ negros sobre fondo blanco"; 1934 art. 232 "caracteres latinos negros, de
354
+ trazo de ancho uniforme, sobre fondo blanco liso". Verified against the
355
+ primaries because mid-century dark plates are a neighbouring-country
356
+ pattern (PT, FR) that misattaches to Spain in collector folklore. The
357
+ 1934 Código also fixes character metrics (art. 233 table) and a
358
+ two-line rear layout option once the number reaches five digits
359
+ ("podrá colocarse en la placa posterior la contraseña de la provincia
360
+ centrada y encima del número", plate height then min 260 mm).
361
+ region_encoding: "plates/_decode/es-provinces.yml"
362
+ region_encoding_note: >-
363
+ PERIOD-DISCIPLINE CAVEAT: the decode table is the 1998 Anexo XVIII list.
364
+ This era's lists differ per instrument (1907, 1918, 1926, 1934 art. 232,
365
+ 1971 art. 233): three-letter codes until at latest 1926, no Gran
366
+ Canaria/Tenerife split in 1907, Sahara SH in the 1971 list. Historical
367
+ decode rows are L4 work (PRD-PLATES §7) — recorded gap.
368
+ sources:
369
+ - "https://www.boe.es/datos/pdfs/BOE/1900/263/A01141-01142.pdf # RD 17-09-1900 (Gaceta de Madrid 263, 20-09-1900, pp. 1141-1142), 'Reglamento para el servicio de coches automóviles por las carreteras': per-province authorization + 'En el Gobierno civil de cada provincia habrá un registro general de este servicio' (art. 6); vehicle inscriptions required but NO plate format prescribed. Accessed 2026-08-02"
370
+ - "https://www.boe.es/gazeta/dias/1907/06/09/pdfs/GMD-1907-160.pdf # RO 24-05-1907 (Gaceta 160, 09-06-1907): THE FIRST PLATE FORMAT — concl. 3.ª two plates, 'la contraseña de la provincia, y á continuación y separado por un guión el número de orden de la licencia', black on white; concl. 5.ª the first contraseña list (1-3 letters); concl. 6.ª dimensions. Its preamble states pre-1907 display was non-uniform ('exige uniformar el criterio'). Accessed 2026-08-02"
371
+ - "https://www.boe.es/datos/pdfs/BOE/1918/205/A00231-00237.pdf # RD 23-07-1918 (Gaceta 205, 24-07-1918), Reglamento art. 13.d)-f): same composition, revised code list, black on white. Locator page: https://www.boe.es/buscar/doc.php?id=BOE-A-1918-3950 — accessed 2026-08-02"
372
+ - "https://www.boe.es/datos/pdfs/BOE/1926/170/A01642-01654.pdf # RD 15-06-1926 (Gaceta 170, 19-06-1926), Reglamento art. 15.a)-g): two plates, contraseña + guión + permit number, black on white, revised list incl. Ceuta and Melilla. Locator: https://www.boe.es/buscar/doc.php?id=BOE-A-1926-6136 — accessed 2026-08-02"
373
+ - "https://www.boe.es/datos/pdfs/BOE/1934/269/A02634-02677.pdf # Código de la Circulación (Decreto 25-09-1934, Gaceta 269, 26-09-1934), arts. 230-233: the era's final numeric-format text, quoted in design.note above. Locator: https://www.boe.es/buscar/doc.php?id=BOE-A-1934-8197 — accessed 2026-08-02"
374
+ - "https://www.boe.es/buscar/doc.php?id=BOE-A-1934-9025 # Orden circular (Gaceta 294, 21-10-1934): the Código's entry into force is 1 November 1934. Accessed 2026-08-02"
375
+ - "https://www.boe.es/buscar/doc.php?id=BOE-A-1971-1149 # Decreto 2046/1971: ENDS the era at its own entry into force, 07-10-1971; DT 1.ª, verbatim: 'Los automóviles, remolques y semirremolques, matriculados en la fecha de entrada en vigor de este Decreto, conservarán la contraseña y número de su matrícula indefinidamente'. Accessed 2026-08-02"
376
+ notes: >-
377
+ THE NUMERIC-ONLY PROVINCIAL ERA (PP-NNNNNN), 1900-1971, modelled as ONE
378
+ recall-only series because it is one continuous per-province sequential
379
+ numbering — a vehicle registered in 1905 kept its number under every later
380
+ reglamento — while its surface rules shifted instrument by instrument.
381
+ PERIOD HONESTY, stated at point of use: 1900 dates the REGISTRATION regime
382
+ (RD 17-09-1900); the earliest plates displayed province + number
383
+ NON-UNIFORMLY, as the 1907 preamble itself testifies; the prescribed
384
+ FORMAT begins with RO 24-05-1907. A consumer needing the format-instrument
385
+ window should read 1907, and both dates are pinned above. The era closes
386
+ on 07-10-1971 (Decreto 2046/1971 in force), with old plates valid
387
+ indefinitely (DT 1.ª) — so numeric plates remained ON THE ROAD for decades
388
+ past 1971, exactly as provincial suffix plates remain today. The 1900
389
+ start also honours the lint's period rail (first national plates 1893;
390
+ Spain 1900). Entry-into-force of the 1900 Reglamento itself is not stated
391
+ in its text (no vacatio clause located) — recorded gap; its Gaceta
392
+ publication is 20-09-1900.
393
+
394
+ # =========================================================================
395
+ # ORDINARY SPECIAL SERIES — prefix letter + 4 digits + 3 letters, all from
396
+ # RD 2822/1998 itself (in force 26-07-1999), all still current.
397
+ # =========================================================================
398
+ - id: es-special-vehicles-1999
399
+ class: agricultural
400
+ categories: [tractor, machine]
401
+ period: { start: 1999 }
402
+ period_evidence: instrument-in-force
403
+ matching: strict
404
+ format:
405
+ pattern: "E9999LLL"
406
+ regex: '\AE\d{4}[A-Z]{3}\z'
407
+ regex_strict: '\AE\d{4}[BCDFGHJKLMNPRSTVWXYZ]{3}\z'
408
+ charset: { notes: "letter E prefix; 4 digits 0000-9999; 3 letters BBB->ZZZ minus vowels/Ñ/Q/CH/LL" }
409
+ design:
410
+ plate: { w: 340, h: 110, unit: mm, reflective_surface: { w: 330, h: 100 } }
411
+ plate_variants:
412
+ - { w: 280, h: 200, unit: mm, reflective_surface: { w: 270, h: 190 }, note: "vehículos especiales alta" }
413
+ characters: { w: 30, h: 60, stroke: 6, unit: mm }
414
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec: blanco }
415
+ foreground: "#CE1126"
416
+ foreground_note: "RED matte embossed characters on white — 'Los caracteres estampados en relieve irán pintados en color rojo mate'. hex_basis observed; Cuadro 3 'rojo' gamut applies (CIE centroid #FF111A)."
417
+ band: { side: none }
418
+ region_encoding: none
419
+ sources:
420
+ - "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII I.A.b) vehículos especiales: white ground, red matte characters, letter E + 4 digits + 3 letters; Cuadro 1: 340x110 larga / 280x200 alta, characters 30x60/6"
421
+ - "https://www.boe.es/buscar/doc.php?id=BOE-A-1999-1826 # original text, same wording minus the CH/LL inciso; in force 26-07-1999"
422
+ notes: >-
423
+ VEHÍCULOS ESPECIALES (agricultural and works/services machinery). The only
424
+ Spanish series with RED characters on white, and notably NOT 520 mm wide — the
425
+ long form is 340 x 110. CLASS CAVEAT: _meta/classes.yml has no "special
426
+ vehicle"/"works machinery" class; `agricultural` is the closest fit and covers
427
+ the dominant population (maquinaria agrícola), but the statutory category is
428
+ broader ("de obras y servicios"). Flagged as a vocabulary gap.
429
+
430
+ - id: es-trailer-1999
431
+ class: trailer
432
+ categories: [trailer, semitrailer]
433
+ period: { start: 1999 }
434
+ period_evidence: instrument-in-force
435
+ matching: strict
436
+ format:
437
+ pattern: "R9999LLL"
438
+ regex: '\AR\d{4}[A-Z]{3}\z'
439
+ regex_strict: '\AR\d{4}[BCDFGHJKLMNPRSTVWXYZ]{3}\z'
440
+ design:
441
+ plate: { w: 520, h: 110, unit: mm, reflective_surface: { w: 510, h: 100 } }
442
+ plate_variants:
443
+ - { w: 340, h: 220, unit: mm, reflective_surface: { w: 330, h: 210 }, note: "remolques alta" }
444
+ characters: { w: 45, h: 77, stroke: 10, gap: 12, group_gap: 30, unit: mm }
445
+ background: { color: "#CE1126", finish: retroreflective, hex_basis: observed, hex_cie_centroid: "#FF111A", spec: rojo }
446
+ foreground: "#000000"
447
+ band: { side: none }
448
+ region_encoding: none
449
+ sources:
450
+ - "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII I.A.c): 'El fondo de las placas será retrorreflectante, de color rojo. Los caracteres estampados en relieve irán pintados en color negro mate'; letter R + number + 3 letters; Cuadro 1 dimensions"
451
+ notes: >-
452
+ REMOLQUES Y SEMIRREMOLQUES — a RED plate with black characters, the inverse of
453
+ the special-vehicle plate. Trailers over 750 kg carry this plus a second
454
+ plate on the right bearing the towing vehicle's registration (Anexo XVIII
455
+ III.4). Trailers and semi-trailers share one series here because Anexo XVIII
456
+ treats them in one subparagraph with one prefix letter — contrast the
457
+ Netherlands, where W and O split them. PREDECESSOR RECORDED AS A GAP (redate
458
+ pass): the Código as rewritten by Decreto 2046/1971 already gave trailers a
459
+ dedicated format — art. 231.II, verbatim, "la letra R, un número que irá
460
+ desde el 1 al 999.999 y la contraseña de la provincia donde se matricule el
461
+ vehículo", on a red reflective ground (art. 230.II) — i.e. R-NNNNNN-PP,
462
+ 1971-1999. Not authored as a series in this pass (historical depth is L4);
463
+ pinned here so the id can be cut later without disturbing this one.
464
+
465
+ - id: es-moped-1999
466
+ class: moped
467
+ categories: [moped, quadricycle]
468
+ period: { start: 1999 }
469
+ period_evidence: instrument-in-force
470
+ matching: strict
471
+ format:
472
+ pattern: "C9999LLL"
473
+ regex: '\AC\d{4}[A-Z]{3}\z'
474
+ regex_strict: '\AC\d{4}[BCDFGHJKLMNPRSTVWXYZ]{3}\z'
475
+ layout: >-
476
+ THREE ROWS as originally enacted: row 1 = letter C plus the thousands digit
477
+ of the 0000-9999 number; row 2 = the remaining three digits; row 3 = the
478
+ three letters. The consolidated text describes it as "tres grupos"; the
479
+ three-row layout survives in the 100 x 168 "ciclomotores alta" plate.
480
+ design:
481
+ plate: { w: 100, h: 168, unit: mm, reflective_surface: { w: 90, h: 158 }, note: "ciclomotores alta (portrait, three rows)" }
482
+ plate_variants:
483
+ - { w: 140, h: 120, unit: mm, reflective_surface: { w: 130, h: 110 }, note: "ciclomotores larga" }
484
+ - { w: 210, h: 85, unit: mm, reflective_surface: { w: 200, h: 75 }, note: "cuatriciclos ligeros — also used for three-wheeled ciclomotores" }
485
+ - { w: 520, h: 110, unit: mm, reflective_surface: { w: 510, h: 100 }, note: "cuatriciclos ligeros larga" }
486
+ characters: { w: 13, h: 30, stroke: 3.5, unit: mm, tolerance: "+/- 3 mm between characters" }
487
+ background: { color: "#F9B700", finish: retroreflective, hex_basis: observed, hex_cie_centroid: "#FFC000", spec: amarillo }
488
+ foreground: "#000000"
489
+ band: { side: none }
490
+ region_encoding: none
491
+ sources:
492
+ - "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII I.A.d) ciclomotores: yellow retroreflective ground, black matte characters, letter C + 4 digits + 3 letters; Cuadro 1 ciclomotores/cuatriciclos rows"
493
+ - "https://www.boe.es/buscar/doc.php?id=BOE-A-1999-1826 # original text: the explicit THREE-ROW layout for ciclomotores"
494
+ notes: >-
495
+ CICLOMOTORES Y CICLOS DE MOTOR — yellow ground, black characters. RGV
496
+ transitional provision required mopeds bought before the RGV and registered
497
+ only with municipalities to be brought onto the national register within six
498
+ months of entry into force. Light quadricycles and three-wheeled mopeds share
499
+ this yellow design (Cuadro 1 note 6), which is why `quadricycle` appears in
500
+ categories — a kinds-vocabulary extension the schema takes without change.
501
+
502
+ - id: es-historic-1999
503
+ class: historic
504
+ categories: [car, van, truck, bus, motorcycle, moped]
505
+ period: { start: 1999 }
506
+ period_evidence: instrument-in-force
507
+ matching: strict
508
+ format:
509
+ pattern: "H9999LLL"
510
+ regex: '\AH\d{4}[A-Z]{3}\z'
511
+ regex_strict: '\AH\d{4}[BCDFGHJKLMNPRSTVWXYZ]{3}\z'
512
+ design:
513
+ plate: { w: 520, h: 110, unit: mm, reflective_surface: { w: 510, h: 100 } }
514
+ plate_variants:
515
+ - { w: 340, h: 220, unit: mm, note: "vehículo histórico alta" }
516
+ - { w: 220, h: 160, unit: mm, note: "vehículo histórico motocicletas" }
517
+ - { w: 100, h: 168, unit: mm, note: "vehículo histórico ciclomotores" }
518
+ characters: { w: 45, h: 77, stroke: 10, gap: 10, group_gap: 35, unit: mm }
519
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec: blanco }
520
+ foreground: "#000000"
521
+ band: { side: none }
522
+ region_encoding: none
523
+ sources:
524
+ - "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII I.B.c) vehículo histórico: white ground, black matte characters, letter H + 4 digits + 3 letters; Cuadro 1 four histórico rows"
525
+ notes: >-
526
+ VEHÍCULO HISTÓRICO. Visually near-identical to the ordinary series (white/black)
527
+ and distinguished by the H prefix rather than by colour — the opposite design
528
+ choice to the Netherlands, whose oldtimer plate is dark blue but keeps its
529
+ original serial. Spain has a dedicated historic SERIAL SERIES; the Netherlands
530
+ has a dedicated historic DESIGN. The age threshold sits in the historic-vehicle
531
+ regulation (RD 1247/1995), which was not fetched in this pass — recorded gap.
532
+
533
+ - id: es-tourist-1999
534
+ class: temporary
535
+ categories: [car, van, motorcycle]
536
+ period: { start: 1999 }
537
+ period_evidence: instrument-in-force
538
+ matching: strict
539
+ format:
540
+ pattern: "T9999LLL"
541
+ regex: '\AT\d{4}[A-Z]{3}\z'
542
+ regex_strict: '\AT\d{4}[BCDFGHJKLMNPRSTVWXYZ]{3}\z'
543
+ design:
544
+ plate: { w: 520, h: 110, unit: mm, reflective_surface: { w: 510, h: 100 } }
545
+ plate_variants:
546
+ - { w: 340, h: 220, unit: mm, note: "turística alta" }
547
+ characters: { w: 45, h: 77, stroke: 10, gap: 10, group_gap: [20, 30], unit: mm }
548
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec: blanco }
549
+ foreground: "#000000"
550
+ band:
551
+ side: right
552
+ color: "#CE1126"
553
+ hex_basis: observed
554
+ spec: rojo
555
+ content: expiry-month-roman-over-year-arabic
556
+ note: >-
557
+ "La banda vertical en donde se consignan el mes y el año en que caducan,
558
+ expresándose el primero en caracteres romanos y el segundo en caracteres de
559
+ tipo árabe, será retrorreflectante de color rojo. Los caracteres que en
560
+ ella se consignan serán adhesivos de color blanco mate" — 15 x 8 x 2 mm
561
+ adhesive characters, band width 30 mm (Cuadro 3).
562
+ region_encoding: none
563
+ sources:
564
+ - "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII I.B.b) matrícula turística: white ground, black matte characters, letter T + 4 digits + 3 letters, RED expiry band with white adhesive characters; Cuadro 3: band 30 mm, characters 15x8x2 mm"
565
+ notes: >-
566
+ MATRÍCULA TURÍSTICA — a tax-privileged temporary registration with the expiry
567
+ month in ROMAN numerals and the year in Arabic on a red vertical band. The
568
+ only Spanish plate that carries its own expiry date on its face, and the only
569
+ one whose band sits on the right. CLASS CAVEAT: recorded as `temporary`; the
570
+ statutory category is its own ("matrícula especial") and is neither ordinary
571
+ nor a circulation permit.
572
+
573
+ - id: es-temporary-private-1999
574
+ class: temporary
575
+ categories: [car, van, truck, bus, motorcycle, moped, trailer, semitrailer]
576
+ period: { start: 1999 }
577
+ period_evidence: instrument-in-force
578
+ matching: strict
579
+ format:
580
+ pattern: "P9999LLL"
581
+ regex: '\AP\d{4}[A-Z]{3}\z'
582
+ regex_strict: '\AP\d{4}[BCDFGHJKLMNPRSTVWXYZ]{3}\z'
583
+ layout: "Motor vehicles and trailers: three groups on one line. CICLOMOTORES: three ROWS — row 1 = letter P plus the thousands digit, row 2 = the remaining three digits, row 3 = the three letters."
584
+ design:
585
+ plate: { w: 520, h: 110, unit: mm, reflective_surface: { w: 510, h: 100 } }
586
+ plate_variants:
587
+ - { w: 280, h: 200, unit: mm, reflective_surface: { w: 270, h: 190 }, note: "temporal particular alta" }
588
+ - { w: 100, h: 168, unit: mm, reflective_surface: { w: 90, h: 158 }, note: "temporal particular ciclomotores" }
589
+ characters: { w: 30, h: 60, stroke: 6, gap: 16, unit: mm }
590
+ background: { color: "#007A33", finish: retroreflective, hex_basis: observed, hex_cie_centroid: "#00FFB3", spec: verde }
591
+ foreground: "#FFFFFF"
592
+ band: { side: none }
593
+ region_encoding: none
594
+ sources:
595
+ - "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII I.C.a) permisos temporales para particulares: 'El fondo de las placas será retrorreflectante, de color verde. Los caracteres estampados en relieve irán pintados en color blanco mate'; letter P; the three-row ciclomotor layout"
596
+ notes: >-
597
+ TEMPORARY PERMIT FOR PRIVATE INDIVIDUALS — GREEN ground, white characters,
598
+ prefix P. Spain colour-codes temporary permits by HOLDER TYPE: green for
599
+ individuals (this entry), red for companies (es-temporary-company-*). Note the
600
+ Cuadro 3 green box is wide and its minimum luminance factor is only 0.04, so
601
+ the rendered hex is a conventional choice, not a spec value — the centroid
602
+ conversion lands at a much lighter #00FFB3.
603
+
604
+ - id: es-temporary-company-unregistered-1999
605
+ class: dealer
606
+ categories: [car, van, truck, bus, motorcycle, moped, trailer, semitrailer]
607
+ period: { start: 1999 }
608
+ period_evidence: instrument-in-force
609
+ matching: strict
610
+ format:
611
+ pattern: "S9999LLL"
612
+ regex: '\AS\d{4}[A-Z]{3}\z'
613
+ regex_strict: '\AS\d{4}[BCDFGHJKLMNPRSTVWXYZ]{3}\z'
614
+ layout: "one line for motor vehicles and trailers; three rows for ciclomotores (letter S + thousands digit / three digits / three letters)"
615
+ design:
616
+ plate: { w: 520, h: 110, unit: mm, reflective_surface: { w: 510, h: 100 } }
617
+ plate_variants:
618
+ - { w: 280, h: 200, unit: mm, note: "temporal empresas alta" }
619
+ - { w: 100, h: 168, unit: mm, note: "temporal empresas ciclomotores" }
620
+ characters: { w: 30, h: 60, stroke: 6, gap: 16, group_gap: 57.5, unit: mm }
621
+ background: { color: "#CE1126", finish: retroreflective, hex_basis: observed, hex_cie_centroid: "#FF111A", spec: rojo }
622
+ foreground: "#FFFFFF"
623
+ band:
624
+ side: right
625
+ color: "#FFFFFF"
626
+ hex_basis: observed
627
+ spec: blanco
628
+ content: expiry-month-roman-over-year-arabic
629
+ note: "WHITE band with RED matte adhesive characters — the inverse of the tourist plate's red band with white characters. Band width 30 mm (20 mm on the ciclomotor plate)."
630
+ region_encoding: none
631
+ sources:
632
+ - "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII I.C.b): red ground, white matte characters, 'la letra S, para los vehículos no matriculados'; white expiry band with red adhesive characters; Cuadro 3 band widths 30/20 mm"
633
+ notes: >-
634
+ TEMPORARY PERMIT FOR COMPANIES, UNREGISTERED VEHICLES — prefix S. This is
635
+ Spain's functional dealer/trade plate. Its own series and not a variant of the
636
+ V plate below, because the statute assigns a DIFFERENT PREFIX LETTER, which is
637
+ a format difference (PRD-PLATES §2.3). CLASS CAVEAT: recorded as `dealer`
638
+ because it is bound to a business rather than a vehicle; the statutory name is
639
+ "permiso temporal para empresas".
640
+
641
+ - id: es-temporary-company-registered-1999
642
+ class: dealer
643
+ categories: [car, van, truck, bus, motorcycle, moped, trailer, semitrailer]
644
+ period: { start: 1999 }
645
+ period_evidence: instrument-in-force
646
+ matching: strict
647
+ format:
648
+ pattern: "V9999LLL"
649
+ regex: '\AV\d{4}[A-Z]{3}\z'
650
+ regex_strict: '\AV\d{4}[BCDFGHJKLMNPRSTVWXYZ]{3}\z'
651
+ design:
652
+ plate: { w: 520, h: 110, unit: mm, reflective_surface: { w: 510, h: 100 } }
653
+ plate_variants:
654
+ - { w: 280, h: 200, unit: mm }
655
+ - { w: 100, h: 168, unit: mm }
656
+ characters: { w: 30, h: 60, stroke: 6, gap: 16, group_gap: 57.5, unit: mm }
657
+ background: { color: "#CE1126", finish: retroreflective, hex_basis: observed, spec: rojo }
658
+ foreground: "#FFFFFF"
659
+ band: { side: right, color: "#FFFFFF", hex_basis: observed, spec: blanco, content: expiry-month-roman-over-year-arabic }
660
+ region_encoding: none
661
+ sources:
662
+ - "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII I.C.b): '...o la letra V, para los matriculados' — same red design, different prefix"
663
+ notes: >-
664
+ TEMPORARY PERMIT FOR COMPANIES, ALREADY-REGISTERED VEHICLES — prefix V.
665
+ Identical design to the S series; the prefix letter is the only difference and
666
+ it encodes whether the vehicle already holds a registration. A parse API must
667
+ keep them apart, which is why they are two series with distinct notes rather
668
+ than one entry with an alternation.
669
+
670
+ # =========================================================================
671
+ # DIPLOMATIC AND OFFICIAL SERIES. Anexo XVIII specifies the LETTERS and the
672
+ # GROUP STRUCTURE ("dos grupos de guarismos") but NOT the digit widths and
673
+ # NOT the separator glyph — so every regex here uses unbounded \d+ and a
674
+ # permissive separator, deliberately making no width claim.
675
+ # =========================================================================
676
+ - id: es-diplomatic-cd-1999
677
+ class: diplomatic
678
+ categories: [car, van, motorcycle]
679
+ period: { start: 1999 }
680
+ period_evidence: instrument-in-force
681
+ matching: strict
682
+ format:
683
+ pattern: "CD-999-999"
684
+ regex: '\ACD[- ]\d+[- ]\d+\z'
685
+ pattern_note: >-
686
+ The three-digit groups in the pattern are REPRESENTATIVE ONLY. Anexo XVIII
687
+ says "las letras CD, seguidas por dos grupos de guarismos" and fixes neither
688
+ width; the regex is intentionally unbounded so it makes no width claim.
689
+ progression: >-
690
+ Group 1 is an invariable per-mission prefix, assigned in the alphabetical
691
+ order of the Foreign Ministry's most recent official diplomatic list, with
692
+ prefix "-1-" reserved for the Decanato del Cuerpo Diplomático; missions that
693
+ later accredit permanent ambassadors are appended by seniority. Group 2 is a
694
+ serial within the mission, proposed by the mission itself.
695
+ design:
696
+ plate: { w: 520, h: 110, unit: mm, reflective_surface: { w: 510, h: 100 } }
697
+ characters: { w: 45, h: 77, stroke: 10, gap: 14, group_gap: [80, 48], unit: mm }
698
+ background: { color: "#CE1126", finish: retroreflective, hex_basis: observed, hex_cie_centroid: "#FF111A", spec: rojo }
699
+ foreground: "#FFFFFF"
700
+ band: { side: none }
701
+ region_encoding: "mission prefix — decode table not authored (see notes)"
702
+ sources:
703
+ - "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII I.B.a).1: Cuerpo diplomático — red retroreflective ground, white matte embossed characters, letters CD + two digit groups, prefix assignment rule and the '-1-' Decanato reservation; Cuadro 1 dimensions"
704
+ notes: >-
705
+ CUERPO DIPLOMÁTICO — red ground, white characters. The mission-prefix DECODE
706
+ TABLE is not authored: Anexo XVIII states the ASSIGNMENT RULE (alphabetical
707
+ order of the Foreign Ministry's official diplomatic list) but not the resulting
708
+ codes, and that list was not fetched in this pass. PRD-PLATES puts diplomatic
709
+ decode tables at gate L4; this entry carries the mechanism so the table can be
710
+ hung off it later without an id change.
711
+
712
+ - id: es-international-oi-1999
713
+ class: diplomatic
714
+ categories: [car, van, motorcycle]
715
+ period: { start: 1999 }
716
+ period_evidence: instrument-in-force
717
+ matching: strict
718
+ format:
719
+ pattern: "OI-999-999"
720
+ regex: '\AOI[- ]\d+[- ]\d+\z'
721
+ pattern_note: "digit-group widths are representative only; Anexo XVIII fixes neither"
722
+ progression: "group 1 is an invariable per-organisation prefix, assigned by seniority in a series running consecutively after the one reserved for diplomatic missions; group 2 is a serial within the organisation"
723
+ design:
724
+ plate: { w: 520, h: 110, unit: mm, reflective_surface: { w: 510, h: 100 } }
725
+ characters: { w: 45, h: 77, stroke: 10, gap: 14, group_gap: [80, 48], unit: mm }
726
+ background: { color: "#003399", finish: retroreflective, hex_basis: observed, hex_cie_centroid: "#0083FF", spec: azul }
727
+ foreground: "#FFFFFF"
728
+ band: { side: none }
729
+ region_encoding: "organisation prefix — decode table not authored"
730
+ sources:
731
+ - "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII I.B.a).2: organizaciones internacionales — blue retroreflective ground, white matte characters, letters OI + two digit groups"
732
+ notes: >-
733
+ ORGANIZACIONES INTERNACIONALES — blue ground, white characters. CLASS CAVEAT:
734
+ recorded as `diplomatic` because _meta/classes.yml has no
735
+ international-organisation class; the statutory category is its own and its
736
+ prefix series is explicitly separate from (though consecutive with) the
737
+ diplomatic one. Flagged as a vocabulary gap.
738
+
739
+ - id: es-consular-cc-1999
740
+ class: consular
741
+ categories: [car, van, motorcycle]
742
+ period: { start: 1999 }
743
+ period_evidence: instrument-in-force
744
+ matching: strict
745
+ format:
746
+ pattern: "CC-999-999"
747
+ regex: '\ACC[- ]\d+[- ]\d+\z'
748
+ pattern_note: "digit-group widths are representative only"
749
+ progression: "group 1 is the prefix of the diplomatic mission the consular office depends on; where there is no such dependency a prefix is assigned to the state itself. Group 2 follows the diplomatic rule, or the head of the consular office's proposal where the office is not attached to an accredited mission."
750
+ design:
751
+ plate: { w: 520, h: 110, unit: mm, reflective_surface: { w: 510, h: 100 } }
752
+ characters: { w: 45, h: 77, stroke: 10, gap: 14, group_gap: [80, 48], unit: mm }
753
+ background: { color: "#007A33", finish: retroreflective, hex_basis: observed, hex_cie_centroid: "#00FFB3", spec: verde }
754
+ foreground: "#FFFFFF"
755
+ band: { side: none }
756
+ region_encoding: "mission prefix — decode table not authored"
757
+ sources:
758
+ - "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII I.B.a).3: oficinas consulares — green retroreflective ground, white matte characters, letters CC + two digit groups; prefix inherited from the parent diplomatic mission"
759
+ notes: >-
760
+ OFICINAS CONSULARES — green ground, white characters. COLLISION WORTH FLAGGING
761
+ for the parse API: "CC" is also the province contraseña for CÁCERES in Anexo
762
+ XVIII II.A, so the string "CC-1234-AB" is a valid provincial car plate while
763
+ "CC-12-345" is consular. Disambiguation is by group structure (4 digits + 1-2
764
+ letters vs two digit groups), not by prefix.
765
+
766
+ - id: es-diplomatic-staff-ta-1999
767
+ class: diplomatic
768
+ categories: [car, van, motorcycle]
769
+ period: { start: 1999 }
770
+ period_evidence: instrument-in-force
771
+ matching: strict
772
+ format:
773
+ pattern: "TA-999-999"
774
+ regex: '\ATA[- ]\d+[- ]\d+\z'
775
+ pattern_note: "digit-group widths are representative only"
776
+ progression: "group 1 identifies the diplomatic mission, international organisation or consular office; group 2 is a serial among that body's technical-administrative staff, on its proposal"
777
+ design:
778
+ plate: { w: 520, h: 110, unit: mm, reflective_surface: { w: 510, h: 100 } }
779
+ characters: { w: 45, h: 77, stroke: 10, gap: 14, group_gap: [80, 48], unit: mm }
780
+ background: { color: "#F9B700", finish: retroreflective, hex_basis: observed, hex_cie_centroid: "#FFC000", spec: amarillo }
781
+ foreground: "#000000"
782
+ band: { side: none }
783
+ region_encoding: "body prefix — decode table not authored"
784
+ sources:
785
+ - "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII I.B.a).4: personal técnico-administrativo — yellow retroreflective ground, black matte characters, letters TA + two digit groups"
786
+ notes: >-
787
+ PERSONAL TÉCNICO-ADMINISTRATIVO of missions, international organisations and
788
+ consular offices — yellow ground, black characters. RGV transitional provision
789
+ three preserved existing matrícula turística permits held by this staff until
790
+ their validity expired, which is the documented bridge from the pre-1999
791
+ arrangement.
792
+
793
+ - id: es-military-1999
794
+ class: military
795
+ categories: [car, van, truck, bus, motorcycle, trailer]
796
+ period: { start: 1999 }
797
+ period_evidence: instrument-in-force
798
+ matching: strict
799
+ format:
800
+ pattern: "ET-999999"
801
+ regex: '\A(?:ET|FN|EA)[- ]\d+(?:-VE)?\z'
802
+ pattern_note: "digit width is representative only — Anexo XVIII II.B lists the contraseñas but states no numbering grammar"
803
+ charset: { contraseñas: { ET: "Ejército de Tierra", FN: "Armada", EA: "Ejército del Aire" }, suffix: "special vehicles append '-VE' after a hyphen" }
804
+ design:
805
+ band: { side: none }
806
+ note: >-
807
+ Anexo XVIII II.B lists the contraseñas ONLY — it prescribes no colours and no
808
+ dimensions for state plates, and section I (Colores e inscripciones) does not
809
+ cover them. Colours are therefore deliberately ABSENT here rather than
810
+ guessed; recorded gap.
811
+ region_encoding: none
812
+ sources:
813
+ - "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII II.B: 'ET, FN y EA: Para vehículos pertenecientes al Ministerio de Defensa, correspondientes, respectivamente al Ejército de Tierra, Armada y Ejército del Aire' and the '-VE' rule for vehículos especiales"
814
+ notes: >-
815
+ MINISTRY OF DEFENCE fleets — Army (ET), Navy (FN), Air Force (EA). One series
816
+ because Anexo XVIII II.B treats the three contraseñas in a single provision
817
+ with a single numbering rule; the branch is decodable from the contraseña.
818
+ Colours and dimensions are NOT in Anexo XVIII for state plates and are not
819
+ invented here.
820
+
821
+ - id: es-nato-fae-1999
822
+ class: military
823
+ categories: [car, van, truck, bus]
824
+ period: { start: 1999 }
825
+ period_evidence: instrument-in-force
826
+ matching: strict
827
+ format:
828
+ pattern: "FAE-999999"
829
+ regex: '\AFAE[- ]\d+(?:-VE)?\z'
830
+ pattern_note: "digit width representative only"
831
+ design:
832
+ band: { side: none }
833
+ note: "no colour or dimension specified in Anexo XVIII II.B — recorded gap"
834
+ region_encoding: none
835
+ sources:
836
+ - "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII II.B: 'FAE: Para los vehículos al servicio de los Cuarteles Generales Militares Internacionales de la OTAN matriculados en España'"
837
+ notes: >-
838
+ NATO INTERNATIONAL MILITARY HEADQUARTERS registered in Spain. The Spanish
839
+ counterpart of Germany's "X" Unterscheidungszeichen (FZV Anlage 2), and worth
840
+ pairing with it when the encyclopedia covers NATO-status vehicles.
841
+
842
+ - id: es-government-1999
843
+ class: government
844
+ categories: [car, van, truck, bus]
845
+ period: { start: 1999 }
846
+ period_evidence: instrument-in-force
847
+ matching: strict
848
+ format:
849
+ pattern: "PME-999999"
850
+ regex: '\A(?:PME|MF|MMA)[- ]\d+(?:-VE)?\z'
851
+ pattern_note: "digit width representative only"
852
+ charset: { contraseñas: { PME: "Parque Móvil del Estado", MF: "Parque del Ministerio de Fomento", MMA: "Parque del Ministerio de Medio Ambiente" } }
853
+ design:
854
+ band: { side: none }
855
+ note: "no colour or dimension specified in Anexo XVIII II.B — recorded gap"
856
+ region_encoding: none
857
+ sources:
858
+ - "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII II.B: MF, MMA and PME contraseñas"
859
+ notes: >-
860
+ CENTRAL GOVERNMENT FLEETS. PERIOD-ROT WARNING for the decode discipline
861
+ PRD-PLATES §9 calls out: MF (Ministerio de Fomento) and MMA (Ministerio de
862
+ Medio Ambiente) name ministries that have since been reorganised and renamed,
863
+ yet the consolidated Anexo XVIII still lists them. The codes are current law;
864
+ the ministry names behind them are not current fact. Recorded as-enacted.
865
+
866
+ - id: es-police-1999
867
+ class: police
868
+ categories: [car, van, truck, motorcycle]
869
+ period: { start: 1999 }
870
+ period_evidence: instrument-in-force
871
+ matching: strict
872
+ format:
873
+ pattern: "CNP-999999"
874
+ regex: '\A(?:CNP|PGC)[- ]\d+(?:-VE)?\z'
875
+ pattern_note: "digit width representative only"
876
+ charset: { contraseñas: { CNP: "Cuerpo Nacional de Policía", PGC: "Cuerpo de la Guardia Civil" } }
877
+ design:
878
+ band: { side: none }
879
+ note: "no colour or dimension specified in Anexo XVIII II.B — recorded gap"
880
+ region_encoding: none
881
+ sources:
882
+ - "https://www.boe.es/buscar/pdf/1999/BOE-A-1999-1826-consolidado.pdf # Anexo XVIII II.B: CNP and PGC, both under the Dirección General de la Policía y de la Guardia Civil"
883
+ notes: >-
884
+ NATIONAL POLICE (CNP) and GUARDIA CIVIL (PGC). Note that RGV Art. 27.5 lets
885
+ an autonomous community's police force use plates "con una contraseña y
886
+ numeración propias" within that community, in addition to ordinary
887
+ registration — so autonomous-community police codes exist OUTSIDE Anexo XVIII
888
+ and are a recorded gap for L1 (Ertzaintza, Mossos d'Esquadra, Policía Foral).