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,1296 @@
1
+ # plates/pl.yml — Poland (PRD-PLATES gate L1, wave 2).
2
+ #
3
+ # EVERY format, colour, dimension and class claim here is read from a Polish
4
+ # primary instrument fetched in this pass through the Sejm's ELI API
5
+ # (api.sejm.gov.pl/eli), which serves the same Dziennik Ustaw PDFs as ISAP
6
+ # without ISAP's bot wall. The instruments, in force order:
7
+ # * Ustawa z dnia 20 czerwca 1997 r. – Prawo o ruchu drogowym, tekst jednolity
8
+ # Dz. U. 2024 poz. 1251 — art. 73 (registration, number retention), art. 75a
9
+ # (plate manufacture), art. 76 (the four delegations).
10
+ # * Rozporządzenie Ministra Infrastruktury z dnia 8 listopada 2024 r.
11
+ # w sprawie rejestracji i oznaczania pojazdów, wymagań dla tablic
12
+ # rejestracyjnych oraz wzorów innych dokumentów związanych z rejestracją
13
+ # pojazdów (Dz. U. 2024 poz. 1709), in force 2024-11-30 — §§ 25-33 and
14
+ # załączniki 12 (the plate SPEC) and 13 (the CODE table); as amended by
15
+ # Dz. U. 2025 poz. 939 and Dz. U. 2026 poz. 891.
16
+ # * The predecessors that DATE the system changes: Dz. U. 1993 nr 37 poz. 164,
17
+ # Dz. U. 1998 nr 57 poz. 365, Dz. U. 1999 nr 59 poz. 632, Dz. U. 2002 nr 133
18
+ # poz. 1123, Dz. U. 2006 nr 70 poz. 489, Dz. U. 2019 poz. 1272,
19
+ # Dz. U. 2017 poz. 2355, Dz. U. 2022 poz. 1847.
20
+ # * The three SIDE regimes, each under its own delegation: professional
21
+ # registration (Dz. U. 2019 poz. 546, consolidated Dz. U. 2023 poz. 2616),
22
+ # armed forces (art. 76 ust. 2 → Dz. U. 2023 poz. 1776) and the security
23
+ # services (art. 76 ust. 4 → Dz. U. 2025 poz. 1326).
24
+ #
25
+ # THE SIX STRUCTURAL FACTS THAT SHAPE THIS FILE
26
+ #
27
+ # 1. THE OPERATIVE INSTRUMENT IS THE 2024 ONE, NOT THE 2022 ONE. Almost every
28
+ # secondary description of Polish plates still cites Dz. U. 2022 poz. 1847.
29
+ # The Sejm ELI register records that instrument "uznany za uchylony" with
30
+ # repealDate 2024-11-30, replaced by Dz. U. 2024 poz. 1709. The difference is
31
+ # not cosmetic: the 2024 annex adds real powiat codes (bydgoski BC, kielecki
32
+ # KC/KM/KP, ostródzki OT/OX, Poznań X, Konin N, Kalisz A), extends the
33
+ # tymczasowe/indywidualne column to the second voivodeship letter, and adds a
34
+ # new plate — red on YELLOW for cars built for sporting competition
35
+ # (§ 27 ust. 9 pkt 2). This file is built on the 2024 text throughout.
36
+ #
37
+ # 2. THE POWIAT CODE LIST IS INSIDE THE REGULATION, so it is authored in full,
38
+ # from the instrument, in plates/_decode/pl-powiats.yml — 380 rows, 689
39
+ # distinct prefixes, no secondary source anywhere in it. § 31 ust. 2,
40
+ # verbatim: "Wyróżniki województw i powiatów dla tablic rejestracyjnych są
41
+ # określone w załączniku nr 13 do rozporządzenia."
42
+ #
43
+ # 3. THE REFORM DATE IS 1 MAY 2000, AND IT IS NOT THE DATE OF ITS INSTRUMENT.
44
+ # The rozporządzenie that created the voivodeship-first system is dated
45
+ # 19 June 1999 and § 49 commences it "z dniem 1 lipca 1999 r." — but the SAME
46
+ # sentence excepts the plate provisions: "z wyjątkiem § 16, § 18 ust. 3-8,
47
+ # § 19, § 21 ust. 2, 4 i 5, § 22-24, § 29 i 30, które wchodzą w życie z dniem
48
+ # 1 maja 2000 r." § 21 ust. 2 is the serial grammar and § 24 the wyróżniki
49
+ # annex, so the system began on 1 MAY 2000. § 41 and § 39 ust. 2 close the
50
+ # other end: pre-reform stock could be issued "jednak nie dłużej niż do dnia
51
+ # 30 kwietnia 2000 r." This file therefore carries 2000, not the 1999 of the
52
+ # instrument's own date and not the 2001 that circulates in secondary
53
+ # descriptions. It is the Spanish 1999-2000 trap in Polish dress.
54
+ #
55
+ # 4. THE GREEN PLATE IS 2020, NOT 2022. Rozporządzenie Ministra Infrastruktury
56
+ # z dnia 8 lipca 2019 r. (Dz. U. 2019 poz. 1272) inserted "barwy czarnej na
57
+ # zielonym tle, w przypadku tablicy rejestracyjnej wydawanej dla pojazdu
58
+ # elektrycznego albo pojazdu napędzanego wodorem" and § 9 commences it
59
+ # "z dniem 1 stycznia 2020 r.", with § 6 letting authorities ORDER the new
60
+ # plates from 15 December 2019. The 2022 and 2024 instruments only re-enact
61
+ # it. Recorded here as 2020 with the 2019 instrument cited.
62
+ #
63
+ # 5. THE BLUE BAND WAS THE POLISH FLAG BEFORE IT WAS THE EU STARS, and the swap
64
+ # is dated to the day. Dz. U. 2002 nr 133 poz. 1123 § 19 ust. 1: "Każda
65
+ # tablica posiada dodatkowo na niebieskim tle symbol barw Rzeczypospolitej
66
+ # Polskiej i litery «PL» barwy białej." Dz. U. 2006 nr 70 poz. 489 replaced
67
+ # that with the twelve-star EU symbol and § 6 commences it "z dniem 2 maja
68
+ # 2006 r." — two years AFTER accession, which is the sort of gap a
69
+ # guessed date gets wrong. § 2 of the same instrument keeps the flag-band
70
+ # plates lawful indefinitely, so the two designs are genuinely parallel.
71
+ #
72
+ # 6. H AND U ARE THE TWO LETTERS THAT ARE NEVER A VOIVODEDSHIP. § 30 ust. 1 gives
73
+ # a 25-letter alphabet (A-Z without Q); 23 of those letters appear in column 4
74
+ # of załącznik nr 13. The two that never do are H and U, and both are spoken
75
+ # for elsewhere: H is the base of the six service prefixes and U is the armed
76
+ # forces' wyróżnik. A leading H or U is therefore a positive signal that the
77
+ # plate is not a civil registration — see plates/_decode/pl-powiats.yml.
78
+ #
79
+ # REGEX POLICY, as in plates/at.yml and plates/de.yml: `format.regex` is the
80
+ # lint-round-trippable regex spelling § 30 ust. 2's enumerated layouts;
81
+ # `format.regex_strict` carries the two sourced tightenings the round-trip
82
+ # forbids — the § 30 ust. 1 exclusion of Q from the whole alphabet, and the
83
+ # § 31 ust. 1 exclusion of B, D, I, O and Z from the VEHICLE wyróżnik only
84
+ # (never from the prefix, where DB, DDZ, CIN and CB are all real codes).
85
+ # There is no leading-zero rule to carry: the statutory ranges are "od 00001"
86
+ # and "od 0001", so 0 is significant in every position but the all-zero serial.
87
+ jurisdiction: pl
88
+ authority:
89
+ name: Ministerstwo Infrastruktury — Prawo o ruchu drogowym (Dz. U. 2024 poz. 1251) i rozporządzenie w sprawie rejestracji i oznaczania pojazdów (Dz. U. 2024 poz. 1709)
90
+ url: "https://api.sejm.gov.pl/eli/acts/DU/2024/1709"
91
+ binding: vehicle
92
+ binding_note: >-
93
+ art. 73 ust. 1d Prawa o ruchu drogowym: "Numer rejestracyjny na tablicach
94
+ (tablicy) rejestracyjnych stanowią litery i cyfry (cyfra). Numer ten składa
95
+ się odpowiednio z wyróżnika województwa lub powiatu i wyróżnika pojazdu albo
96
+ wyróżnika indywidualnego pojazdu" — and § 27 ust. 1 of the rozporządzenie:
97
+ "Każdemu pojazdowi przypisuje się jeden numer rejestracyjny." The number binds
98
+ to the VEHICLE, so vehicle-keyed consumers may join on it. The one nuance a
99
+ consumer must know is art. 73 ust. 1a, which since 2022 lets a BUYER keep the
100
+ number: "Składający wniosek o rejestrację pojazdu może wnioskować
101
+ o zachowanie dotychczasowego numeru rejestracyjnego, w tym tablic (tablicy)
102
+ rejestracyjnych, jeżeli pojazd był już zarejestrowany na terytorium
103
+ Rzeczypospolitej Polskiej" — the plate stays on the same vehicle across a
104
+ change of keeper, it never moves to a different vehicle. There is no Polish
105
+ analogue of the British or Swiss owner-binding.
106
+ instrument:
107
+ citation: "Rozporządzenie Ministra Infrastruktury z dnia 8 listopada 2024 r. w sprawie rejestracji i oznaczania pojazdów, wymagań dla tablic rejestracyjnych oraz wzorów innych dokumentów związanych z rejestracją pojazdów (Dz. U. 2024 poz. 1709), zmienione Dz. U. 2025 poz. 939 i Dz. U. 2026 poz. 891"
108
+ enabling_statute: "Ustawa z dnia 20 czerwca 1997 r. – Prawo o ruchu drogowym, art. 76 ust. 1 pkt 1 lit. a, c i d (tekst jednolity Dz. U. 2024 poz. 1251)"
109
+ data_wydania: "2024-11-08"
110
+ wejscie_w_zycie: "2024-11-30"
111
+ wejscie_w_zycie_source: "§ 51, verbatim: 'Rozporządzenie wchodzi w życie po upływie 7 dni od dnia ogłoszenia.' The ELI register fixes the resulting date at 2024-11-30."
112
+ eli: "https://api.sejm.gov.pl/eli/acts/DU/2024/1709"
113
+ source: "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # the whole instrument, 102 pages, read in this pass. Accessed 2026-08-02"
114
+
115
+ # ---------------------------------------------------------------------------
116
+ # Jurisdiction-wide facts, cited once and referenced per series.
117
+ # ---------------------------------------------------------------------------
118
+ common:
119
+ plate_types:
120
+ statute: >-
121
+ § 25 of the rozporządzenie closes the type vocabulary at FIVE, verbatim:
122
+ "Do oznaczania pojazdów stosuje się następujące wzory tablic
123
+ rejestracyjnych: 1) zwyczajne – do oznaczania wszystkich pojazdów,
124
+ z zastrzeżeniem pkt 2-5; 2) indywidualne – do oznaczania pojazdów
125
+ samochodowych; 3) zabytkowe – do oznaczania pojazdów zabytkowych;
126
+ 4) tymczasowe – do oznaczania pojazdów czasowo zarejestrowanych;
127
+ 5) dyplomatyczne – do oznaczania pojazdów należących do przedstawicielstw
128
+ dyplomatycznych, urzędów konsularnych i misji specjalnych państw obcych
129
+ oraz organizacji międzynarodowych, a także ich personelu." Every other
130
+ Polish plate — professional, military, service — exists under a DIFFERENT
131
+ delegation in art. 76 and a different instrument, which is why those
132
+ series cite different sources here.
133
+ sizes: >-
134
+ § 26 ust. 1 cuts the same plates a second way, by size: samochodowe
135
+ (jednorzędowe / dwurzędowe, and jednorzędowe zmniejszone for vehicles whose
136
+ mounting recess is undersized), motocyklowe (always two-row; also used for
137
+ agricultural tractors and for L6e/L7e quadricycles) and motorowerowe
138
+ (always two-row). A tractor may take a car plate where it has the recess
139
+ for one (ust. 2).
140
+ source: "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # §§ 25-26. Accessed 2026-08-02"
141
+ dimensions:
142
+ samochodowa_jednorzedowa: { w: 520, h: 114, unit: mm }
143
+ samochodowa_dwurzedowa: { w: 305, h: 214, unit: mm }
144
+ samochodowa_jednorzedowa_zmniejszona: { w: 305, h: 114, unit: mm }
145
+ motocyklowa: { w: 190, h: 150, unit: mm }
146
+ motorowerowa: { w: 140, h: 114, unit: mm }
147
+ corner_radius: { r: 10, unit: mm, tolerance: "-0.5 to +1.5 mm" }
148
+ border_inset: { d: 7, unit: mm, note: "the embossed frame (ramka obrzeża) sits 7 mm in from the plate edge on every size" }
149
+ tolerance: "±1 mm on length and width (pkt 2.2); total plate thickness 1.4-3.0 mm (pkt 2.8); 1 mm aluminium strip (pkt 2.1)"
150
+ source: "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # załącznik nr 12, Rysunek 1 'Wymiary i kształty tablic rejestracyjnych' (printed page 53) — read from the drawing, which carries the millimetre dimensions as leader-line callouts. Accessed 2026-08-02"
151
+ note: >-
152
+ 520 x 114 mm, NOT the 520 x 110 mm that circulates everywhere and that
153
+ Germany, the Netherlands and Spain actually use. The Polish single-line
154
+ plate is 4 mm taller than its neighbours', and the figure is a statutory
155
+ dimension on Rysunek 1, not an observation. The two-row car plate is
156
+ 305 x 214 mm, which is also not the 340 x 200 mm of the German pattern.
157
+ colorimetry:
158
+ basis: >-
159
+ Poland specifies COLOUR AS A CIE CHROMATICITY QUADRANGLE plus a luminance
160
+ factor, not as RGB or RAL. Załącznik nr 12 pkt 2.20, verbatim: "Barwa
161
+ biała, żółta, niebieska i zielona powierzchni odblaskowych oraz biała
162
+ i czarna powierzchni znaków, przy oświetleniu wzorcowym źródłem światła
163
+ D65 pod kątem 45º do normalnej do powierzchni i obserwacji wzdłuż normalnej
164
+ (geometria 45/0), powinny mieścić się w polach barwowych normalnego układu
165
+ trójchromatycznego CIE, określonych dla danej barwy przez punkty narożne
166
+ o współrzędnych trójchromatycznych podanych w tablicy 2 i odpowiadać
167
+ podanemu w tablicy 2 współczynnikowi luminancji." Every hex in this file
168
+ is therefore `hex_basis: observed`; the quadrangle is the spec and is
169
+ reproduced here so a renderer can do better than a guess.
170
+ biala: { x: [0.355, 0.305, 0.285, 0.335], y: [0.355, 0.305, 0.325, 0.375], beta: 0.35 }
171
+ czerwona: { x: [0.690, 0.595, 0.569, 0.655], y: [0.310, 0.315, 0.341, 0.345], beta: 0.05 }
172
+ niebieska: { x: [0.078, 0.150, 0.210, 0.137], y: [0.171, 0.220, 0.160, 0.038], beta: 0.01 }
173
+ zolta: { x: [0.481, 0.444, 0.494, 0.545], y: [0.518, 0.476, 0.426, 0.454], beta: 0.27 }
174
+ czarna: { x: [0.385, 0.300, 0.260, 0.345], y: [0.355, 0.270, 0.310, 0.395], beta: "<= 0.03" }
175
+ niebieska_pole_ue: { x: [0.176, 0.176, 0.140, 0.140], y: [0.140, 0.104, 0.104, 0.140], beta: 0.01, note: "a SECOND and much narrower blue, applying only to the field under the EU symbol and the PL letters — the plate's own blue (tablica dyplomatyczna) is the wider quadrangle above" }
176
+ zielona: { x: [0.250, 0.250, 0.325, 0.325], y: [0.355, 0.500, 0.565, 0.400], beta: "0.20 <= beta <= 0.40" }
177
+ retroreflection: "Tablica 1 gives the minimum and maximum coefficient of retroreflection per colour and per observation/illumination angle pair — white min 50 / max 250, yellow 30/175, green 23/100, blue 3/15 cd/lx/m2 at 20' and 5°. Green and yellow are measured for DAYLIGHT only."
178
+ source: "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # załącznik nr 12 pkt 2.18-2.21, Tablica 1 (retroreflection), Tablica 2 (daylight colour), Tablica 3 (night colour). Accessed 2026-08-02"
179
+ font:
180
+ name: null
181
+ statutory_basis: >-
182
+ NO TYPEFACE IS NAMED ANYWHERE, and the legal object is a DRAWING, exactly
183
+ as the EU dossier found for the UK, Germany, Spain and Austria. Załącznik
184
+ nr 12 pkt 2.11, in full: "Litery i cyfry na tablicach powinny być wykonane
185
+ zgodnie z wymiarami podanymi na rysunku 7." Rysunek 7 is a full
186
+ dimensioned outline drawing of all 25 letters and the 10 digits, with
187
+ construction radii labelled a/b/c/d per glyph. The drawn alphabet is
188
+ A B C D E F G H I J K L M N O P R S T U V W X Y Z — Q is absent from the
189
+ drawing as well as from § 30 ust. 1.
190
+ geometry_gap: >-
191
+ RECORDED GAP, and it is the one place Poland is WEAKER than Austria for a
192
+ renderer: the per-glyph millimetre widths live only in the drawing's
193
+ leader lines, not in any table, so this pass records the drawing as the
194
+ source without extracting numeric widths. What IS extractable in text:
195
+ pkt 2.10's tolerances (character height and width ±1.0 mm; spread within
196
+ one plate 0.8 mm on car plates and 0.5 mm elsewhere; inter-character
197
+ spacing ±1.5 mm; squareness 0.5 mm per 50 mm of character height) and
198
+ pkt 2.12's rule that layout follows Rysunki 9-25, with the substitute
199
+ rectangles of Rysunek 27 used for the digit 1 and the letters I, J, L and T.
200
+ licence: >-
201
+ PRD-PLATES §6 applies unchanged: the render layer derives glyphs from the
202
+ statutory drawing, never from a third-party TTF. Whether Poland has a
203
+ German-style §5 UrhG public-domain rule for designs published inside
204
+ statutory instruments was NOT researched in this pass — recorded gap, and
205
+ one more reason to derive rather than embed.
206
+ source: "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # załącznik nr 12 pkt 2.10-2.13 and Rysunek 7 (printed page 57), Rysunek 27 (substitute rectangles). Accessed 2026-08-02"
207
+ euro_band:
208
+ side: left
209
+ content: eu-stars+PL
210
+ statute: >-
211
+ § 28 ust. 1, verbatim: "W skrajnej lewej części tablicy rejestracyjnej
212
+ umieszcza się dodatkowo na niebieskim tle symbol Unii Europejskiej
213
+ składający się z 12 pięcioramiennych gwiazdek barwy żółtej ułożonych na
214
+ obwodzie okręgu oraz znak z literami «PL» barwy białej. Wymóg ten nie
215
+ dotyczy tablic (tablicy) rejestracyjnych dyplomatycznych."
216
+ geometry: >-
217
+ Unlike Austria, Poland DOES publish band geometry in text. Załącznik nr 12
218
+ pkt 2.5: the PL letters are 20 mm high (tolerance +1 mm) with a 4 mm stroke
219
+ (+0.5 mm); the blue field must run into the adjoining frame so that no
220
+ white or yellow strip is left between the blue and the black or red border;
221
+ height tolerance ±2 mm on two-row plates, width tolerance ±2 mm on all.
222
+ Rysunek 8 tabulates the field per plate size (a/b/c/d/e/f/g in mm):
223
+ samochodowa jednorzędowa 30/40/-/20/6.5/24/35, samochodowa dwurzędowa
224
+ 30/40/100/20/6.5/17/35, motocyklowa 26/35/70/17.5/4/8/21, motorowerowa
225
+ 22.5/30/55/15/1.5/5/15.
226
+ note: >-
227
+ The band is a property of the PLATE, not of the class: it is on ordinary,
228
+ individual, historic, temporary and professional plates and off only the
229
+ diplomatic one. Poland does NOT cross-reference Reg. (EC) 2411/98 the way
230
+ FZV Anlage 4 does — the geometry above is purely national.
231
+ source: "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # § 28 ust. 1; załącznik nr 12 pkt 2.5 and Rysunek 8. Accessed 2026-08-02"
232
+ eagle:
233
+ statute: >-
234
+ § 28 ust. 4 pkt 1: every plate carries a laser-etched OUTLINE of the eagle
235
+ of the Polish coat of arms ("grafikę obrysu wizerunku orła, o którym mowa
236
+ w ustawie z dnia 31 stycznia 1980 r. o godle, barwach i hymnie
237
+ Rzeczypospolitej Polskiej oraz o pieczęciach państwowych"), 15 mm high with
238
+ a 0.25 mm line, centred above the legalisation-sticker slot and 17 mm from
239
+ the top edge on car plates, 15 mm on motorcycle plates. § 28 ust. 6 takes
240
+ it OFF moped plates and temporary plates.
241
+ rendered: placeholder
242
+ render_note: >-
243
+ PRD-PLATES §3 placeholder rule applies. The eagle is a state emblem under
244
+ the 1980 ustawa o godle and its licensing posture was not researched here;
245
+ the render layer draws a neutral placeholder in the slot.
246
+ source: "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # § 28 ust. 4 pkt 1 and ust. 6; załącznik nr 12 pkt 2.6 lit. b. Accessed 2026-08-02"
247
+ separator:
248
+ emitted: " "
249
+ statute: >-
250
+ THE REGULATION PRESCRIBES NO SEPARATOR GLYPH AT ALL — and it says what
251
+ occupies the position instead. Załącznik nr 12 pkt 2.6 lit. a places the
252
+ laser-marked slot for the legalisation sticker (18 x 30 mm, corner radius
253
+ 3 mm, 0.25 mm line) "w poziomie – symetrycznie między ostatnim znakiem
254
+ wyróżnika województwa lub powiatu a pierwszym znakiem wyróżnika pojazdu",
255
+ 42 mm down from the top edge on car plates. The gap a reader sees between
256
+ the prefix and the serial is therefore a STICKER WELL, exactly as the gap
257
+ on an Austrian plate is a coat of arms. Every `pattern` in this file
258
+ prints a SPACE there and every regex spells the position ` ?`, because the
259
+ law prescribes a physical gap and no glyph, and a written Polish plate is
260
+ as often set solid as spaced.
261
+ source: "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # załącznik nr 12 pkt 2.6 lit. a; § 28 ust. 2-3, ust. 5 (no slot marking on temporary plates). Accessed 2026-08-02"
262
+ serial_grammar:
263
+ alphabet_source: "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # § 30 ust. 1 and § 31 ust. 1. Accessed 2026-08-02"
264
+ alphabet: >-
265
+ § 30 ust. 1, verbatim: "Numery rejestracyjne są tworzone ze zbioru
266
+ następujących 25 liter: A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, R,
267
+ S, T, U, V, W, X, Y i Z oraz cyfr od 0 do 9." Q is the only Latin letter
268
+ excluded, and it is excluded dataset-wide, prefix included.
269
+ letters_excluded_everywhere: ["Q"]
270
+ letters_excluded_vehicle_wyroznik: ["B", "D", "I", "O", "Z"]
271
+ vehicle_exclusion_note: >-
272
+ § 31 ust. 1: "Wyróżnik pojazdu, z zastrzeżeniem § 32 ust. 2, określa organ
273
+ rejestrujący, posługując się zestawem cyfr i liter stanowiących pojemność
274
+ rejestracyjną, z wyłączeniem liter B, D, I, O i Z." The five letters are
275
+ the digit look-alikes and they are excluded FROM THE VEHICLE WYRÓŻNIK
276
+ ONLY. They remain lawful in the PREFIX, where DB (Wałbrzych), DDZ
277
+ (dzierżoniowski), CIN (inowrocławski), CB (Bydgoszcz) and ZSZ
278
+ (szczecinecki) are all real codes — a distinction every existing
279
+ description of Polish plates blurs and `regex_strict` here does not.
280
+ The "z zastrzeżeniem § 32 ust. 2" carve-out is real too: an INDIVIDUAL
281
+ wyróżnik is chosen by the owner, so the five letters are available there.
282
+ no_leading_zero_rule: false
283
+ no_leading_zero_note: >-
284
+ There is NO leading-zero rule in Polish law, unlike Austria's. The
285
+ statutory ranges are written "od 00001 do 99999", "od 0001 do 9999",
286
+ "od 001 do 999", "od 01 do 99" and "od 1 do 9" — so a zero is significant
287
+ in every position except that the all-zero serial is excluded, and
288
+ "DW 00123" is a well-formed Wrocław plate.
289
+ layouts_source: "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # § 30 ust. 2 pkt 1-7, the complete enumeration of every layout for every plate type, split by whether the powiat wyróżnik is one letter or two. Accessed 2026-08-02"
290
+ exhaustion_order: >-
291
+ § 30 ust. 2 lists the layouts "tworzony kolejno w układzie" — IN ORDER OF
292
+ EXHAUSTION. A layout is only reached when the previous one is used up, so
293
+ the list is an era-inference signal for a parse API: within one powiat, a
294
+ plain five-digit serial is older than a four-digit-plus-letter one, which
295
+ is older than three-digits-plus-two-letters. The regulation publishes the
296
+ ORDER but no dates, so the inference is ordinal, never calendar.
297
+ offensive_serials:
298
+ statute: "§ 32 ust. 3: an individual wyróżnik 'powinien być wyrazem, skrótem lub określeniem, które nie zawierają w swoim znaczeniu w języku polskim albo obcym treści obraźliwych lub niezgodnych z zasadami współżycia społecznego.'"
299
+ modelled: false
300
+ modelled_note: >-
301
+ NOT encoded as a charset exclusion, deliberately, and for the same reason
302
+ Austria's § 26 Abs. 8 list is not: it is a refusal standard applied at
303
+ assignment, it binds only INDIVIDUAL plates, and unlike Austria's the
304
+ Polish text enumerates nothing at all — it is a general clause, so there
305
+ is no list to encode even if encoding one were right.
306
+ absent_classes:
307
+ export: "No export series. § 25 closes the type list at five and none of them is an export plate; the TEMPORARY plate does that job, and has since at least 1993 — Dz. U. 1993 nr 37 poz. 164 § 13 ust. 3 gave tablice tymczasowe the express purpose of 'umożliwienia wyjazdu lub wywozu tych pojazdów za granicę'."
308
+ taxi: "No taxi series found in §§ 25-32 or załączniki 12-13."
309
+ seasonal: "No seasonal series — no Polish analogue of the German Saisonkennzeichen was found."
310
+ agricultural: "No agricultural series. § 26 ust. 1 pkt 2 puts agricultural tractors on the MOTORCYCLE plate, and ust. 2 lets them take a car plate where the mounting recess suits — so they are covered by pl-motorcycle and pl-standard rather than by a series of their own."
311
+ trailer: "No trailer series. § 26 ust. 1 pkt 1 lit. a puts trailers on ordinary car plates; załącznik nr 12 pkt 2.4 makes the trailer plate a SINGLE plate rather than a set, which is a manufacturing fact, not a format one."
312
+ dealer: "Superseded rather than absent — see pl-professional. The pre-2019 answer was the tablica tymczasowa badawcza."
313
+ research_badawcza: >-
314
+ ABOLISHED, and dated. Dz. U. 2002 nr 133 poz. 1123 § 18 ust. 7 and § 21
315
+ ust. 2 pkt 6 defined a "tablica tymczasowa badawcza" — red on white,
316
+ letter + digit voivodeship, two digits, then the FIXED letter B marking the
317
+ plate's purpose — for vehicles run under homologation and R&D testing.
318
+ No such type survives in § 25 of the 2024 instrument; the professional
319
+ registration regime of 2019 replaced it. Recorded as a class this
320
+ jurisdiction once had and no longer issues; the plates themselves are not
321
+ modelled as a series because the pass did not establish their withdrawal
322
+ date, which is a recorded gap.
323
+
324
+ series:
325
+
326
+ # =========================================================================
327
+ # THE CURRENT STANDARD SERIES — black on white, EU field since 2 May 2006.
328
+ # =========================================================================
329
+ - id: pl-standard
330
+ class: standard
331
+ categories: [car, van, truck, bus, trailer]
332
+ period: { start: 2006 }
333
+ period_evidence: enacted-commencement
334
+ matching: strict
335
+ format:
336
+ pattern: "LL 99999"
337
+ regex: '\A(?:[A-Z]{2} ?(?:\d{5}|\d{4}[A-Z]|\d{3}[A-Z]{2}|\d[A-Z]\d{3}|\d[A-Z]{2}\d{2})|[A-Z]{3} ?(?:[A-Z]\d{3}|\d{2}[A-Z]{2}|\d[A-Z]\d{2}|\d{2}[A-Z]\d|\d[A-Z]{2}\d|[A-Z]{2}\d{2}|\d{5}|\d{4}[A-Z]|\d{3}[A-Z]{2}))\z'
338
+ regex_strict: '\A(?:[ABCDEFGIJKLMNOPRSTVWXYZ][A-PR-Z] ?(?:\d{5}|\d{4}[ACEFGHJKLMNPRSTUVWXY]|\d{3}[ACEFGHJKLMNPRSTUVWXY]{2}|\d[ACEFGHJKLMNPRSTUVWXY]\d{3}|\d[ACEFGHJKLMNPRSTUVWXY]{2}\d{2})|[ABCDEFGIJKLMNOPRSTVWXYZ][A-PR-Z]{2} ?(?:[ACEFGHJKLMNPRSTUVWXY]\d{3}|\d{2}[ACEFGHJKLMNPRSTUVWXY]{2}|\d[ACEFGHJKLMNPRSTUVWXY]\d{2}|\d{2}[ACEFGHJKLMNPRSTUVWXY]\d|\d[ACEFGHJKLMNPRSTUVWXY]{2}\d|[ACEFGHJKLMNPRSTUVWXY]{2}\d{2}|\d{5}|\d{4}[ACEFGHJKLMNPRSTUVWXY]|\d{3}[ACEFGHJKLMNPRSTUVWXY]{2}))\z'
339
+ charset:
340
+ letters_excluded: ["Q"]
341
+ letters_excluded_vehicle_wyroznik: ["B", "D", "I", "O", "Z"]
342
+ notes: >-
343
+ Two DIFFERENT exclusions, and conflating them is the standard error.
344
+ § 30 ust. 1 excludes Q from the whole 25-letter alphabet, prefix
345
+ included. § 31 ust. 1 excludes B, D, I, O and Z from the VEHICLE
346
+ wyróżnik only — they stay lawful in the prefix, where DB, DDZ, CIN,
347
+ CB and ZSZ are real codes in załącznik nr 13. Hence [A-PR-Z] on the
348
+ prefix and [ACEFGHJKLMNPRSTUVWXY] on the serial in regex_strict.
349
+ progression: >-
350
+ § 30 ust. 2 pkt 1. For a powiat whose wyróżnik is ONE letter (prefix two
351
+ characters) the vehicle wyróżnik is five characters, in this exhaustion
352
+ order: five digits 00001-99999; four digits 0001-9999 and a letter;
353
+ three digits 001-999 and two letters; a digit 1-9, a letter and three
354
+ digits 001-999; a digit 1-9, two letters and two digits 01-99. For a
355
+ powiat whose wyróżnik is TWO letters (prefix three characters) it is
356
+ four or five: a letter and three digits; two digits and two letters; a
357
+ digit, a letter and two digits; two digits, a letter and a digit; a
358
+ digit, two letters and a digit; two letters and two digits; then five
359
+ digits; four digits and a letter; three digits and two letters. The list
360
+ is ordered "tworzony kolejno" — each layout is reached only when the
361
+ previous is exhausted, which makes the layout an ORDINAL age signal
362
+ within a powiat. The regulation publishes no dates against it.
363
+ prefix_split_note: >-
364
+ The two-or-three-letter prefix is NOT self-delimiting, but for this
365
+ series it is deterministic: every five-character layout begins with a
366
+ DIGIT, so a letter in the third position means a three-character prefix
367
+ and a digit there means a two-character one. See
368
+ plates/_decode/plates/_decode/pl-powiats.yml, prefix_split.
369
+ separator_note: >-
370
+ The printed gap between prefix and serial is the LEGALISATION-STICKER
371
+ WELL, not a glyph: załącznik nr 12 pkt 2.6 lit. a puts the 18 x 30 mm
372
+ laser-marked slot "symetrycznie między ostatnim znakiem wyróżnika
373
+ województwa lub powiatu a pierwszym znakiem wyróżnika pojazdu". The law
374
+ prescribes no separator character at all, so `pattern` prints a space
375
+ and the regex spells the position ` ?`.
376
+ design:
377
+ plate: { w: 520, h: 114, unit: mm }
378
+ plate_variants:
379
+ - { w: 305, h: 214, unit: mm, note: "samochodowa dwurzędowa — the two-row rear plate, used where the mounting recess requires it (§ 33 ust. 5)" }
380
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec_note: "§ 27 ust. 2 pkt 1 names the colour as 'barwy czarnej na białym tle'; załącznik nr 12 Tablica 2 bounds white to the CIE quadrangle in common.colorimetry.biala with a luminance factor of 0.35" }
381
+ foreground: "#000000"
382
+ band: { side: left, color: "#003399", content: eu-stars+PL, hex_basis: observed, note: "the EU field's blue has its OWN and much narrower quadrangle (common.colorimetry.niebieska_pole_ue), distinct from the blue of the diplomatic plate" }
383
+ emblem: { present: true, rendered: placeholder, position: "laser-etched above the legalisation-sticker slot, 17 mm from the top edge", content: "outline of the eagle of the Polish coat of arms, 15 mm high, 0.25 mm line (§ 28 ust. 4 pkt 1)" }
384
+ rear_differs: false
385
+ display: "front and rear (§ 33 ust. 1); front is always the single-row plate (ust. 4); trailers, agricultural tractors, motorcycles and mopeds carry a rear plate only"
386
+ extra: "a keeper may additionally obtain a legalised DUPLICATE plate bearing the same number, to be fixed to a bicycle carrier that covers the rear plate (art. 73 ust. 1b of the ustawa; § 26 ust. 5) — a genuinely unusual provision and a trap for any consumer that assumes one plate number means at most two physical plates"
387
+ region_encoding: "plates/_decode/pl-powiats.yml"
388
+ region_encoding_mechanism: >-
389
+ § 30 ust. 2 pkt 1: the first letter is the voivodeship, the second — or
390
+ second and third — the powiat, and § 31 ust. 2 puts the whole table inside
391
+ the instrument as załącznik nr 13. Unlike Germany's, the list needs no
392
+ Bundesanzeiger hunt, so the decode file carries all 380 rows and all 689
393
+ prefixes from the primary.
394
+ sources:
395
+ - "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # § 27 ust. 2 (black on white), § 28 (EU field, eagle), § 30 ust. 1-2 pkt 1 (alphabet and every layout), § 31 (vehicle-wyróżnik exclusions, the annex, the second-letter rule), § 33 (mounting); załącznik nr 12 Rysunek 1 (520 x 114 mm) and Tablica 2 (colour). Accessed 2026-08-02"
396
+ - "https://api.sejm.gov.pl/eli/acts/DU/2006/489/text/O/D20060489.pdf # Dz. U. 2006 nr 70 poz. 489: the amendment that replaced the Polish-flag band with the twelve-star EU symbol, and § 6, verbatim: 'Rozporządzenie wchodzi w życie z dniem 2 maja 2006 r.' — the period.start of this series. § 2 keeps the older plates valid, § 3 makes the swap voluntary and number-preserving. Accessed 2026-08-02"
397
+ - "https://api.sejm.gov.pl/eli/acts/DU/2024/1251/text/O/D20241251.pdf # Prawo o ruchu drogowym art. 73 ust. 1, 1a, 1b, 1d and art. 76 ust. 1 — the enabling frame and the number-retention rule. Accessed 2026-08-02"
398
+ notes: >-
399
+ THE POLISH STANDARD SERIES. period.start 2006 is a REAL commencement and
400
+ not an instrument date: the EU field became mandatory on 2 May 2006 under
401
+ Dz. U. 2006 nr 70 poz. 489 § 6 — TWO YEARS AFTER accession, which is
402
+ exactly the kind of gap a plausible guess closes wrongly. The FORMAT is
403
+ six years older than the design: the voivodeship+powiat frame dates from
404
+ 1 May 2000 (see pl-standard-preeu), which is why this entry and its
405
+ predecessor share a grammar and differ in the blue field. Both remain on
406
+ the road: § 2 of the 2006 amendment preserved existing plates and § 3 made
407
+ the swap optional and number-preserving, so flag-band plates are lawful
408
+ indefinitely and the two series are genuinely parallel. GRAMMAR CAVEAT,
409
+ stated rather than hidden: the layout list has been WIDENED inside this
410
+ series' period — Dz. U. 2017 poz. 2355 § 57 pkt 2 commenced six further
411
+ layouts on 1 July 2018, and this pass did not diff every amendment between
412
+ 2006 and 2024, so the regex is the CURRENT union applied across the whole
413
+ period and is wider than what was issued in its early years. A recorded
414
+ gap, and the reason a per-year format claim here would be false precision.
415
+
416
+ # =========================================================================
417
+ # ONE SERIES BACK — the same numbers under a POLISH FLAG band, 2000-2006.
418
+ # =========================================================================
419
+ - id: pl-standard-preeu
420
+ class: standard
421
+ categories: [car, van, truck, bus, trailer]
422
+ period: { start: 2000, end: 2006 }
423
+ period_evidence: instrument-dated-both-ends
424
+ matching: strict
425
+ format:
426
+ pattern: "LL 99999"
427
+ regex: '\A(?:[A-Z]{2} ?(?:\d{5}|\d{4}[A-Z]|\d{3}[A-Z]{2})|[A-Z]{3} ?(?:\d{4}|\d{3}[A-Z]|[A-Z]\d{3}|\d{2}[A-Z]{2}|\d[A-Z]\d{2}|\d{2}[A-Z]\d|\d[A-Z]{2}\d))\z'
428
+ regex_strict: '\A(?:[ABCDEFGIJKLMNOPRSTVWXYZ][A-PR-Z] ?(?:\d{5}|\d{4}[A-PR-Z]|\d{3}[A-PR-Z]{2})|[ABCDEFGIJKLMNOPRSTVWXYZ][A-PR-Z]{2} ?(?:\d{4}|\d{3}[A-PR-Z]|[A-PR-Z]\d{3}|\d{2}[A-PR-Z]{2}|\d[A-PR-Z]\d{2}|\d{2}[A-PR-Z]\d|\d[A-PR-Z]{2}\d))\z'
429
+ charset:
430
+ letters_excluded: ["Q"]
431
+ notes: >-
432
+ regex_strict here carries ONLY the Q exclusion, because the B/D/I/O/Z
433
+ rule is younger than the series' start: it first appears as § 22
434
+ ust. 1 of Dz. U. 2002 nr 133 poz. 1123, in force 21 September 2002,
435
+ and the 1999 instrument that opened this series has no equivalent.
436
+ Applying today's exclusion backwards over 2000-2002 would be a claim
437
+ this pass cannot make.
438
+ grammar_widening: >-
439
+ THE GRAMMAR CHANGED INSIDE THIS SERIES, on a sourced date. Under
440
+ Dz. U. 1999 nr 59 poz. 632 § 21 ust. 2 pkt 1 (1 May 2000) a one-letter
441
+ powiat had five digits, then four digits and a letter, then three digits
442
+ and two letters; a two-letter powiat had four digits, then three digits
443
+ and a letter — five layouts in all. Dz. U. 2002 nr 133 poz. 1123 § 21
444
+ ust. 2 pkt 1 (21 September 2002) DROPPED the two bare-digit layouts for
445
+ two-letter powiats and added five mixed ones. The regex above is the
446
+ UNION of both, which is the series' own issuing grammar over its whole
447
+ period; `matching: strict` is therefore still correct, but a consumer
448
+ dating a specific plate must know that the mixed layouts cannot predate
449
+ 21 September 2002.
450
+ design:
451
+ plate: { w: 520, h: 114, unit: mm }
452
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
453
+ foreground: "#000000"
454
+ band: { side: left, color: "#003399", content: "polish-flag+PL", hex_basis: observed }
455
+ band_note: >-
456
+ THE DIFFERENCE THAT MAKES THIS A SERIES. Dz. U. 2002 nr 133 poz. 1123
457
+ § 19 ust. 1, verbatim: "Każda tablica posiada dodatkowo na niebieskim tle
458
+ symbol barw Rzeczypospolitej Polskiej i litery «PL» barwy białej. Wymóg
459
+ ten nie dotyczy tablic (tablicy) dyplomatycznych." Its 1998 predecessor
460
+ put it more plainly still (Dz. U. 1998 nr 57 poz. 365 § 18): "Każda
461
+ tablica na niebieskim tle ma dodatkowo symbol flagi polskiej barwy
462
+ biało-czerwonej i litery «PL» barwy białej." So the band existed before
463
+ accession and carried the NATIONAL flag, not the EU stars, until 2 May
464
+ 2006 — a design fact that is routinely lost.
465
+ emblem: { present: false, note: "the laser-etched eagle outline is a later addition; it is required by § 28 ust. 4 pkt 1 of the current instrument and was introduced by Dz. U. 2019 poz. 1272, whose § 9 gave the trade twelve further months for existing stock" }
466
+ region_encoding: "plates/_decode/pl-powiats.yml"
467
+ region_encoding_note: >-
468
+ Decodable through the same table, with a caution: plates/_decode/pl-powiats.yml holds the
469
+ codes in force in 2026, and the annex has been amended repeatedly since
470
+ 2000. Codes added later (for example the second voivodeship letters, and
471
+ the extra powiat codes issued as pools ran out) cannot appear on a plate
472
+ from this period, and codes withdrawn since are absent from the table.
473
+ sources:
474
+ - "https://api.sejm.gov.pl/eli/acts/DU/1999/632/text/O/D19990632.pdf # Dz. U. 1999 nr 59 poz. 632: § 21 ust. 2 pkt 1 (the 2000 grammar), § 24 (the wyróżniki annex), § 39 (the pre-reform code tables and the stock rule), § 41 ('Do dnia 30 kwietnia 2000 r. organ rejestrujący wydaje tablice rejestracyjne spełniające warunki określone w § 39'), § 49 (commencement of §§ 21-24 on 1 May 2000). Accessed 2026-08-02"
475
+ - "https://api.sejm.gov.pl/eli/acts/DU/2002/1123/text/O/D20021123.pdf # Dz. U. 2002 nr 133 poz. 1123: § 18 ust. 3 (black on white), § 19 ust. 1 (the Polish-flag band), § 21 ust. 2 pkt 1 (the widened grammar), § 22 ust. 1 (the first appearance of the B/D/I/O/Z exclusion). In force 21 September 2002. Accessed 2026-08-02"
476
+ - "https://api.sejm.gov.pl/eli/acts/DU/2006/489/text/O/D20060489.pdf # Dz. U. 2006 nr 70 poz. 489 § 6: the EU field from 2 May 2006 — this series' period.end. Accessed 2026-08-02"
477
+ notes: >-
478
+ THE FLAG-BAND PLATE, 1 May 2000 to 2 May 2006 — a design change at the end
479
+ and a system change at the beginning, both instrument-dated. period.start
480
+ is the commencement carved out of Dz. U. 1999 nr 59 poz. 632 § 49 for the
481
+ plate provisions ("§ 22-24, § 29 i 30, które wchodzą w życie z dniem
482
+ 1 maja 2000 r."), NOT the 1 July 1999 on which the rest of that instrument
483
+ commenced and NOT the 2001 that secondary descriptions repeat. period.end
484
+ is Dz. U. 2006 nr 70 poz. 489 § 6. Distinct from pl-standard by the band
485
+ alone, and from pl-standard-pre2000 by the entire coding system.
486
+
487
+ # =========================================================================
488
+ # TWO SERIES BACK — the pre-reform system, 49 voivodeships, ends 2000-04-30.
489
+ # =========================================================================
490
+ - id: pl-standard-pre2000
491
+ class: standard
492
+ categories: [car, van, truck, bus, trailer]
493
+ period: { start: 1993, end: 2000 }
494
+ period_evidence: instrument-dated-both-ends
495
+ matching: strict
496
+ format:
497
+ pattern: "LLL 9999"
498
+ regex: '\A[A-Z]{3} ?(?:\d{4}|\d{3}[A-Z])\z'
499
+ regex_strict: '\A[A-PR-Z]{3} ?(?:\d{4}|\d{3}[A-PR-Z])\z'
500
+ charset:
501
+ letters_excluded: ["Q"]
502
+ notes: "Dz. U. 1993 nr 37 poz. 164 § 19 and Dz. U. 1998 nr 57 poz. 365 § 20 ust. 1 both give the same 25-letter set (A-Z without Q); neither carries the B/D/I/O/Z rule, which is a 2002 invention."
503
+ progression: >-
504
+ Dz. U. 1998 nr 57 poz. 365 § 20 ust. 2 pkt 1, verbatim: "na tablicach
505
+ zwyczajnych dwie pierwsze litery stanowią wyróżnik województwa, trzecia
506
+ litera i cztery cyfry w przedziale od 0001 do 9999 lub trzecia litera
507
+ i trzy cyfry w przedziale od 001 do 999 oraz litera stanowią wyróżnik
508
+ pojazdu." The 1993 instrument says the same in § 18 ust. 1. So the
509
+ pre-reform plate is TWO letters of voivodeship and a THREE-character
510
+ prefix in total — structurally the inverse of the post-2000 plate, where
511
+ one letter is the voivodeship and the prefix is two or three characters.
512
+ design:
513
+ plate: { w: null, h: null, unit: mm }
514
+ dimensions_note: "no dimensions were secured for this series: Dz. U. 1993 nr 37 poz. 164 § 16 ust. 1 delegates them entirely — 'Tablice rejestracyjne powinny odpowiadać wymaganiom określonym w obowiązującej normie' — and Dz. U. 1999 nr 59 poz. 632 § 39 ust. 5 names that norm as PN 5-73200, which was not fetched in this pass. Recorded gap."
515
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
516
+ foreground: "#000000"
517
+ colour_evidence: >-
518
+ WHITE IS SOURCED ONLY FROM 1998 ONWARD. Dz. U. 1998 nr 57 poz. 365 § 17
519
+ ust. 3 is the earliest instrument read here that states a colour: "Na
520
+ tablicy zwyczajnej wytłoczony jest numer rejestracyjny składający się
521
+ z wyróżnika województwa i wyróżnika pojazdu barwy czarnej na białym
522
+ tle." The 1993 instrument states none at all, delegating to the norm, so
523
+ the transition from the black plate that preceded it IS NOT DATED HERE.
524
+ The widely repeated claim that Poland went from black to white in a
525
+ particular year is not asserted; it is a recorded gap whose answer lives
526
+ in PN 5-73200 and its predecessors.
527
+ band: { side: left, color: "#003399", content: "polish-flag+PL", hex_basis: observed, note: "sourced for 1998 onward only, from § 18 of Dz. U. 1998 nr 57 poz. 365; whether the 1993-1998 plate carried the band was not established" }
528
+ emblem: { present: false }
529
+ region_encoding: none
530
+ region_encoding_note: >-
531
+ NOT decodable through plates/_decode/pl-powiats.yml, and a parse API must
532
+ not route a pre-2000 string through it. This series encodes the OLD
533
+ 49-voivodeship system in the first TWO letters, a scheme with no
534
+ relationship to the one-letter voivodeship codes of załącznik nr 13. The
535
+ code lists exist and are pinned in `sources` — Dz. U. 1993 nr 37 poz. 164
536
+ § 20, and the two transitional tables in Dz. U. 1999 nr 59 poz. 632 § 39
537
+ ust. 1 and ust. 2 — but they are NOT shipped as a decode table here,
538
+ deliberately: both are scanned typescript whose OCR is visibly unreliable
539
+ (the 1999 tables render "WS" as "W5" and "KA" as "K~"), and a code table
540
+ transcribed from a bad scan is worse than an honest gap. A dedicated pass
541
+ with page images is the fix, and this is a recorded L4 target.
542
+ sources:
543
+ - "https://api.sejm.gov.pl/eli/acts/DU/1993/164/text/O/D19930164.pdf # Dz. U. 1993 nr 37 poz. 164 (rozporządzenie MTiGM z 14 kwietnia 1993 r. w sprawie rejestracji, ewidencji i oznaczania pojazdów): § 13 (the four plate types), § 16 ust. 1 (dimensions delegated to the norm), § 18 ust. 1 (the two-letter voivodeship grammar), § 19 (the 25-letter alphabet), § 20 (the voivodeship code table). Accessed 2026-08-02"
544
+ - "https://api.sejm.gov.pl/eli/acts/DU/1998/365/text/O/D19980365.pdf # Dz. U. 1998 nr 57 poz. 365: § 17 (colours for all five plate types), § 18 (the Polish-flag band), § 20 ust. 2 (the grammar), § 21 (the 49-voivodeship code table). Accessed 2026-08-02"
545
+ - "https://api.sejm.gov.pl/eli/acts/DU/1999/632/text/O/D19990632.pdf # Dz. U. 1999 nr 59 poz. 632 § 39 ust. 2, the transitional stock rule that ENDS this series: plates bearing the pre-reform voivodeship codes could be issued from stock 'aż do wyczerpania się tych zapasów, jednak nie dłużej niż do dnia 30 kwietnia 2000 r.'; § 41 says the same from the other side; § 42 keeps them valid on the road indefinitely. Accessed 2026-08-02"
546
+ notes: >-
547
+ THE PRE-REFORM PLATE. period.end 2000 is SOURCED AT THE DAY, from the
548
+ complement of the reform: Dz. U. 1999 nr 59 poz. 632 § 41 and § 39 ust. 2
549
+ allow issue of the old codes only "do dnia 30 kwietnia 2000 r.", so
550
+ 30 April 2000 is the last lawful ASSIGNMENT. HOW LONG THEY REMAIN VALID ON
551
+ THE ROAD IS NOT A GAP — § 42 answers it in terms ("Tablice (tablica)
552
+ rejestracyjne wydane na podstawie dotychczasowych przepisów ... zachowują
553
+ swoją ważność") and art. 73 ust. 1a of the current ustawa still lets a
554
+ buyer keep a conforming plate, so pre-2000 plates are lawful indefinitely
555
+ and are re-issued to new keepers to this day. period.start 1993 is
556
+ INSTRUMENT-IN-FORCE and says so: the format is certainly older than the
557
+ 1993 rozporządzenie, whose own § 29 preserves plates issued under earlier
558
+ rules, but the earlier instrument was not fetched in this pass.
559
+
560
+ # =========================================================================
561
+ # MOTORCYCLES — and, unusually, agricultural tractors and L6e/L7e quads.
562
+ # =========================================================================
563
+ - id: pl-motorcycle
564
+ class: motorcycle
565
+ categories: [motorcycle, tractor, quadricycle]
566
+ period: { start: 2006 }
567
+ period_evidence: enacted-commencement
568
+ matching: strict
569
+ format:
570
+ pattern: "LL 9999"
571
+ regex: '\A(?:[A-Z]{2} ?(?:\d{4}|\d{3}[A-Z]|\d{2}[A-Z]\d|\d[A-Z]\d{2}|[A-Z]\d{3}|\d{2}[A-Z]{2}|\d[A-Z]{2}\d|[A-Z]{2}\d{2})|[A-Z]{3} ?(?:[A-Z]\d{3}|\d{2}[A-Z]{2}|\d[A-Z]\d{2}|\d{2}[A-Z]\d|\d[A-Z]{2}\d|[A-Z]{2}\d{2}|[A-Z]\d{2}[A-Z]|[A-Z]\d[A-Z]{2}))\z'
572
+ regex_strict: '\A(?:[ABCDEFGIJKLMNOPRSTVWXYZ][A-PR-Z] ?(?:\d{4}|\d{3}[ACEFGHJKLMNPRSTUVWXY]|\d{2}[ACEFGHJKLMNPRSTUVWXY]\d|\d[ACEFGHJKLMNPRSTUVWXY]\d{2}|[ACEFGHJKLMNPRSTUVWXY]\d{3}|\d{2}[ACEFGHJKLMNPRSTUVWXY]{2}|\d[ACEFGHJKLMNPRSTUVWXY]{2}\d|[ACEFGHJKLMNPRSTUVWXY]{2}\d{2})|[ABCDEFGIJKLMNOPRSTVWXYZ][A-PR-Z]{2} ?(?:[ACEFGHJKLMNPRSTUVWXY]\d{3}|\d{2}[ACEFGHJKLMNPRSTUVWXY]{2}|\d[ACEFGHJKLMNPRSTUVWXY]\d{2}|\d{2}[ACEFGHJKLMNPRSTUVWXY]\d|\d[ACEFGHJKLMNPRSTUVWXY]{2}\d|[ACEFGHJKLMNPRSTUVWXY]{2}\d{2}|[ACEFGHJKLMNPRSTUVWXY]\d{2}[ACEFGHJKLMNPRSTUVWXY]|[ACEFGHJKLMNPRSTUVWXY]\d[ACEFGHJKLMNPRSTUVWXY]{2}))\z'
573
+ charset: { letters_excluded: ["Q"], letters_excluded_vehicle_wyroznik: ["B", "D", "I", "O", "Z"], notes: "§ 30 ust. 1 and § 31 ust. 1, as pl-standard" }
574
+ progression: >-
575
+ § 30 ust. 2 pkt 3. The vehicle wyróżnik is ALWAYS four characters
576
+ whatever the prefix length, which is the structural difference from the
577
+ car series and the reason the prefix boundary here is resolved by total
578
+ length rather than by the third character.
579
+ prefix_split_caveat: >-
580
+ THE CAR RULE DOES NOT APPLY. § 30 ust. 2 pkt 3 lit. a gives one-letter
581
+ powiats the layouts "litera i trzy cyfry" and "dwie litery i dwie
582
+ cyfry", which BEGIN WITH A LETTER, so a letter in the third position no
583
+ longer proves a three-character prefix. Six of those eight layouts —
584
+ the third to eighth tirets — were added by Dz. U. 2017 poz. 2355 and
585
+ commenced on 1 July 2018 by its § 57 pkt 2, so the ambiguity is itself
586
+ younger than the series.
587
+ grammar_widening_note: >-
588
+ As pl-standard: the regex is the CURRENT union applied across the whole
589
+ period, and is wider than what was issued before 1 July 2018. Recorded
590
+ gap rather than a per-year claim.
591
+ design:
592
+ plate: { w: 190, h: 150, unit: mm, note: "always two-row (§ 26 ust. 1 pkt 2)" }
593
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
594
+ foreground: "#000000"
595
+ band: { side: left, color: "#003399", content: eu-stars+PL, hex_basis: observed, note: "the EU field on a motorcycle plate is 26 x 35 mm per Rysunek 8, against 30 x 40 mm on a car plate" }
596
+ emblem: { present: true, rendered: placeholder, content: "eagle outline, 15 mm from the top edge on this size" }
597
+ rear_differs: false
598
+ display: "rear only for motorcycles, mopeds, trailers and agricultural tractors (§ 33 ust. 1); L2e, L5e, L6e and L7e vehicles also carry one at the front where they have the recess (ust. 2); a tractor may carry it at the front where its construction requires (ust. 3)"
599
+ manufacture: "single plate, not a set (załącznik nr 12 pkt 2.4) — except that three-wheelers of class L5e and L2e and quadricycles of L7e/L6e may be given a pair"
600
+ region_encoding: "plates/_decode/pl-powiats.yml"
601
+ variants:
602
+ - class: motorcycle
603
+ format: { pattern: "LL 9999" }
604
+ note: >-
605
+ THE MOTORCYCLE-TRAILER RULE, which has no analogue in the neighbouring
606
+ jurisdictions and which a vehicle-keyed consumer will misread. § 33
607
+ ust. 6: "Z tyłu przyczepy motocyklowej umieszcza się tablicę
608
+ rejestracyjną motocyklową przeniesioną z motocykla, który ciągnie
609
+ przyczepę." The motorcycle's own plate is PHYSICALLY MOVED to the
610
+ trailer while towing — so one number lawfully appears on two different
611
+ vehicles at different moments, and never on both at once.
612
+ sources:
613
+ - "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # § 33 ust. 6. Accessed 2026-08-02"
614
+ sources:
615
+ - "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # § 26 ust. 1 pkt 2 (motorcycle plates also carry agricultural tractors and L6e/L7e), § 27 ust. 2, § 30 ust. 2 pkt 3, § 33; załącznik nr 12 Rysunek 1 (190 x 150 mm) and Rysunek 8. Accessed 2026-08-02"
616
+ - "https://api.sejm.gov.pl/eli/acts/DU/2017/2355/text/O/D20172355.pdf # Dz. U. 2017 poz. 2355 § 57 pkt 2: § 31 ust. 2 pkt 3 lit. a tiret trzecie-ósme — the six added motorcycle layouts — enter into force 1 July 2018. Accessed 2026-08-02"
617
+ - "https://api.sejm.gov.pl/eli/acts/DU/2006/489/text/O/D20060489.pdf # § 6: the EU field from 2 May 2006, which is this series' period.start for the same reason as pl-standard. Accessed 2026-08-02"
618
+ notes: >-
619
+ MOTORCYCLE PLATES, and the class carries more than motorcycles: § 26
620
+ ust. 1 pkt 2 puts agricultural tractors and the "samochodowy inny" L6e and
621
+ L7e quadricycles on the same 190 x 150 mm two-row plate, so a Polish
622
+ tractor wears a motorcycle plate unless it happens to have a car-plate
623
+ recess (ust. 2). period.start 2006 is the EU-field commencement, as for
624
+ pl-standard; the format frame is again older.
625
+
626
+ # =========================================================================
627
+ # MOPEDS — the smallest plate, and the one with no eagle.
628
+ # =========================================================================
629
+ - id: pl-moped
630
+ class: moped
631
+ categories: [moped]
632
+ period: { start: 2006 }
633
+ period_evidence: enacted-commencement
634
+ matching: strict
635
+ format:
636
+ pattern: "LL 9999"
637
+ regex: '\A(?:[A-Z]{2} ?(?:\d{4}|\d{3}[A-Z]|\d{2}[A-Z]\d|\d[A-Z]\d{2}|[A-Z]\d{3}|\d{2}[A-Z]{2}|\d[A-Z]{2}\d|[A-Z]{2}\d{2})|[A-Z]{3} ?(?:[A-Z]\d{3}|\d{2}[A-Z]{2}|\d[A-Z]\d{2}|\d{2}[A-Z]\d|\d[A-Z]{2}\d|[A-Z]{2}\d{2}|[A-Z]\d{2}[A-Z]|[A-Z]\d[A-Z]{2}))\z'
638
+ regex_strict: '\A(?:[ABCDEFGIJKLMNOPRSTVWXYZ][A-PR-Z] ?(?:\d{4}|\d{3}[ACEFGHJKLMNPRSTUVWXY]|\d{2}[ACEFGHJKLMNPRSTUVWXY]\d|\d[ACEFGHJKLMNPRSTUVWXY]\d{2}|[ACEFGHJKLMNPRSTUVWXY]\d{3}|\d{2}[ACEFGHJKLMNPRSTUVWXY]{2}|\d[ACEFGHJKLMNPRSTUVWXY]{2}\d|[ACEFGHJKLMNPRSTUVWXY]{2}\d{2})|[ABCDEFGIJKLMNOPRSTVWXYZ][A-PR-Z]{2} ?(?:[ACEFGHJKLMNPRSTUVWXY]\d{3}|\d{2}[ACEFGHJKLMNPRSTUVWXY]{2}|\d[ACEFGHJKLMNPRSTUVWXY]\d{2}|\d{2}[ACEFGHJKLMNPRSTUVWXY]\d|\d[ACEFGHJKLMNPRSTUVWXY]{2}\d|[ACEFGHJKLMNPRSTUVWXY]{2}\d{2}|[ACEFGHJKLMNPRSTUVWXY]\d{2}[ACEFGHJKLMNPRSTUVWXY]|[ACEFGHJKLMNPRSTUVWXY]\d[ACEFGHJKLMNPRSTUVWXY]{2}))\z'
639
+ charset: { letters_excluded: ["Q"], letters_excluded_vehicle_wyroznik: ["B", "D", "I", "O", "Z"] }
640
+ note: "§ 30 ust. 2 pkt 3 governs 'tablice rejestracyjne zwyczajne motocyklowe i motorowerowe' together, so the grammar is identical to pl-motorcycle and the series exists because the PLATE differs."
641
+ design:
642
+ plate: { w: 140, h: 114, unit: mm, note: "always two-row; the smallest Polish plate, and almost square" }
643
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
644
+ foreground: "#000000"
645
+ band: { side: left, color: "#003399", content: eu-stars+PL, hex_basis: observed, note: "22.5 x 30 mm on this size (Rysunek 8) — the EU field shrinks with the plate but is never dropped" }
646
+ emblem: { present: false, note: "§ 28 ust. 6 expressly disapplies the eagle to moped plates and to temporary plates — the only two civil plates without it" }
647
+ display: "rear only (§ 33 ust. 1)"
648
+ manufacture: "single plate (załącznik nr 12 pkt 2.4)"
649
+ region_encoding: "plates/_decode/pl-powiats.yml"
650
+ sources:
651
+ - "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # § 26 ust. 1 pkt 3, § 27 ust. 5, § 28 ust. 6, § 30 ust. 2 pkt 3; załącznik nr 12 Rysunek 1 (140 x 114 mm) and Rysunek 8. Accessed 2026-08-02"
652
+ - "https://api.sejm.gov.pl/eli/acts/DU/2006/489/text/O/D20060489.pdf # § 6, the EU field from 2 May 2006. Accessed 2026-08-02"
653
+ notes: >-
654
+ MOPED PLATES. Poland REGISTERS mopeds — there is no German-style
655
+ Versicherungskennzeichen and no annual colour cycle; a moped gets an
656
+ ordinary registration number from the same powiat pool as a car. The plate
657
+ is the jurisdiction's smallest at 140 x 114 mm and, with the temporary
658
+ plate, one of only two civil Polish plates that carry no eagle.
659
+
660
+ # =========================================================================
661
+ # THE REDUCED CAR PLATE — 305 x 114 mm, voivodeship letter ONLY.
662
+ # =========================================================================
663
+ - id: pl-standard-reduced
664
+ class: standard
665
+ categories: [car, van]
666
+ period: { start: 2018 }
667
+ period_evidence: enacted-commencement
668
+ matching: strict
669
+ format:
670
+ pattern: "L 999"
671
+ regex: '\A[A-Z] ?(?:\d{3}|\d{2}[A-Z]|\d[A-Z]\d|[A-Z]\d{2}|\d[A-Z]{2}|[A-Z]{2}\d|[A-Z]\d[A-Z])\z'
672
+ regex_strict: '\A[ABCDEFGIJKLMNOPRSTVWXYZ] ?(?:\d{3}|\d{2}[ACEFGHJKLMNPRSTUVWXY]|\d[ACEFGHJKLMNPRSTUVWXY]\d|[ACEFGHJKLMNPRSTUVWXY]\d{2}|\d[ACEFGHJKLMNPRSTUVWXY]{2}|[ACEFGHJKLMNPRSTUVWXY]{2}\d|[ACEFGHJKLMNPRSTUVWXY]\d[ACEFGHJKLMNPRSTUVWXY])\z'
673
+ charset: { letters_excluded: ["Q"], letters_excluded_vehicle_wyroznik: ["B", "D", "I", "O", "Z"] }
674
+ progression: >-
675
+ § 30 ust. 2 pkt 2, and it is the ONE Polish civil plate with NO POWIAT
676
+ CODE AT ALL: "dla powiatów z wyróżnikiem jednoliterowym i dwuliterowym
677
+ pierwsza litera stanowi wyróżnik województwa, następne cyfry lub cyfry
678
+ i litera, lub litery stanowią wyróżnik pojazdu" — one voivodeship letter
679
+ and three characters, in the exhaustion order 999, 99L, 9L9, L99, 9LL,
680
+ LL9, L9L. The powiat is unrecoverable from the string, by design, because
681
+ there is no room for it.
682
+ design:
683
+ plate: { w: 305, h: 114, unit: mm }
684
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
685
+ foreground: "#000000"
686
+ band: { side: left, color: "#003399", content: eu-stars+PL, hex_basis: observed }
687
+ emblem: { present: true, rendered: placeholder }
688
+ region_encoding: none
689
+ region_encoding_note: >-
690
+ DELIBERATELY none, and this is the fact that makes the series worth
691
+ separating: the reduced plate carries only the VOIVODESHIP letter, so a
692
+ parse API can resolve it to one of sixteen voivodeships (or, where the
693
+ voivodeship has two letters, to one voivodeship exactly) and can never
694
+ resolve it to a powiat. Routing it through plates/_decode/pl-powiats.yml would invent a
695
+ district. The voivodeship letters themselves are in that file's
696
+ `voivodeships` block.
697
+ sources:
698
+ - "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # § 26 ust. 1 pkt 1 lit. b, § 27 ust. 3, § 30 ust. 2 pkt 2 and ust. 3; załącznik nr 12 Rysunek 1 (305 x 114 mm). Accessed 2026-08-02"
699
+ - "https://api.sejm.gov.pl/eli/acts/DU/2017/2355/text/O/D20172355.pdf # Dz. U. 2017 poz. 2355 introduced the type (§ 27 ust. 1 pkt 1 lit. b, § 31 ust. 2 pkt 2) and § 57 pkt 2 commenced exactly those provisions 'z dniem 1 lipca 2018 r.' — the period.start here, and NOT the instrument's own 1 January 2018 general commencement. Accessed 2026-08-02"
700
+ notes: >-
701
+ THE REDUCED SINGLE-ROW PLATE, for vehicles whose mounting recess is too
702
+ small for a 520 mm plate — the American-import case above all. period.start
703
+ 2018 is a genuine commencement carved out of Dz. U. 2017 poz. 2355 § 57
704
+ pkt 2, four provisions of which were held back to 1 July 2018 while the
705
+ rest of the instrument began on 1 January. Excluded from the type by
706
+ § 26 ust. 1 pkt 1 lit. b: motorcycles, agricultural tractors, slow vehicles
707
+ in tourist road-trains, and "samochodowy inny". § 30 ust. 3 pairs it with
708
+ the reduced TEMPORARY plate: an authority may issue both bearing the same
709
+ number.
710
+
711
+ # =========================================================================
712
+ # THE GREEN PLATE — electric and hydrogen, from 1 January 2020.
713
+ # =========================================================================
714
+ - id: pl-electric
715
+ class: electric
716
+ categories: [car, van, truck, bus, motorcycle, moped]
717
+ period: { start: 2020 }
718
+ period_evidence: enacted-commencement
719
+ matching: strict
720
+ format:
721
+ pattern: "LL 99999"
722
+ regex: '\A(?:[A-Z]{2} ?(?:\d{5}|\d{4}[A-Z]|\d{3}[A-Z]{2}|\d[A-Z]\d{3}|\d[A-Z]{2}\d{2})|[A-Z]{3} ?(?:[A-Z]\d{3}|\d{2}[A-Z]{2}|\d[A-Z]\d{2}|\d{2}[A-Z]\d|\d[A-Z]{2}\d|[A-Z]{2}\d{2}|\d{5}|\d{4}[A-Z]|\d{3}[A-Z]{2}))\z'
723
+ regex_strict: '\A(?:[ABCDEFGIJKLMNOPRSTVWXYZ][A-PR-Z] ?(?:\d{5}|\d{4}[ACEFGHJKLMNPRSTUVWXY]|\d{3}[ACEFGHJKLMNPRSTUVWXY]{2}|\d[ACEFGHJKLMNPRSTUVWXY]\d{3}|\d[ACEFGHJKLMNPRSTUVWXY]{2}\d{2})|[ABCDEFGIJKLMNOPRSTVWXYZ][A-PR-Z]{2} ?(?:[ACEFGHJKLMNPRSTUVWXY]\d{3}|\d{2}[ACEFGHJKLMNPRSTUVWXY]{2}|\d[ACEFGHJKLMNPRSTUVWXY]\d{2}|\d{2}[ACEFGHJKLMNPRSTUVWXY]\d|\d[ACEFGHJKLMNPRSTUVWXY]{2}\d|[ACEFGHJKLMNPRSTUVWXY]{2}\d{2}|\d{5}|\d{4}[ACEFGHJKLMNPRSTUVWXY]|\d{3}[ACEFGHJKLMNPRSTUVWXY]{2}))\z'
724
+ charset: { letters_excluded: ["Q"], letters_excluded_vehicle_wyroznik: ["B", "D", "I", "O", "Z"] }
725
+ grammar_note: >-
726
+ THE GREEN PLATE HAS NO GRAMMAR OF ITS OWN. § 27 ust. 2-5 make green a
727
+ COLOUR CONDITION on the ordinary car, reduced, individual and moped
728
+ plates, not a separate numbering system, so the regex above is
729
+ pl-standard's. A green plate on a moped follows pl-moped's grammar and a
730
+ green individual plate follows pl-individual's; this series exists
731
+ because the design and the period differ, not the format.
732
+ design:
733
+ plate: { w: 520, h: 114, unit: mm }
734
+ plate_variants:
735
+ - { w: 305, h: 214, unit: mm, note: "samochodowa dwurzędowa" }
736
+ - { w: 305, h: 114, unit: mm, note: "jednorzędowa zmniejszona" }
737
+ - { w: 140, h: 114, unit: mm, note: "motorowerowa — for a moped with an electric motor (§ 27 ust. 5 pkt 2)" }
738
+ background: { color: "#B5D99C", finish: retroreflective, hex_basis: observed, spec_note: "§ 27 ust. 2 pkt 2 names the colour only as 'zielonym tle'; załącznik nr 12 Tablica 2 bounds it to the CIE quadrangle in common.colorimetry.zielona, which is the WIDEST gamut in the Polish table — its luminance factor is a RANGE (0.20 to 0.40) where every other colour has a single bound, so the statutory green is deliberately a band of pale yellow-greens rather than one colour. The hex is one plausible point inside it and is marked observed." }
739
+ foreground: "#000000"
740
+ band: { side: left, color: "#003399", content: eu-stars+PL, hex_basis: observed }
741
+ emblem: { present: true, rendered: placeholder, note: "absent on the moped variant, per § 28 ust. 6" }
742
+ region_encoding: "plates/_decode/pl-powiats.yml"
743
+ sources:
744
+ - "https://api.sejm.gov.pl/eli/acts/DU/2019/1272/text/O/D20191272.pdf # Dz. U. 2019 poz. 1272 (rozporządzenie MI z 8 lipca 2019 r.): inserts 'barwy czarnej na zielonym tle, w przypadku tablicy rejestracyjnej wydawanej dla pojazdu elektrycznego albo pojazdu napędzanego wodorem' into § 28 of the 2017 instrument and adds § 28 ust. 5a for electric mopeds; § 9, verbatim: 'Rozporządzenie wchodzi w życie z dniem 1 stycznia 2020 r.'; § 6 lets registering authorities ORDER green plates 'począwszy od dnia 15 grudnia 2019 r.'; §§ 4-5 give existing EV keepers a right to swap. Accessed 2026-08-02"
745
+ - "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # § 27 ust. 2 pkt 2, ust. 3 pkt 2, ust. 4 pkt 2, ust. 5 pkt 2 — the current re-enactment across all four plate types; załącznik nr 12 pkt 2.1 and 2.14 (green added to the permitted retroreflective colours), Tablica 1 and Tablica 2. Accessed 2026-08-02"
746
+ notes: >-
747
+ THE GREEN PLATE, and its date is 1 JANUARY 2020 — not 2022, which is what
748
+ a reader gets by taking the current instrument's date for the rule's date.
749
+ The enabling amendment is Dz. U. 2019 poz. 1272, whose § 9 commences it on
750
+ 1 January 2020; the 2022 and 2024 instruments merely re-enact it. Scope is
751
+ defined by cross-reference rather than in terms: a "pojazd elektryczny" is
752
+ one within art. 2 pkt 12 and a "pojazd napędzany wodorem" one within art. 2
753
+ pkt 15 of the ustawa o elektromobilności i paliwach alternatywnych, so a
754
+ plug-in hybrid does NOT qualify. The plate is optional in practice for
755
+ vehicles registered before 2020: §§ 4-5 of the 2019 instrument give the
756
+ keeper a right to swap, never a duty, so green and white plates on
757
+ identical electric cars are both correct.
758
+
759
+ # =========================================================================
760
+ # HISTORIC VEHICLES — black on yellow, with a car pictogram.
761
+ # =========================================================================
762
+ - id: pl-historic
763
+ class: historic
764
+ categories: [car, van, truck, bus, motorcycle, trailer]
765
+ period: { start: 2000 }
766
+ period_evidence: enacted-commencement
767
+ matching: strict
768
+ format:
769
+ pattern: "LL 99L"
770
+ regex: '\A(?:[A-Z]{2} ?(?:\d{2}[A-Z]|\d{3})|[A-Z]{3} ?(?:\d[A-Z]|\d{2}|[A-Z]\d))\z'
771
+ regex_strict: '\A(?:[ABCDEFGIJKLMNOPRSTVWXYZ][A-PR-Z] ?(?:\d{2}[ACEFGHJKLMNPRSTUVWXY]|\d{3})|[ABCDEFGIJKLMNOPRSTVWXYZ][A-PR-Z]{2} ?(?:\d[ACEFGHJKLMNPRSTUVWXY]|\d{2}|[ACEFGHJKLMNPRSTUVWXY]\d))\z'
772
+ charset: { letters_excluded: ["Q"], letters_excluded_vehicle_wyroznik: ["B", "D", "I", "O", "Z"] }
773
+ progression: >-
774
+ § 30 ust. 2 pkt 5 — the SHORTEST civil serials in the system. A one-letter
775
+ powiat gets two digits and a letter, then three digits; a two-letter
776
+ powiat gets a digit and a letter, then two digits, then a letter and a
777
+ digit. A historic plate is therefore five characters in total where an
778
+ ordinary one is seven or eight, which is the quickest way to recognise
779
+ one after the colour.
780
+ design:
781
+ plate: { w: 520, h: 114, unit: mm }
782
+ plate_variants:
783
+ - { w: 305, h: 214, unit: mm, note: "zabytkowa dwurzędowa" }
784
+ - { w: 190, h: 150, unit: mm, note: "motocyklowa zabytkowa" }
785
+ - { w: 305, h: 114, unit: mm, note: "zabytkowa jednorzędowa zmniejszona — takes the pl-standard-reduced grammar of § 30 ust. 2 pkt 2, not the grammar above, and carries the car pictogram as a LASER GRAPHIC rather than an embossed symbol" }
786
+ background: { color: "#F5D800", finish: retroreflective, hex_basis: observed, spec_note: "§ 27 ust. 6 names 'żółtym tle'; the CIE quadrangle is common.colorimetry.zolta with a luminance factor of 0.27" }
787
+ foreground: "#000000"
788
+ band: { side: left, color: "#003399", content: eu-stars+PL, hex_basis: observed }
789
+ symbol: { present: true, rendered: placeholder, content: "the pojazd zabytkowy pictogram — a stylised veteran car, embossed in black on the full-size plate (§ 27 ust. 6, 'oraz symbol pojazdu zabytkowego barwy czarnej'), and laser-etched to a 25 mm width on the reduced plate (załącznik nr 12 pkt 2.7, Rysunek 3)" }
790
+ emblem: { present: true, rendered: placeholder }
791
+ region_encoding: "plates/_decode/pl-powiats.yml"
792
+ sources:
793
+ - "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # § 25 pkt 3, § 27 ust. 6-7, § 30 ust. 2 pkt 5; załącznik nr 12 pkt 2.7 and Rysunki 3, 17-19. Accessed 2026-08-02"
794
+ - "https://api.sejm.gov.pl/eli/acts/DU/1999/632/text/O/D19990632.pdf # Dz. U. 1999 nr 59 poz. 632 § 18 ust. 5 (black on yellow with the pictogram) and § 21 ust. 2 pkt 5 (the short grammar), commenced with the rest of the plate provisions on 1 May 2000 by § 49. Accessed 2026-08-02"
795
+ - "https://api.sejm.gov.pl/eli/acts/DU/1998/365/text/O/D19980365.pdf # Dz. U. 1998 nr 57 poz. 365 § 17 ust. 5 and § 20 ust. 2 pkt 3 — the yellow historic plate ALREADY existed before the 2000 reform, under the old two-letter voivodeship coding. Accessed 2026-08-02"
796
+ notes: >-
797
+ THE YELLOW CLASSIC PLATE. period.start 2000 is the commencement of the
798
+ voivodeship+powiat coding this series' grammar depends on, not the birth
799
+ of the class: Dz. U. 1998 nr 57 poz. 365 § 17 ust. 5 already prescribed
800
+ "barwy czarnej na żółtym tle" with the pictogram in 1998, under the
801
+ pre-reform two-letter codes, and that earlier form is NOT modelled as a
802
+ separate series here — a recorded gap, and a small one, because the
803
+ eligible population was tiny. Eligibility is not in this instrument: it
804
+ runs through the entry of the vehicle in the wojewódzka ewidencja zabytków
805
+ or the acquisition of a rzeczoznawca's certificate, which is a heritage
806
+ question rather than a plate question and is out of scope for this file.
807
+
808
+ - id: pl-historic-moped
809
+ class: historic
810
+ categories: [moped]
811
+ period: { start: 2023 }
812
+ period_evidence: enacted-commencement
813
+ matching: strict
814
+ format:
815
+ pattern: "LL 99L"
816
+ regex: '\A(?:[A-Z]{2} ?(?:\d{2}[A-Z]|\d{3})|[A-Z]{3} ?(?:\d[A-Z]|\d{2}|[A-Z]\d))\z'
817
+ regex_strict: '\A(?:[ABCDEFGIJKLMNOPRSTVWXYZ][A-PR-Z] ?(?:\d{2}[ACEFGHJKLMNPRSTUVWXY]|\d{3})|[ABCDEFGIJKLMNOPRSTVWXYZ][A-PR-Z]{2} ?(?:\d[ACEFGHJKLMNPRSTUVWXY]|\d{2}|[ACEFGHJKLMNPRSTUVWXY]\d))\z'
818
+ charset: { letters_excluded: ["Q"], letters_excluded_vehicle_wyroznik: ["B", "D", "I", "O", "Z"] }
819
+ design:
820
+ plate: { w: 140, h: 114, unit: mm }
821
+ background: { color: "#F5D800", finish: retroreflective, hex_basis: observed }
822
+ foreground: "#000000"
823
+ band: { side: left, color: "#003399", content: eu-stars+PL, hex_basis: observed }
824
+ symbol: { present: true, rendered: placeholder, content: "a laser-etched veteran-vehicle graphic scaled to 30 mm wide (załącznik nr 12 pkt 2.7, Rysunek 4), positioned 93 mm from the left edge and 17.5 mm from the bottom" }
825
+ emblem: { present: false }
826
+ layout_note: >-
827
+ A LAYOUT STRESSOR worth recording. Załącznik nr 12 pkt 2.6 lit. a places
828
+ the legalisation slot on this plate DIFFERENTLY depending on the serial:
829
+ with a three-letter prefix it sits 14 mm from the left edge and 17.5 mm
830
+ from the bottom, with a two-letter prefix 105 mm from the left and
831
+ 66.5 mm from the bottom. The sticker moves to a different ROW of the
832
+ two-row plate according to how long the prefix is — the same pressure
833
+ PRD-PLATES §2.2 records for Japan, and a `format.fields` case if the
834
+ render bundle ever needs it.
835
+ region_encoding: "plates/_decode/pl-powiats.yml"
836
+ sources:
837
+ - "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # § 27 ust. 8, § 28 ust. 4 pkt 5, § 30 ust. 2 pkt 5; załącznik nr 12 pkt 2.6 lit. a and pkt 2.7, Rysunek 4, Rysunek 20. Accessed 2026-08-02"
838
+ - "https://api.sejm.gov.pl/eli/acts/DU/2022/1847/text/O/D20221847.pdf # Dz. U. 2022 poz. 1847 § 53 pkt 1: '§ 27 ust. 8, § 28 ust. 4 pkt 5 oraz § 30 ust. 2 pkt 5 w zakresie tablic rejestracyjnych motorowerowych zabytkowych, które wchodzą w życie z dniem 1 maja 2023 r.'; § 49 ust. 1 opens the swap right from the same date and ust. 2 governs the 4 September 2022 - 30 April 2023 interregnum. Accessed 2026-08-02"
839
+ notes: >-
840
+ THE HISTORIC MOPED PLATE — a class Poland did not have until 1 MAY 2023,
841
+ and a clean example of the instrument-date rule: the provisions live in the
842
+ 2022 instrument (which itself commenced on 4 September 2022) but § 53 pkt 1
843
+ held these three back to 1 May 2023, and § 49 ust. 2 says what happened in
844
+ between — a historic moped could take either an ordinary moped plate or a
845
+ historic MOTORCYCLE plate. From 1 May 2023 § 49 ust. 1 lets the keeper
846
+ swap: a historic motorcycle plate is exchanged keeping the number, an
847
+ ordinary moped plate is exchanged for a NEW number. Modelled as its own
848
+ series rather than a variant of pl-historic because the period and the
849
+ plate both differ.
850
+
851
+ # =========================================================================
852
+ # INDIVIDUAL (PERSONALISED) PLATES — and the one place the exclusions lift.
853
+ # =========================================================================
854
+ - id: pl-individual
855
+ class: personalized
856
+ categories: [car, van, truck, bus]
857
+ period: { start: 2000 }
858
+ period_evidence: enacted-commencement
859
+ matching: strict
860
+ format:
861
+ pattern: "L9 LLLLL"
862
+ regex: '\A[A-Z]\d ?(?:[A-Z]{3,5}|[A-Z]{2,4}\d|[A-Z]{1,3}\d{2})\z'
863
+ regex_strict: '\A[ABCDEFGIJKLMNOPRSTVWXYZ]\d ?(?:[A-PR-Z]{3,5}|[A-PR-Z]{2,4}\d|[A-PR-Z]{1,3}\d{2})\z'
864
+ charset:
865
+ letters_excluded: ["Q"]
866
+ notes: >-
867
+ THE EXCLUSION LIFTS HERE, and only here. § 31 ust. 1 subjects the
868
+ vehicle wyróżnik to the B/D/I/O/Z rule "z zastrzeżeniem § 32 ust. 2",
869
+ and § 32 ust. 2 hands the individual wyróżnik to the owner. So B, D, I,
870
+ O and Z are all available on an individual plate and regex_strict
871
+ carries only the dataset-wide Q exclusion. A validator that applies the
872
+ five-letter rule here rejects lawful plates.
873
+ progression: >-
874
+ § 30 ust. 2 pkt 4, verbatim: "litera i cyfra stanowią wyróżnik
875
+ województwa, zaś kolejne litery w liczbie od 3 do 5 stanowią wyróżnik
876
+ indywidualny pojazdu, w którym nie więcej niż dwie ostatnie litery można
877
+ zastąpić cyframi." The digits may only replace the LAST one or two
878
+ characters, so the regex is a three-way alternation rather than a mixed
879
+ class: letters only, letters then one digit, letters then two digits. A
880
+ digit followed by a letter inside the personal part is not lawful.
881
+ prefix_note: >-
882
+ The prefix here is LETTER + DIGIT, not letter + letters: individual
883
+ plates use column 6 of załącznik nr 13 (W0-W9, A0-A9 for mazowieckie,
884
+ and so on), the same pool as temporary plates, NOT the column-4 letters
885
+ used by ordinary plates. There is no powiat component at all — § 32
886
+ ust. 1 makes uniqueness a VOIVODESHIP-level test, checked against the
887
+ art. 73a ust. 1 pkt 1 register.
888
+ design:
889
+ plate: { w: 520, h: 114, unit: mm }
890
+ plate_variants:
891
+ - { w: 305, h: 214, unit: mm, note: "dwurzędowa" }
892
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
893
+ foreground: "#000000"
894
+ band: { side: left, color: "#003399", content: eu-stars+PL, hex_basis: observed }
895
+ emblem: { present: true, rendered: placeholder }
896
+ green_variant: "§ 27 ust. 4 pkt 2 gives an electric or hydrogen vehicle a GREEN individual plate — the two optional regimes compose"
897
+ region_encoding: none
898
+ region_encoding_note: >-
899
+ Voivodeship only, and only through the letter+digit codes in
900
+ plates/_decode/pl-powiats.yml's `voivodeships` block. There is no powiat information on an
901
+ individual plate and a parse API must not invent any.
902
+ sources:
903
+ - "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # § 25 pkt 2, § 27 ust. 4, § 30 ust. 2 pkt 4, § 31 ust. 1 (the carve-out), § 32 (uniqueness, owner's choice, the decency clause). Accessed 2026-08-02"
904
+ - "https://api.sejm.gov.pl/eli/acts/DU/2025/939/text/O/D20250939.pdf # Dz. U. 2025 poz. 939 § 1 pkt 2 and pkt 3: the second-letter overflow rule of § 31 ust. 3 is disapplied to individual plates, and § 32 ust. 2 is rewritten so that the owner 'może wskazać literę wyróżnika województwa, z którą będzie tworzony numer rejestracyjny pojazdu' — in force 2025-07-30. Accessed 2026-08-02"
905
+ - "https://api.sejm.gov.pl/eli/acts/DU/1999/632/text/O/D19990632.pdf # Dz. U. 1999 nr 59 poz. 632 § 21 ust. 2 pkt 4 and § 22-23, commenced 1 May 2000 by § 49. Accessed 2026-08-02"
906
+ notes: >-
907
+ INDIVIDUAL PLATES — "tablice indywidualne", the Polish personalised regime,
908
+ restricted by § 25 pkt 2 to POJAZDY SAMOCHODOWE, so no motorcycle, moped or
909
+ trailer may carry one. Two facts a consumer will otherwise get wrong: the
910
+ five look-alike letters are LAWFUL here and nowhere else, and since
911
+ 30 July 2025 the buyer in a two-letter voivodeship may CHOOSE which letter
912
+ their plate is built from (Dz. U. 2025 poz. 939 § 1 pkt 3) — the only
913
+ exception to the § 31 ust. 3 rule that the second letter is an overflow
914
+ pool. period.start 2000 is the plate provisions' commencement under
915
+ Dz. U. 1999 nr 59 poz. 632 § 49; individual plates existed before that
916
+ (Dz. U. 1998 nr 57 poz. 365 § 20 ust. 2 pkt 2 gives the same letter+digit
917
+ frame with 3 to 5 letters) and the pre-reform form is a recorded gap.
918
+
919
+ # =========================================================================
920
+ # TEMPORARY PLATES — red on white, and the plate Poland uses for export.
921
+ # =========================================================================
922
+ - id: pl-temporary
923
+ class: temporary
924
+ categories: [car, van, truck, bus, motorcycle, moped, trailer]
925
+ period: { start: 2000 }
926
+ period_evidence: enacted-commencement
927
+ matching: strict
928
+ format:
929
+ pattern: "L9 9999"
930
+ regex: '\A[A-Z]\d ?(?:\d{4}|\d{3}[A-Z])\z'
931
+ regex_strict: '\A[ABCDEFGIJKLMNOPRSTVWXYZ]\d ?(?:\d{4}|\d{3}[ACEFGHJKLMNPRSTUVWXY])\z'
932
+ charset: { letters_excluded: ["Q"], letters_excluded_vehicle_wyroznik: ["B", "D", "I", "O", "Z"] }
933
+ progression: >-
934
+ § 30 ust. 2 pkt 6, verbatim: "litera i cyfra stanowią wyróżnik
935
+ województwa, zaś cztery cyfry w przedziale od 0001 do 9999 stanowią
936
+ wyróżnik pojazdu, który po wyczerpaniu wskazanej pojemności tworzy się
937
+ w układzie trzy cyfry w przedziale od 001 do 999 i litera." Six
938
+ characters, letter+digit prefix from column 6 of załącznik nr 13, no
939
+ powiat component.
940
+ design:
941
+ plate: { w: 520, h: 114, unit: mm }
942
+ plate_variants:
943
+ - { w: 305, h: 214, unit: mm, note: "dwurzędowa" }
944
+ - { w: 190, h: 150, unit: mm, note: "motocyklowa tymczasowa" }
945
+ - { w: 140, h: 114, unit: mm, note: "motorowerowa tymczasowa" }
946
+ - { w: 305, h: 114, unit: mm, note: "tymczasowa jednorzędowa zmniejszona — added by the 2024 instrument (§ 30 ust. 2 pkt 2 and ust. 3 pkt 1); the 2022 text had no reduced temporary plate" }
947
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
948
+ foreground: "#CC0000"
949
+ foreground_spec: "§ 27 ust. 9 pkt 1: 'barwy czerwonej na białym tle'. The CIE quadrangle for czerwona is in common.colorimetry.czerwona, luminance factor 0.05 — a dark, saturated red, not a signal red."
950
+ band: { side: left, color: "#003399", content: eu-stars+PL, hex_basis: observed }
951
+ emblem: { present: false, note: "§ 28 ust. 6 disapplies the eagle to temporary plates; ust. 5 also disapplies the laser-marked legalisation-slot outline, so a temporary plate is the plainest Polish plate" }
952
+ region_encoding: none
953
+ region_encoding_note: "voivodeship only, via the letter+digit codes in plates/_decode/plates/_decode/pl-powiats.yml's `voivodeships` block; no powiat component exists on a temporary plate."
954
+ sources:
955
+ - "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # § 25 pkt 4, § 27 ust. 9 pkt 1, § 28 ust. 5-6, § 30 ust. 2 pkt 6 and ust. 3; załącznik nr 12 Rysunki 21-24. Accessed 2026-08-02"
956
+ - "https://api.sejm.gov.pl/eli/acts/DU/1999/632/text/O/D19990632.pdf # Dz. U. 1999 nr 59 poz. 632 § 18 ust. 6 and § 21 ust. 2 pkt 6, commenced 1 May 2000 by § 49. Accessed 2026-08-02"
957
+ - "https://api.sejm.gov.pl/eli/acts/DU/1993/164/text/O/D19930164.pdf # Dz. U. 1993 nr 37 poz. 164 § 13 ust. 3: the temporary plate's statutory purposes already included 'umożliwienia wyjazdu lub wywozu tych pojazdów za granicę' — which is why Poland has no export series. Accessed 2026-08-02"
958
+ notes: >-
959
+ THE TEMPORARY PLATE, and THE REASON POLAND HAS NO EXPORT PLATE: taking a
960
+ vehicle permanently out of the country is one of the temporary plate's own
961
+ statutory purposes and has been since 1993. The 2024 instrument added a
962
+ REDUCED temporary plate (305 x 114 mm) that the 2022 text lacked, pairable
963
+ under § 30 ust. 3 with a reduced ordinary plate bearing the same number.
964
+ Validity is not in this instrument: it runs from art. 74 of the ustawa, and
965
+ the old fourteen-day cap of the 1993 rules no longer applies.
966
+
967
+ - id: pl-temporary-sport
968
+ class: temporary
969
+ categories: [car]
970
+ period: { start: 2024 }
971
+ period_evidence: enacted-commencement
972
+ matching: strict
973
+ format:
974
+ pattern: "L9 9999"
975
+ regex: '\A[A-Z]\d ?(?:\d{4}|\d{3}[A-Z])\z'
976
+ regex_strict: '\A[ABCDEFGIJKLMNOPRSTVWXYZ]\d ?(?:\d{4}|\d{3}[ACEFGHJKLMNPRSTUVWXY])\z'
977
+ charset: { letters_excluded: ["Q"], letters_excluded_vehicle_wyroznik: ["B", "D", "I", "O", "Z"] }
978
+ note: "§ 30 ust. 2 pkt 6 governs all temporary plates alike; only the background colour distinguishes this one."
979
+ design:
980
+ plate: { w: 520, h: 114, unit: mm }
981
+ background: { color: "#F5D800", finish: retroreflective, hex_basis: observed, spec_note: "common.colorimetry.zolta — the same statutory yellow as the historic plate" }
982
+ foreground: "#CC0000"
983
+ band: { side: left, color: "#003399", content: eu-stars+PL, hex_basis: observed }
984
+ emblem: { present: false }
985
+ region_encoding: none
986
+ sources:
987
+ - "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # § 27 ust. 9, verbatim: 'Na tablicy rejestracyjnej tymczasowej jest wytłoczony numer rejestracyjny składający się z wyróżnika województwa oraz wyróżnika pojazdu: 1) barwy czerwonej na białym tle albo 2) barwy czerwonej na żółtym tle w przypadku tablicy rejestracyjnej wydawanej dla samochodu osobowego przeznaczonego do zawodów sportowych.' § 51 commences the instrument on 2024-11-30. Accessed 2026-08-02"
988
+ - "https://api.sejm.gov.pl/eli/acts/DU/2022/1847/text/O/D20221847.pdf # Dz. U. 2022 poz. 1847 § 27 ust. 9, which knows only 'barwy czerwonej na białym tle' — the pair of texts either side of 2024-11-30 IS the period evidence. Accessed 2026-08-02"
989
+ notes: >-
990
+ RED ON YELLOW, FOR COMPETITION CARS — a plate that did not exist before
991
+ 30 November 2024 and that no secondary description of Polish plates yet
992
+ records, because they are all still written against the 2022 instrument.
993
+ The evidence is a diff: § 27 ust. 9 of Dz. U. 2022 poz. 1847 gives one
994
+ colour, § 27 ust. 9 of Dz. U. 2024 poz. 1709 gives two, and the second is
995
+ "w przypadku tablicy rejestracyjnej wydawanej dla samochodu osobowego
996
+ przeznaczonego do zawodów sportowych". Distinct from pl-temporary by the
997
+ background alone; the number grammar is identical, so a string cannot be
998
+ assigned between the two without knowing the colour.
999
+
1000
+ # =========================================================================
1001
+ # DIPLOMATIC — white on blue, six digits, and NO EU field.
1002
+ # =========================================================================
1003
+ - id: pl-diplomatic
1004
+ class: diplomatic
1005
+ categories: [car, van, motorcycle]
1006
+ period: { start: 2000 }
1007
+ period_evidence: enacted-commencement
1008
+ matching: strict
1009
+ format:
1010
+ pattern: "L 999999"
1011
+ regex: '\A[A-Z] ?\d{6}\z'
1012
+ regex_strict: '\A[ABCDEFGIJKLMNOPRSTVWXYZ] ?\d{6}\z'
1013
+ progression: >-
1014
+ § 30 ust. 2 pkt 7, verbatim and complete: "na tablicach rejestracyjnych
1015
+ dyplomatycznych – pierwsza litera stanowi wyróżnik województwa, zaś sześć
1016
+ cyfr w przedziale od 000001 do 999999 stanowi wyróżnik pojazdu." One
1017
+ letter and six digits, and NOTHING ELSE — the instrument publishes no
1018
+ country-code or entitlement-class structure inside those six digits.
1019
+ decode_gap: >-
1020
+ A RECORDED GAP, and an important one for the Geoguessr audience: Polish
1021
+ diplomatic serials are widely described as encoding the sending state in
1022
+ their leading digits, and that structure is NOT in this regulation. It
1023
+ would have to come from a Ministry of Foreign Affairs allocation list
1024
+ that this pass did not locate. The dataset therefore claims one letter
1025
+ and six digits and no more; a decode table for the digit blocks is an L4
1026
+ target, and until one lands with a primary behind it a parse API must
1027
+ return "diplomatic, voivodeship known, mission unknown".
1028
+ voivodeship_note: >-
1029
+ The letter is the ordinary column-4 wyróżnik województwa, not the
1030
+ column-6 letter+digit code — so a diplomatic plate begins with the same
1031
+ letter as an ordinary one from the same voivodeship, and in practice
1032
+ almost always with W.
1033
+ design:
1034
+ plate: { w: 520, h: 114, unit: mm }
1035
+ plate_variants:
1036
+ - { w: 305, h: 214, unit: mm, note: "dyplomatyczna dwurzędowa" }
1037
+ - { w: 190, h: 150, unit: mm, note: "dyplomatyczna motocyklowa" }
1038
+ - { w: 140, h: 114, unit: mm, note: "dyplomatyczna motorowerowa" }
1039
+ background: { color: "#003399", finish: retroreflective, hex_basis: observed, spec_note: "§ 27 ust. 10: 'barwy białej na niebieskim tle'. The quadrangle is common.colorimetry.niebieska — the WIDE blue, deliberately not the narrow EU-field blue" }
1040
+ foreground: "#FFFFFF"
1041
+ band: { side: none }
1042
+ band_note: >-
1043
+ THE ONLY POLISH PLATE WITH NO EU FIELD, and the instrument says so twice:
1044
+ § 28 ust. 1 ("Wymóg ten nie dotyczy tablic (tablicy) rejestracyjnych
1045
+ dyplomatycznych") and załącznik nr 12 pkt 2.5 and pkt 2.14 lit. e. On a
1046
+ blue plate the blue band would be invisible, which is presumably the
1047
+ reason, but the instrument gives none.
1048
+ emblem: { present: true, rendered: placeholder }
1049
+ geometry: "załącznik nr 12 Rysunek 26 tabulates the diplomatic plate's own layout dimensions per size (a/b/c/d/e in mm): dwurzędowa 48/55/20/36/17, motocyklowa 24/42/14/18/20, motorowerowa 19/40/10/23/17.5"
1050
+ region_encoding: "plates/_decode/pl-powiats.yml"
1051
+ region_encoding_note: "voivodeship letter only — column 4 of the annex, the same letters ordinary plates use; there is no powiat component."
1052
+ sources:
1053
+ - "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # § 25 pkt 5, § 27 ust. 10, § 28 ust. 1, § 30 ust. 2 pkt 7; załącznik nr 12 pkt 2.5, pkt 2.14 lit. e, Rysunki 25-26. Accessed 2026-08-02"
1054
+ - "https://api.sejm.gov.pl/eli/acts/DU/1999/632/text/O/D19990632.pdf # Dz. U. 1999 nr 59 poz. 632 § 21 ust. 2 pkt 8 — the same one-letter + six-digit frame, commenced 1 May 2000 by § 49. Its predecessor Dz. U. 1998 nr 57 poz. 365 § 20 ust. 2 pkt 5 used TWO letters and five digits, so the frame did change at the reform. Accessed 2026-08-02"
1055
+ notes: >-
1056
+ THE DIPLOMATIC PLATE, for missions, consular posts, special missions,
1057
+ international organisations and their staff (§ 25 pkt 5). period.start 2000
1058
+ is a real format change and not merely the reform date: the pre-reform
1059
+ diplomatic plate under Dz. U. 1998 nr 57 poz. 365 § 20 ust. 2 pkt 5 was TWO
1060
+ letters and five digits (four on motorcycles) and used the Warsaw
1061
+ voivodeship code, so 1 May 2000 changed the diplomatic grammar as well as
1062
+ the ordinary one.
1063
+
1064
+ # =========================================================================
1065
+ # PROFESSIONAL REGISTRATION — the Polish dealer/trade plate, since 2019.
1066
+ # =========================================================================
1067
+ - id: pl-professional
1068
+ class: dealer
1069
+ categories: [car, van, truck, bus, motorcycle, moped, trailer]
1070
+ period: { start: 2019 }
1071
+ period_evidence: enacted-commencement
1072
+ matching: strict
1073
+ format:
1074
+ pattern: "L99 99P99"
1075
+ regex: '\A[A-Z]\d{2} ?\d{2}P(?:\d{2}|\d[A-Z])\z'
1076
+ regex_strict: '\A[ABCDEFGIJKLMNOPRSTVWXYZ]\d{2} ?\d{2}P(?:\d{2}|\d[ACEFGHJKLMNPRSTUVWXY])\z'
1077
+ charset:
1078
+ letters_excluded: ["Q"]
1079
+ letters_excluded_vehicle_wyroznik: ["B", "D", "I", "O", "Z"]
1080
+ notes: "§ 14 ust. 1 of the professional-registration rozporządzenie repeats the 25-letter alphabet; § 14 ust. 2 pkt 2 excludes B, D, I, O and Z from the single trailing letter of the second layout."
1081
+ progression: >-
1082
+ § 14 ust. 2, verbatim: "pierwsza litera stanowi wyróżnik województwa,
1083
+ dwie cyfry w przedziale od 01 do 99 stanowią wyróżnik powiatu,
1084
+ następnych pięć znaków stanowi wyróżnik przydzielony dla pojazdów
1085
+ w decyzji o profesjonalnej rejestracji pojazdów, tworzony kolejno:
1086
+ 1) z dwóch cyfr w przedziale od 00 do 99, litery P i dwóch cyfr
1087
+ w przedziale od 01 do 99; 2) po wyczerpaniu kombinacji tych cyfr –
1088
+ z dwóch cyfr w przedziale od 00 do 99, litery P, cyfry w przedziale od 0
1089
+ do 9 i litery, z wyłączeniem liter B, D, I, O i Z."
1090
+ fixed_letter_note: >-
1091
+ The letter P in the SIXTH position is fixed and is the class marker:
1092
+ § 12 ust. 2 calls it "stałą literę P, będącą literowym wyróżnikiem
1093
+ tablicy przeznaczonej do profesjonalnej rejestracji pojazdów". It is the
1094
+ only positional literal in the whole Polish system.
1095
+ design:
1096
+ plate: { w: 520, h: 114, unit: mm }
1097
+ plate_variants:
1098
+ - { w: 190, h: 150, unit: mm, note: "profesjonalna motocyklowa" }
1099
+ - { w: 140, h: 114, unit: mm, note: "profesjonalna motorowerowa" }
1100
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
1101
+ foreground: "#00A64F"
1102
+ foreground_spec: "§ 12 ust. 2: 'profesjonalny numer rejestracyjny barwy zielonej na białym tle'. GREEN CHARACTERS ON WHITE — the inverse of the electric plate's black on green, and a distinction a colour-only classifier will get backwards. The green is measured for daylight only, on 100 cm2 samples."
1103
+ band: { side: left, color: "#003399", content: eu-stars+PL, hex_basis: observed, note: "§ 13 ust. 1 imports the EU field by reference to the registration rozporządzenie" }
1104
+ emblem: { present: false, note: "not established in this pass; § 13 ust. 3 forbids markings other than those in ust. 1-2 and § 14, and no eagle requirement was found. Recorded gap." }
1105
+ region_encoding: none
1106
+ region_encoding_note: >-
1107
+ DO NOT ROUTE THROUGH plates/_decode/pl-powiats.yml. The professional plate's powiat
1108
+ wyróżnik is TWO DIGITS, not letters, and its table is załącznik nr 8 to the
1109
+ professional-registration rozporządzenie — a different annex under a
1110
+ different delegation. That numeric table was NOT extracted in this pass and
1111
+ is a recorded gap; the voivodeship LETTER is the same column-4 letter as on
1112
+ an ordinary plate and can be decoded from plates/_decode/pl-powiats.yml's `voivodeships`.
1113
+ sources:
1114
+ - "https://api.sejm.gov.pl/eli/acts/DU/2023/2616/text/O/D20232616.pdf # the consolidated text (obwieszczenie MI z 15 listopada 2023 r.) of rozporządzenie MI z 12 marca 2019 r. w sprawie profesjonalnej rejestracji pojazdów, stosowanych oznaczeń oraz opłat: § 12 ust. 2 (green on white, the fixed P), § 13 (EU field, legalisation mark, closed list of markings), § 14 (alphabet, the two layouts, the annex-8 delegation). Accessed 2026-08-02"
1115
+ - "https://api.sejm.gov.pl/eli/acts/DU/2019/546 # the Sejm ELI entry for Dz. U. 2019 poz. 546, the original instrument: entryIntoForce 2019-07-11 — this series' period.start. Accessed 2026-08-02"
1116
+ notes: >-
1117
+ PROFESSIONAL REGISTRATION — Poland's dealer/trade plate, and a genuinely
1118
+ young class: it did not exist before 11 July 2019. It is issued to a
1119
+ BUSINESS by decision of the starosta (so `binding` differs from the
1120
+ jurisdiction default) and covers manufacturers, distributors and research
1121
+ units moving or testing unregistered vehicles. It replaced the "tablica
1122
+ tymczasowa badawcza" of the 2002 regime, which is recorded in
1123
+ common.absent_classes.research_badawcza.
1124
+
1125
+ # =========================================================================
1126
+ # THE ARMED FORCES — U, under art. 76 ust. 2, a different minister.
1127
+ # =========================================================================
1128
+ - id: pl-military
1129
+ class: military
1130
+ categories: [car, van, truck, bus, motorcycle, trailer]
1131
+ period: { start: 2023 }
1132
+ period_evidence: instrument-in-force
1133
+ matching: strict
1134
+ format:
1135
+ pattern: "UL 99999"
1136
+ regex: '\AU[A-Z] ?(?:\d{5}|\d{4}T?)\z'
1137
+ regex_strict: '\AU[A-NPR-TV-Z] ?(?:\d{5}|\d{4}T?)\z'
1138
+ charset:
1139
+ letters_excluded: ["O", "Q", "U"]
1140
+ notes: >-
1141
+ A DIFFERENT exclusion set from the civil one, and it is enumerated
1142
+ rather than described. § 6 ust. 3 pkt 2 lit. a lists the permitted
1143
+ second letters in full: "A, B, C, D, E, F, G, H, I, J, K, L, M, N, P,
1144
+ R, S, T, V, W, X, Y, Z" — twenty-three letters, dropping O and U as
1145
+ well as the dataset-wide Q. B, D, I and Z ARE permitted here, unlike on
1146
+ a civil vehicle wyróżnik.
1147
+ progression: >-
1148
+ § 6 ust. 3: "wyróżnika Sił Zbrojnych, którym jest wielka litera U
1149
+ umieszczana jako pierwsza" plus a vehicle wyróżnik of one letter and
1150
+ then, by plate type, a five-digit number 00001-99999 for car plates and
1151
+ for numbers painted directly on the vehicle, a four-digit number
1152
+ 0001-9999 for motorcycle plates, or a four-digit number followed by the
1153
+ FIXED LETTER T for a tracked vehicle.
1154
+ tracked_note: "the trailing T is the only class marker in the Polish system besides the professional plate's P, and it means gąsienicowy — tracked."
1155
+ design:
1156
+ plate: { w: null, h: null, unit: mm }
1157
+ dimensions_note: >-
1158
+ RECORDED GAP. art. 76 ust. 2 of the ustawa delegates the military plate's
1159
+ wzór to the Minister of National Defence, but the current MON
1160
+ rozporządzenie carries only three annexes — a registration application, a
1161
+ military dowód rejestracyjny, and the pattern for numbers PAINTED
1162
+ DIRECTLY on a vehicle — and none of them is a plate drawing. No
1163
+ dimensions were secured.
1164
+ background: { color: "#FFFFFF", finish: null, hex_basis: observed }
1165
+ foreground: "#000000"
1166
+ colour_evidence: >-
1167
+ Sourced only obliquely. § 17 ust. 4 prescribes, for tracked and armoured
1168
+ vehicles that carry no plate, "numer rejestracyjny barwy czarnej na
1169
+ białym tle oraz symbol przynależności narodowej" applied by stencil or
1170
+ decal; § 17 ust. 2 allows white or black for mobilisation numbers,
1171
+ whichever contrasts with the vehicle. Black on white for the PLATE itself
1172
+ is an inference from those provisions and is flagged as one.
1173
+ band: { side: none, note: "not established; no EU-field requirement was found in the MON instrument. Recorded gap." }
1174
+ emblem: { present: false }
1175
+ region_encoding: none
1176
+ region_encoding_note: >-
1177
+ U is not a voivodeship letter — it is one of the two letters (with H) that
1178
+ never appear in column 4 of załącznik nr 13, which is exactly what makes
1179
+ the prefix unambiguous. Note § 6 ust. 1-2 however: unmarked vehicles of the
1180
+ Żandarmeria Wojskowa, the special forces, the cyberspace-defence troops and
1181
+ certain protected-installation units may be registered under an ORDINARY
1182
+ voivodeship+powiat number instead, deliberately indistinguishable from a
1183
+ civil plate. A parse API cannot detect those and its confidence model
1184
+ should know they exist.
1185
+ sources:
1186
+ - "https://api.sejm.gov.pl/eli/acts/DU/2023/1776/text/O/D20231776.pdf # rozporządzenie MON z 30 sierpnia 2023 r. w sprawie rejestracji pojazdów Sił Zbrojnych RP oraz pojazdów należących do obcych sił zbrojnych: § 6 (the U frame and the three vehicle-wyróżnik shapes), § 6 ust. 1-2 (the ordinary-number exception), § 17 (numbers applied directly), § 20 ('Rozporządzenie wchodzi w życie z dniem 4 września 2023 r.'). Accessed 2026-08-02"
1187
+ - "https://api.sejm.gov.pl/eli/acts/DU/2024/1251/text/O/D20241251.pdf # Prawo o ruchu drogowym art. 76 ust. 2, the delegation to the Minister of National Defence. Accessed 2026-08-02"
1188
+ notes: >-
1189
+ MILITARY PLATES. period.start 2023 is INSTRUMENT-IN-FORCE and means what it
1190
+ means elsewhere in this dataset — the date of the instrument that STATES
1191
+ the rule (§ 20 of Dz. U. 2023 poz. 1776, 4 September 2023), not the date
1192
+ the U system began, which is certainly older: the chain of MON instruments
1193
+ runs back through Dz. U. 2012 poz. 623, Dz. U. 2005 nr 84 poz. 723 and
1194
+ Dz. U. 1999 nr 84 poz. 937 and was not read in this pass. A recorded gap,
1195
+ and one worth closing because the U frame is very likely materially older
1196
+ than 2023.
1197
+
1198
+ # =========================================================================
1199
+ # THE SERVICES — H, under art. 76 ust. 4, a third minister.
1200
+ # =========================================================================
1201
+ - id: pl-police
1202
+ class: police
1203
+ categories: [car, van, truck, bus, motorcycle]
1204
+ period: { start: 2025 }
1205
+ period_evidence: instrument-in-force
1206
+ matching: strict
1207
+ format:
1208
+ pattern: "HPL L999"
1209
+ regex: '\AHP[A-Z] ?(?:[A-Z]\d{3}|\d{2}[A-Z]{2})\z'
1210
+ regex_strict: '\AHP[A-PR-Z] ?(?:[A-PR-Z]\d{3}|\d{2}[A-PR-Z]{2})\z'
1211
+ charset:
1212
+ letters_excluded: ["Q"]
1213
+ notes: >-
1214
+ Only Q. § 5 ust. 2 pkt 1 and ust. 4 both draw on "zbiór następujących
1215
+ 25 liter" without the civil B/D/I/O/Z exclusion, which § 31 ust. 1 of
1216
+ the transport rozporządzenie confines to plates issued under THAT
1217
+ instrument. Applying the civil exclusion here would reject lawful
1218
+ service plates.
1219
+ progression: >-
1220
+ § 5 ust. 2 pkt 1: the service wyróżnik, then ONE letter from the
1221
+ 25-letter set, then the vehicle wyróżnik, which by ust. 4 is either a
1222
+ letter and three digits 001-999 or two digits 01-99 and two letters.
1223
+ Seven characters in total.
1224
+ design:
1225
+ plate: { w: 520, h: 114, unit: mm }
1226
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
1227
+ foreground: "#000000"
1228
+ band: { side: left, color: "#003399", content: eu-stars+PL, hex_basis: observed }
1229
+ emblem: { present: true, rendered: placeholder }
1230
+ design_basis: >-
1231
+ Taken from the transport rozporządzenie by cross-reference, not stated in
1232
+ the MSWiA one: § 5 ust. 1 says "Wzory tablic rejestracyjnych, które
1233
+ zawierają wyróżniki służb, oraz wzory umieszczanych na nich symboli są
1234
+ określone w przepisach wydanych na podstawie art. 76 ust. 1 pkt 1 lit. a
1235
+ ustawy" — that is Dz. U. 2024 poz. 1709. This pass did not locate a
1236
+ service-plate wzór inside that instrument's załącznik nr 12, whose
1237
+ drawings cover the five § 25 types only, so the colours and dimensions
1238
+ above are an INFERENCE from the ordinary plate. Recorded gap.
1239
+ region_encoding: none
1240
+ region_encoding_note: >-
1241
+ H is not a voivodeship letter — see plates/_decode/plates/_decode/pl-powiats.yml,
1242
+ prefix_split.letters_never_a_voivodeship. But note § 5 ust. 2 pkt 2 and
1243
+ § 6: a service may equally register a vehicle under an ORDINARY
1244
+ voivodeship+powiat number, and must do so for vehicles that are NOT
1245
+ liveried ("Tablic rejestracyjnych, które zawierają wyróżnik województwa
1246
+ i powiatu, nie stosuje się do oznakowanych pojazdów służb"). So an H plate
1247
+ implies a marked service vehicle, while an unmarked one wears a civil plate
1248
+ that no parse can distinguish.
1249
+ sources:
1250
+ - "https://api.sejm.gov.pl/eli/acts/DU/2025/1326/text/O/D20251326.pdf # rozporządzenie MSWiA z 30 września 2025 r. w sprawie rejestracji pojazdów Służby Ochrony Państwa, Policji, ABW, AW, CBA, Straży Granicznej i KAS wykorzystywanych przez Służbę Celno-Skarbową: § 5 ust. 2-4 (the number structure and the six service wyróżniki), § 6 (marked vehicles only), § 14 (in force the day after publication). Accessed 2026-08-02"
1251
+ notes: >-
1252
+ POLICE PLATES — the HP prefix. period.start 2025 is INSTRUMENT-IN-FORCE:
1253
+ Dz. U. 2025 poz. 1326 is merely the latest in a chain running back through
1254
+ Dz. U. 2023 poz. 1778, Dz. U. 2019 poz. 560, Dz. U. 2017 poz. 447,
1255
+ Dz. U. 2011 nr 195 poz. 1160 and further, none of which was read here, so
1256
+ 2025 is the date of the instrument that STATES the rule and NOT the date
1257
+ the HP prefix began. A recorded gap.
1258
+
1259
+ - id: pl-government-services
1260
+ class: government
1261
+ categories: [car, van, truck, bus, motorcycle]
1262
+ period: { start: 2025 }
1263
+ period_evidence: instrument-in-force
1264
+ matching: strict
1265
+ format:
1266
+ pattern: "HBL L999"
1267
+ regex: '\AH[ABCKW][A-Z] ?(?:[A-Z]\d{3}|\d{2}[A-Z]{2})\z'
1268
+ regex_strict: '\AH[ABCKW][A-PR-Z] ?(?:[A-PR-Z]\d{3}|\d{2}[A-PR-Z]{2})\z'
1269
+ charset: { letters_excluded: ["Q"] }
1270
+ service_prefixes:
1271
+ HB: "Służba Ochrony Państwa (state protection service)"
1272
+ HK: "Agencja Bezpieczeństwa Wewnętrznego i Agencja Wywiadu (internal security and foreign intelligence — ONE prefix for two agencies)"
1273
+ HA: "Centralne Biuro Antykorupcyjne (anti-corruption bureau)"
1274
+ HW: "Straż Graniczna (border guard)"
1275
+ HC: "Służba Celno-Skarbowa (customs and fiscal service)"
1276
+ progression: "§ 5 ust. 2 pkt 1 and ust. 4, identical to pl-police; only the two-letter service wyróżnik differs."
1277
+ design:
1278
+ plate: { w: 520, h: 114, unit: mm }
1279
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
1280
+ foreground: "#000000"
1281
+ band: { side: left, color: "#003399", content: eu-stars+PL, hex_basis: observed }
1282
+ emblem: { present: true, rendered: placeholder }
1283
+ design_basis: "as pl-police — inferred from the ordinary plate by the § 5 ust. 1 cross-reference; recorded gap."
1284
+ region_encoding: none
1285
+ sources:
1286
+ - "https://api.sejm.gov.pl/eli/acts/DU/2025/1326/text/O/D20251326.pdf # § 5 ust. 3, verbatim: 'Jako wyróżniki służb określa się litery: 1) HB – dla Służby Ochrony Państwa; 2) HP – dla Policji; 3) HK – dla Agencji Bezpieczeństwa Wewnętrznego i Agencji Wywiadu; 4) HA – dla Centralnego Biura Antykorupcyjnego; 5) HW – dla Straży Granicznej; 6) HC – dla Służby Celno-Skarbowej.' Accessed 2026-08-02"
1287
+ notes: >-
1288
+ THE FIVE NON-POLICE SERVICE PREFIXES, held as one series because they share
1289
+ a format, a design and a period and differ only in which agency the second
1290
+ letter names — the § 2.3 test for a class flag rather than a series. `pattern`
1291
+ prints HB because a pattern is one canonical string; the regex carries all
1292
+ five. The one substantive oddity is HK, which the instrument assigns to TWO
1293
+ agencies at once (ABW and AW), so that prefix does not resolve to a single
1294
+ body. period.start 2025 is INSTRUMENT-IN-FORCE, with the same caveat as
1295
+ pl-police: the H system is older than this instrument and its origin is a
1296
+ recorded gap.