vehicles 0.4.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +164 -0
  3. data/CHANGELOG.md +321 -0
  4. data/README.md +88 -15
  5. data/data/PROVENANCE-vehicles.md +12 -0
  6. data/data/plates/PROVENANCE.md +10 -0
  7. data/data/plates/_decode/at-districts.yml +287 -0
  8. data/data/plates/_decode/ch-cantons.yml +110 -0
  9. data/data/plates/_decode/cn-issuing-offices.yml +463 -0
  10. data/data/plates/_decode/cn-provinces.yml +614 -0
  11. data/data/plates/_decode/cz-kraj.yml +159 -0
  12. data/data/plates/_decode/dk-serial-blocks.yml +327 -0
  13. data/data/plates/_decode/es-provinces.yml +116 -0
  14. data/data/plates/_decode/fr-departements.yml +191 -0
  15. data/data/plates/_decode/gb-age-identifiers.yml +170 -0
  16. data/data/plates/_decode/gb-memory-tags.yml +202 -0
  17. data/data/plates/_decode/gr-prefectures.yml +1408 -0
  18. data/data/plates/_decode/hr-cities.yml +315 -0
  19. data/data/plates/_decode/ie-counties.yml +227 -0
  20. data/data/plates/_decode/in-state-codes.yml +169 -0
  21. data/data/plates/_decode/is-districts-1938.yml +116 -0
  22. data/data/plates/_decode/it-provinces.yml +348 -0
  23. data/data/plates/_decode/jp-office-marks.yml +960 -0
  24. data/data/plates/_decode/jp-use-marks.yml +205 -0
  25. data/data/plates/_decode/kr-authority-marks.yml +146 -0
  26. data/data/plates/_decode/kr-use-syllables.yml +194 -0
  27. data/data/plates/_decode/lu-series-order.yml +638 -0
  28. data/data/plates/_decode/mx-entity-series.yml +380 -0
  29. data/data/plates/_decode/my-index-marks.yml +271 -0
  30. data/data/plates/_decode/no-counties-1913.yml +148 -0
  31. data/data/plates/_decode/no-districts.yml +901 -0
  32. data/data/plates/_decode/pl-powiats.yml +567 -0
  33. data/data/plates/_decode/pt-trailer-services.yml +96 -0
  34. data/data/plates/_decode/ro-counties.yml +213 -0
  35. data/data/plates/_decode/se-diplomatic.yml +220 -0
  36. data/data/plates/_decode/si-regions.yml +123 -0
  37. data/data/plates/_decode/sk-districts.yml +314 -0
  38. data/data/plates/_decode/th-registration-elements.yml +208 -0
  39. data/data/plates/_decode/ua-regions.yml +393 -0
  40. data/data/plates/_decode/za-licence-marks.yml +215 -0
  41. data/data/plates/_meta/classes.yml +26 -0
  42. data/data/plates/_meta/separators.yml +102 -0
  43. data/data/plates/ad.yml +961 -0
  44. data/data/plates/ar.yml +762 -0
  45. data/data/plates/at.yml +1424 -0
  46. data/data/plates/au-act.yml +472 -0
  47. data/data/plates/au-nsw.yml +282 -0
  48. data/data/plates/au-nt.yml +431 -0
  49. data/data/plates/au-qld.yml +272 -0
  50. data/data/plates/au-sa.yml +248 -0
  51. data/data/plates/au-tas.yml +302 -0
  52. data/data/plates/au-vic.yml +215 -0
  53. data/data/plates/au-wa.yml +309 -0
  54. data/data/plates/be.yml +1840 -0
  55. data/data/plates/br.yml +1152 -0
  56. data/data/plates/ca-ab.yml +430 -0
  57. data/data/plates/ca-bc.yml +697 -0
  58. data/data/plates/ca-mb.yml +499 -0
  59. data/data/plates/ca-nb.yml +537 -0
  60. data/data/plates/ca-nl.yml +743 -0
  61. data/data/plates/ca-ns.yml +808 -0
  62. data/data/plates/ca-nt.yml +610 -0
  63. data/data/plates/ca-nu.yml +280 -0
  64. data/data/plates/ca-on.yml +881 -0
  65. data/data/plates/ca-pe.yml +592 -0
  66. data/data/plates/ca-qc.yml +1036 -0
  67. data/data/plates/ca-sk.yml +256 -0
  68. data/data/plates/ca-yt.yml +656 -0
  69. data/data/plates/ch.yml +1273 -0
  70. data/data/plates/cn.yml +1431 -0
  71. data/data/plates/cy.yml +688 -0
  72. data/data/plates/cz.yml +1179 -0
  73. data/data/plates/de.yml +1107 -0
  74. data/data/plates/dk.yml +1647 -0
  75. data/data/plates/ee.yml +1275 -0
  76. data/data/plates/es.yml +888 -0
  77. data/data/plates/fi.yml +1271 -0
  78. data/data/plates/fr.yml +1265 -0
  79. data/data/plates/gb.yml +1188 -0
  80. data/data/plates/gr.yml +721 -0
  81. data/data/plates/hr.yml +860 -0
  82. data/data/plates/hu.yml +959 -0
  83. data/data/plates/ie.yml +775 -0
  84. data/data/plates/in.yml +1172 -0
  85. data/data/plates/is.yml +667 -0
  86. data/data/plates/it.yml +1317 -0
  87. data/data/plates/jp.yml +3650 -0
  88. data/data/plates/kr.yml +1375 -0
  89. data/data/plates/li.yml +1010 -0
  90. data/data/plates/lt.yml +879 -0
  91. data/data/plates/lu.yml +842 -0
  92. data/data/plates/lv.yml +924 -0
  93. data/data/plates/mc.yml +1024 -0
  94. data/data/plates/mt.yml +854 -0
  95. data/data/plates/mx.yml +1372 -0
  96. data/data/plates/my.yml +685 -0
  97. data/data/plates/nl.yml +1016 -0
  98. data/data/plates/no.yml +1018 -0
  99. data/data/plates/nz.yml +1699 -0
  100. data/data/plates/pl.yml +1296 -0
  101. data/data/plates/pt.yml +847 -0
  102. data/data/plates/ro.yml +785 -0
  103. data/data/plates/se.yml +1091 -0
  104. data/data/plates/si.yml +1105 -0
  105. data/data/plates/sk.yml +1439 -0
  106. data/data/plates/sm.yml +1119 -0
  107. data/data/plates/th.yml +1150 -0
  108. data/data/plates/ua.yml +1672 -0
  109. data/data/plates/us-ak.yml +763 -0
  110. data/data/plates/us-al.yml +457 -0
  111. data/data/plates/us-ar.yml +427 -0
  112. data/data/plates/us-as.yml +454 -0
  113. data/data/plates/us-az.yml +430 -0
  114. data/data/plates/us-ca.yml +892 -0
  115. data/data/plates/us-co.yml +452 -0
  116. data/data/plates/us-ct.yml +427 -0
  117. data/data/plates/us-dc.yml +614 -0
  118. data/data/plates/us-de.yml +551 -0
  119. data/data/plates/us-fl.yml +741 -0
  120. data/data/plates/us-ga.yml +644 -0
  121. data/data/plates/us-gu.yml +658 -0
  122. data/data/plates/us-hi.yml +585 -0
  123. data/data/plates/us-ia.yml +438 -0
  124. data/data/plates/us-id.yml +531 -0
  125. data/data/plates/us-il.yml +516 -0
  126. data/data/plates/us-in.yml +324 -0
  127. data/data/plates/us-ks.yml +351 -0
  128. data/data/plates/us-ky.yml +770 -0
  129. data/data/plates/us-la.yml +568 -0
  130. data/data/plates/us-ma.yml +379 -0
  131. data/data/plates/us-md.yml +536 -0
  132. data/data/plates/us-me.yml +445 -0
  133. data/data/plates/us-mi.yml +408 -0
  134. data/data/plates/us-mn.yml +411 -0
  135. data/data/plates/us-mo.yml +356 -0
  136. data/data/plates/us-mp.yml +402 -0
  137. data/data/plates/us-ms.yml +432 -0
  138. data/data/plates/us-mt.yml +619 -0
  139. data/data/plates/us-nc.yml +602 -0
  140. data/data/plates/us-nd.yml +419 -0
  141. data/data/plates/us-ne.yml +483 -0
  142. data/data/plates/us-nh.yml +394 -0
  143. data/data/plates/us-nj.yml +547 -0
  144. data/data/plates/us-nm.yml +574 -0
  145. data/data/plates/us-nv.yml +655 -0
  146. data/data/plates/us-ny.yml +592 -0
  147. data/data/plates/us-oh.yml +404 -0
  148. data/data/plates/us-ok.yml +513 -0
  149. data/data/plates/us-or.yml +392 -0
  150. data/data/plates/us-pa.yml +506 -0
  151. data/data/plates/us-pr.yml +507 -0
  152. data/data/plates/us-ri.yml +445 -0
  153. data/data/plates/us-sc.yml +605 -0
  154. data/data/plates/us-sd.yml +428 -0
  155. data/data/plates/us-tn.yml +471 -0
  156. data/data/plates/us-tx.yml +535 -0
  157. data/data/plates/us-ut.yml +384 -0
  158. data/data/plates/us-va.yml +567 -0
  159. data/data/plates/us-vi.yml +489 -0
  160. data/data/plates/us-vt.yml +458 -0
  161. data/data/plates/us-wa.yml +484 -0
  162. data/data/plates/us-wi.yml +509 -0
  163. data/data/plates/us-wv.yml +446 -0
  164. data/data/plates/us-wy.yml +523 -0
  165. data/data/plates/va.yml +604 -0
  166. data/data/plates/za.yml +1141 -0
  167. data/data/vehicles.json +160653 -105090
  168. data/lib/vehicles/configuration.rb +18 -2
  169. data/lib/vehicles/dataset.rb +73 -18
  170. data/lib/vehicles/fuzzy.rb +115 -0
  171. data/lib/vehicles/http.rb +48 -0
  172. data/lib/vehicles/make.rb +36 -6
  173. data/lib/vehicles/mcp_server.rb +5 -5
  174. data/lib/vehicles/model.rb +42 -6
  175. data/lib/vehicles/plates/jurisdiction.rb +32 -0
  176. data/lib/vehicles/plates/series.rb +291 -0
  177. data/lib/vehicles/plates/template_fill.rb +188 -0
  178. data/lib/vehicles/plates/templates.rb +162 -0
  179. data/lib/vehicles/plates.rb +122 -0
  180. data/lib/vehicles/providers/hosted_provider.rb +49 -58
  181. data/lib/vehicles/providers/local_provider.rb +4 -3
  182. data/lib/vehicles/validators/vehicle_make_validator.rb +3 -1
  183. data/lib/vehicles/validators/vehicle_model_validator.rb +1 -1
  184. data/lib/vehicles/version.rb +1 -1
  185. data/lib/vehicles.rb +53 -16
  186. data/rakelib/data_refresh.rake +109 -0
  187. data/rakelib/plates_refresh.rake +29 -0
  188. data/sig/vehicles.rbs +18 -0
  189. metadata +174 -2
@@ -0,0 +1,567 @@
1
+ # plates/_decode/pl-powiats.yml — the Polish voivodeship + powiat plate codes.
2
+ #
3
+ # THE SOURCE FINDING, and it is the Anlage-5d case rather than the German one:
4
+ # THE POLISH CODE LIST IS INSIDE THE REGULATION. § 31 ust. 2 of the current
5
+ # rozporządzenie, verbatim: "Wyróżniki województw i powiatów dla tablic
6
+ # rejestracyjnych są określone w załączniku nr 13 do rozporządzenia." Załącznik
7
+ # nr 13 is a closed, primary, 380-row table printed inside the instrument, so
8
+ # every row below is authored from the instrument itself — no enthusiast list,
9
+ # no encyclopedia table, no guesswork.
10
+ #
11
+ # WHICH INSTRUMENT, AND WHY IT IS NOT THE ONE MOST SOURCES CITE. The table is
12
+ # consolidated here from three primaries, in force order:
13
+ # * BASE — rozporządzenie Ministra Infrastruktury z dnia 8 listopada 2024 r.
14
+ # w sprawie rejestracji i oznaczania pojazdów, wymagań dla tablic
15
+ # rejestracyjnych oraz wzorów innych dokumentów związanych z rejestracją
16
+ # pojazdów (Dz. U. 2024 poz. 1709), załącznik nr 13; in force 2024-11-30.
17
+ # * Dz. U. 2025 poz. 939 § 1 pkt 4 — three column-5 additions; 2025-07-30.
18
+ # * Dz. U. 2026 poz. 891 § 1 pkt 9 — three column-5 additions; 2026-07-04.
19
+ # The widely-cited Dz. U. 2022 poz. 1847 is NOT the operative instrument: the
20
+ # Sejm ELI register records it "uznany za uchylony" with repealDate 2024-11-30.
21
+ # Its own annex was fetched and read in this pass as a control (its pages are
22
+ # images, not text, in the ISAP PDF) and it differs from the 2024 table in real
23
+ # rows — bydgoski gained BC, kielecki gained KC/KM/KP, ostródzki gained OT/OX,
24
+ # Poznań gained X, Konin gained N, Kalisz gained A, and the tymczasowe column
25
+ # gained the second-letter ranges (V0-V9, J0-J9, A0-A9, Y0-Y9, X0-X9, I0-I9,
26
+ # M0-M9). Building on the repealed text would have shipped six-plus wrong rows.
27
+ #
28
+ # HOW THE PREFIX SPLITS, WHICH IS THE PARSE-CRITICAL FACT (see prefix_split).
29
+ #
30
+ # Referenced by: plates/pl.yml (pl-standard, pl-standard-preeu, pl-motorcycle,
31
+ # pl-moped, pl-electric, pl-historic, pl-historic-moped, pl-professional) via
32
+ # region_encoding.
33
+ jurisdiction: pl
34
+ topic: powiats
35
+ authority:
36
+ name: "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, załącznik nr 13 (do § 31 ust. 2)"
37
+ url: "https://api.sejm.gov.pl/eli/acts/DU/2024/1709"
38
+ sources:
39
+ - "https://api.sejm.gov.pl/eli/acts/DU/2024/1709/text/O/D20241709.pdf # Dz. U. 2024 poz. 1709, załącznik nr 13 'WYRÓŻNIKI WOJEWÓDZTW I POWIATÓW DLA TABLIC REJESTRACYJNYCH', printed pages 79-88 — all 380 rows, all 16 voivodeship blocks, columns 4 (wyróżnik województwa), 5 (wyróżnik powiatu) and 6 (tymczasowe + indywidualne). § 31 ust. 2 is the delegation, § 31 ust. 3-5 the second-letter, merger and split rules. Accessed 2026-08-02"
40
+ - "https://api.sejm.gov.pl/eli/acts/DU/2025/939/text/O/D20250939.pdf # Dz. U. 2025 poz. 939 § 1 pkt 4: 'w załączniku nr 13 do rozporządzenia w tabeli ... w kolumnie 5: a) w lp. 1 w wierszu dotyczącym powiatu wrocławskiego po literach WR dodaje się przecinek i litery WW, b) w lp. 3 ... powiatu lubelskiego po literach UB ... VB, c) w lp. 8 ... powiatu nyskiego po literach NY ... NX'; § 2 in force 14 days after publication (2025-07-15) = 2025-07-30. Accessed 2026-08-02"
41
+ - "https://api.sejm.gov.pl/eli/acts/DU/2026/891/text/O/D20260891.pdf # Dz. U. 2026 poz. 891 § 1 pkt 9: column-5 additions for chełmiński (CE, CM), tarnogórski (TR, TN) and olsztyński (OZ, OP); in force 2026-07-04. Accessed 2026-08-02"
42
+ - "https://api.sejm.gov.pl/eli/acts/DU/2024/1709 # the Sejm ELI register entry: status 'obowiązujący', entryIntoForce 2024-11-30, and the two amending acts above. This is also the record that shows Dz. U. 2022 poz. 1847 repealed on 2024-11-30. Accessed 2026-08-02"
43
+ - "https://api.sejm.gov.pl/eli/acts/DU/1999/632/text/O/D19990632.pdf # Dz. U. 1999 nr 59 poz. 632 § 24 ('Ustala się dla tablic rejestracyjnych wyróżniki województw oraz wyróżniki powiatów, określone w załączniku nr 5') and § 49, which commences § 22-24 on 1 May 2000 — the date the voivodeship+powiat code system began. Accessed 2026-08-02"
44
+ period: { start: 2000 }
45
+ period_evidence: enacted-commencement
46
+ period_note: >-
47
+ 2000 is the commencement of the CODE SYSTEM these rows belong to, not of the
48
+ individual rows. § 49 of Dz. U. 1999 nr 59 poz. 632 reads, verbatim:
49
+ "Rozporządzenie wchodzi w życie z dniem 1 lipca 1999 r., z wyjątkiem § 16,
50
+ § 18 ust. 3-8, § 19, § 21 ust. 2, 4 i 5, § 22-24, § 29 i 30, które wchodzą
51
+ w życie z dniem 1 maja 2000 r." — § 24 is the wyróżniki annex and § 21 ust. 2
52
+ the serial grammar, so the voivodeship-first system began on 1 MAY 2000. Its
53
+ complement is in § 41 of the same instrument ("Do dnia 30 kwietnia 2000 r.
54
+ organ rejestrujący wydaje tablice rejestracyjne spełniające warunki określone
55
+ w § 39") and in § 39 ust. 2, which let stock bearing the pre-reform voivodeship
56
+ codes be issued "jednak nie dłużej niż do dnia 30 kwietnia 2000 r." Individual
57
+ rows are younger than 2000 — karkonoski replaced jeleniogórski, and the
58
+ multi-code rows below accumulated as pools ran out — and PER-ROW PERIODS ARE A
59
+ RECORDED GAP: the annex prints no dates and this pass did not diff every
60
+ amendment between 2000 and 2024.
61
+ consolidated_as_of: "2026-08-02"
62
+
63
+ # ---------------------------------------------------------------------------
64
+ # THE PREFIX SPLIT — the single most parse-critical fact in this file, and it
65
+ # is DERIVED FROM THE GRAMMAR, not from folklore.
66
+ # ---------------------------------------------------------------------------
67
+ prefix_split:
68
+ rule: >-
69
+ A Polish registration number begins with a wyróżnik województwa of ONE
70
+ letter followed by a wyróżnik powiatu of ONE OR TWO letters, so the prefix
71
+ is two or three characters and is NOT self-delimiting. For the ordinary
72
+ CAR series the boundary is nevertheless deterministic, and the reason is in
73
+ § 30 ust. 2 pkt 1 of the rozporządzenie: every one of the five vehicle
74
+ wyróżnik layouts available to a one-letter powiat (99999, 9999L, 999LL,
75
+ 9L999, 9LL99) BEGINS WITH A DIGIT. Therefore, on a car plate, if the THIRD
76
+ character is a letter the prefix is three characters; if it is a digit the
77
+ prefix is two. Take the longest matching prefix from `codes` below and this
78
+ rule will agree with it.
79
+ worked_example: >-
80
+ Podlaskie is the case that looks dangerous and is not. Białystok is B + I,
81
+ so its prefix is the two-character "BI"; białostocki is B + IA and B + IB, so
82
+ its prefixes are the three-character "BIA" and "BIB". The string "BIA12345"
83
+ could in principle be BI + "A12345" or BIA + "12345". It is not ambiguous:
84
+ "A12345" is six characters and every one-letter-powiat car layout is five, so
85
+ only BIA + "12345" parses, and the third-character rule reaches the same
86
+ answer without counting. This pass checked the property MECHANICALLY across
87
+ all 689 prefixes and all five one-letter-powiat car layouts — zero
88
+ ambiguities.
89
+ motorcycle_caveat: >-
90
+ THE RULE DOES NOT HOLD FOR MOTORCYCLE AND MOPED PLATES. § 30 ust. 2 pkt 3
91
+ lit. a gives one-letter powiats the layouts "litera i trzy cyfry" and "dwie
92
+ litery i dwie cyfry", which DO begin with a letter. There the boundary is
93
+ resolved by LENGTH instead: a motorcycle vehicle wyróżnik is always four
94
+ characters, so a six-character string has a two-character prefix and a
95
+ seven-character string a three-character one. A consumer that does not know
96
+ the plate SIZE must carry both readings.
97
+ letters_never_a_voivodeship:
98
+ letters: ["H", "U"]
99
+ note: >-
100
+ The 25-letter alphabet of § 30 ust. 1 is A-Z without Q. Twenty-three of
101
+ those letters appear in column 4 of the annex as a wyróżnik województwa;
102
+ exactly TWO never do — H and U — and that is not a coincidence. H is the
103
+ reserved base of the six service prefixes (HB, HP, HK, HA, HW, HC:
104
+ § 5 ust. 3 rozporządzenia MSWiA, Dz. U. 2025 poz. 1326) and U is the
105
+ armed-forces wyróżnik (§ 6 ust. 3 pkt 1 rozporządzenia MON, Dz. U. 2023
106
+ poz. 1776, "wyróżnika Sił Zbrojnych, którym jest wielka litera U
107
+ umieszczana jako pierwsza"). A leading H or U therefore means the plate is
108
+ NOT a civil registration and must not be routed through this table.
109
+ second_letter_rule: >-
110
+ § 31 ust. 3: where the annex gives a voivodeship TWO letters, "numery
111
+ rejestracyjne z wykorzystaniem drugiej litery są tworzone po wyczerpaniu się
112
+ możliwości utworzenia numerów rejestracyjnych ... z wykorzystaniem pierwszej
113
+ litery" — the second letter is an overflow pool, not a parallel one, so the
114
+ V/J/A/Y/X/I/M prefixes are rarer on the road than their D/K/W/R/G/S/P twins
115
+ even though both are equally lawful. Dz. U. 2025 poz. 939 § 1 pkt 3 added
116
+ the one exception: the buyer of an INDIVIDUAL plate may choose which of the
117
+ two voivodeship letters their number is built from.
118
+ merger_and_split_rule: >-
119
+ § 31 ust. 4-5: when powiats MERGE, "na tablicach rejestracyjnych stosuje się
120
+ dotychczasowe wyróżniki tych powiatów" — both old codes stay in service; when
121
+ a powiat is SPLIT, the successor authorities keep using the existing code
122
+ until new ones are set, having agreed how to divide the unused pool. Codes
123
+ therefore outlive the units that earned them, and a code withdrawn from the
124
+ annex still sits on the road because a Polish plate is only exchanged on
125
+ re-registration (art. 73 ust. 1a Prawa o ruchu drogowym expressly lets the
126
+ buyer KEEP it). WITHDRAWN CODES ARE NOT IN THIS TABLE AND ARE A RECORDED GAP:
127
+ a prefix absent here must be treated as unresolved, never as invalid.
128
+
129
+ # ---------------------------------------------------------------------------
130
+ # The 16 voivodeships: column 4 (wyróżnik województwa, used on tablice
131
+ # zwyczajne, zabytkowe and dyplomatyczne) and column 6 (the letter+digit
132
+ # wyróżnik used on tablice tymczasowe and indywidualne).
133
+ # ---------------------------------------------------------------------------
134
+ voivodeships:
135
+ - { lp: 1, name: dolnośląskie, letters: ["D", "V"], temporary_individual: "D0-D9, V0-V9" }
136
+ - { lp: 2, name: kujawsko-pomorskie, letters: ["C"], temporary_individual: "C0-C9" }
137
+ - { lp: 3, name: lubelskie, letters: ["L"], temporary_individual: "L0-L9" }
138
+ - { lp: 4, name: lubuskie, letters: ["F"], temporary_individual: "F0-F9" }
139
+ - { lp: 5, name: łódzkie, letters: ["E"], temporary_individual: "E0-E9" }
140
+ - { lp: 6, name: małopolskie, letters: ["K", "J"], temporary_individual: "K0-K9, J0-J9" }
141
+ - { lp: 7, name: mazowieckie, letters: ["W", "A"], temporary_individual: "W0-W9, A0-A9" }
142
+ - { lp: 8, name: opolskie, letters: ["O"], temporary_individual: "O0-O9" }
143
+ - { lp: 9, name: podkarpackie, letters: ["R", "Y"], temporary_individual: "R0-R9, Y0-Y9" }
144
+ - { lp: 10, name: podlaskie, letters: ["B"], temporary_individual: "B0-B9" }
145
+ - { lp: 11, name: pomorskie, letters: ["G", "X"], temporary_individual: "G0-G9, X0-X9" }
146
+ - { lp: 12, name: śląskie, letters: ["S", "I"], temporary_individual: "S0-S9, I0-I9" }
147
+ - { lp: 13, name: świętokrzyskie, letters: ["T"], temporary_individual: "T0-T9" }
148
+ - { lp: 14, name: warmińsko-mazurskie, letters: ["N"], temporary_individual: "N0-N9" }
149
+ - { lp: 15, name: wielkopolskie, letters: ["P", "M"], temporary_individual: "P0-P9, M0-M9" }
150
+ - { lp: 16, name: zachodniopomorskie, letters: ["Z"], temporary_individual: "Z0-Z9" }
151
+
152
+ counts:
153
+ rows: 380
154
+ one_letter_powiat_codes: 92
155
+ two_letter_powiat_codes: 345
156
+ rows_with_more_than_one_code: 31
157
+ distinct_prefixes: 689
158
+ counts_note: >-
159
+ 380 rows = Poland's 314 powiats plus its 66 miasta na prawach powiatu, which
160
+ is the complete set; the annex has no residual or "other" row. `prefixes` on
161
+ each row is DERIVED, not quoted: it is the cross product of the voivodeship
162
+ letters with that row's powiat codes, recorded because a parse API needs the
163
+ concrete strings and the annex prints only the two columns. All 689 are
164
+ distinct — checked mechanically — so a prefix never decodes to two powiats.
165
+
166
+ # ---------------------------------------------------------------------------
167
+ # ZAŁĄCZNIK NR 13 — the 380 rows, in the annex's own order (by voivodeship Lp.,
168
+ # then as the annex prints them: miasta na prawach powiatu first, then powiats).
169
+ # `powiat_codes` is column 5 verbatim; `prefixes` is derived (see counts_note).
170
+ # ---------------------------------------------------------------------------
171
+ codes:
172
+ # 1. DOLNOŚLĄSKIE — wyróżnik województwa D, V | tymczasowe + indywidualne D0-D9, V0-V9
173
+ - { powiat: Jelenia Góra, voivodeship: dolnośląskie, powiat_codes: ["J"], prefixes: ["DJ", "VJ"], powiat_code_length: 1 }
174
+ - { powiat: Legnica, voivodeship: dolnośląskie, powiat_codes: ["L"], prefixes: ["DL", "VL"], powiat_code_length: 1 }
175
+ - { powiat: Wałbrzych, voivodeship: dolnośląskie, powiat_codes: ["B"], prefixes: ["DB", "VB"], powiat_code_length: 1 }
176
+ - { powiat: Wrocław, voivodeship: dolnośląskie, powiat_codes: ["W", "X"], prefixes: ["DW", "DX", "VW", "VX"], powiat_code_length: 1 }
177
+ - { powiat: bolesławiecki, voivodeship: dolnośląskie, powiat_codes: ["BL"], prefixes: ["DBL", "VBL"], powiat_code_length: 2 }
178
+ - { powiat: dzierżoniowski, voivodeship: dolnośląskie, powiat_codes: ["DZ"], prefixes: ["DDZ", "VDZ"], powiat_code_length: 2 }
179
+ - { powiat: głogowski, voivodeship: dolnośląskie, powiat_codes: ["GL"], prefixes: ["DGL", "VGL"], powiat_code_length: 2 }
180
+ - { powiat: górowski, voivodeship: dolnośląskie, powiat_codes: ["GR"], prefixes: ["DGR", "VGR"], powiat_code_length: 2 }
181
+ - { powiat: jaworski, voivodeship: dolnośląskie, powiat_codes: ["JA"], prefixes: ["DJA", "VJA"], powiat_code_length: 2 }
182
+ - { powiat: karkonoski, voivodeship: dolnośląskie, powiat_codes: ["JE"], prefixes: ["DJE", "VJE"], powiat_code_length: 2 }
183
+ - { powiat: kamiennogórski, voivodeship: dolnośląskie, powiat_codes: ["KA"], prefixes: ["DKA", "VKA"], powiat_code_length: 2 }
184
+ - { powiat: kłodzki, voivodeship: dolnośląskie, powiat_codes: ["KL"], prefixes: ["DKL", "VKL"], powiat_code_length: 2 }
185
+ - { powiat: legnicki, voivodeship: dolnośląskie, powiat_codes: ["LE"], prefixes: ["DLE", "VLE"], powiat_code_length: 2 }
186
+ - { powiat: lubański, voivodeship: dolnośląskie, powiat_codes: ["LB"], prefixes: ["DLB", "VLB"], powiat_code_length: 2 }
187
+ - { powiat: lubiński, voivodeship: dolnośląskie, powiat_codes: ["LU"], prefixes: ["DLU", "VLU"], powiat_code_length: 2 }
188
+ - { powiat: lwówecki, voivodeship: dolnośląskie, powiat_codes: ["LW"], prefixes: ["DLW", "VLW"], powiat_code_length: 2 }
189
+ - { powiat: milicki, voivodeship: dolnośląskie, powiat_codes: ["MI"], prefixes: ["DMI", "VMI"], powiat_code_length: 2 }
190
+ - { powiat: oleśnicki, voivodeship: dolnośląskie, powiat_codes: ["OL"], prefixes: ["DOL", "VOL"], powiat_code_length: 2 }
191
+ - { powiat: oławski, voivodeship: dolnośląskie, powiat_codes: ["OA"], prefixes: ["DOA", "VOA"], powiat_code_length: 2 }
192
+ - { powiat: polkowicki, voivodeship: dolnośląskie, powiat_codes: ["PL"], prefixes: ["DPL", "VPL"], powiat_code_length: 2 }
193
+ - { powiat: strzeliński, voivodeship: dolnośląskie, powiat_codes: ["ST"], prefixes: ["DST", "VST"], powiat_code_length: 2 }
194
+ - { powiat: średzki, voivodeship: dolnośląskie, powiat_codes: ["SR"], prefixes: ["DSR", "VSR"], powiat_code_length: 2 }
195
+ - { powiat: świdnicki, voivodeship: dolnośląskie, powiat_codes: ["SW"], prefixes: ["DSW", "VSW"], powiat_code_length: 2 }
196
+ - { powiat: trzebnicki, voivodeship: dolnośląskie, powiat_codes: ["TR"], prefixes: ["DTR", "VTR"], powiat_code_length: 2 }
197
+ - { powiat: wałbrzyski, voivodeship: dolnośląskie, powiat_codes: ["BA"], prefixes: ["DBA", "VBA"], powiat_code_length: 2 }
198
+ - { powiat: wołowski, voivodeship: dolnośląskie, powiat_codes: ["WL"], prefixes: ["DWL", "VWL"], powiat_code_length: 2 }
199
+ - { powiat: wrocławski, voivodeship: dolnośląskie, powiat_codes: ["WR", "WW"], prefixes: ["DWR", "DWW", "VWR", "VWW"], powiat_code_length: 2, amended: "Dz.U. 2025 poz. 939 § 1 pkt 4 lit. a (in force 2025-07-30)" }
200
+ - { powiat: ząbkowicki, voivodeship: dolnośląskie, powiat_codes: ["ZA"], prefixes: ["DZA", "VZA"], powiat_code_length: 2 }
201
+ - { powiat: zgorzelecki, voivodeship: dolnośląskie, powiat_codes: ["ZG"], prefixes: ["DZG", "VZG"], powiat_code_length: 2 }
202
+ - { powiat: złotoryjski, voivodeship: dolnośląskie, powiat_codes: ["ZL"], prefixes: ["DZL", "VZL"], powiat_code_length: 2 }
203
+ # 2. KUJAWSKO-POMORSKIE — wyróżnik województwa C | tymczasowe + indywidualne C0-C9
204
+ - { powiat: Bydgoszcz, voivodeship: kujawsko-pomorskie, powiat_codes: ["B"], prefixes: ["CB"], powiat_code_length: 1 }
205
+ - { powiat: Grudziądz, voivodeship: kujawsko-pomorskie, powiat_codes: ["G"], prefixes: ["CG"], powiat_code_length: 1 }
206
+ - { powiat: Toruń, voivodeship: kujawsko-pomorskie, powiat_codes: ["T"], prefixes: ["CT"], powiat_code_length: 1 }
207
+ - { powiat: Włocławek, voivodeship: kujawsko-pomorskie, powiat_codes: ["W"], prefixes: ["CW"], powiat_code_length: 1 }
208
+ - { powiat: aleksandrowski, voivodeship: kujawsko-pomorskie, powiat_codes: ["AL"], prefixes: ["CAL"], powiat_code_length: 2 }
209
+ - { powiat: brodnicki, voivodeship: kujawsko-pomorskie, powiat_codes: ["BR"], prefixes: ["CBR"], powiat_code_length: 2 }
210
+ - { powiat: bydgoski, voivodeship: kujawsko-pomorskie, powiat_codes: ["BY", "BC"], prefixes: ["CBC", "CBY"], powiat_code_length: 2 }
211
+ - { powiat: chełmiński, voivodeship: kujawsko-pomorskie, powiat_codes: ["CH", "CE", "CM"], prefixes: ["CCE", "CCH", "CCM"], powiat_code_length: 2, amended: "Dz.U. 2026 poz. 891 § 1 pkt 9 lit. a (in force 2026-07-04)" }
212
+ - { powiat: golubsko-dobrzyński, voivodeship: kujawsko-pomorskie, powiat_codes: ["GD"], prefixes: ["CGD"], powiat_code_length: 2 }
213
+ - { powiat: grudziądzki, voivodeship: kujawsko-pomorskie, powiat_codes: ["GR"], prefixes: ["CGR"], powiat_code_length: 2 }
214
+ - { powiat: inowrocławski, voivodeship: kujawsko-pomorskie, powiat_codes: ["IN"], prefixes: ["CIN"], powiat_code_length: 2 }
215
+ - { powiat: lipnowski, voivodeship: kujawsko-pomorskie, powiat_codes: ["LI"], prefixes: ["CLI"], powiat_code_length: 2 }
216
+ - { powiat: mogileński, voivodeship: kujawsko-pomorskie, powiat_codes: ["MG"], prefixes: ["CMG"], powiat_code_length: 2 }
217
+ - { powiat: nakielski, voivodeship: kujawsko-pomorskie, powiat_codes: ["NA"], prefixes: ["CNA"], powiat_code_length: 2 }
218
+ - { powiat: radziejowski, voivodeship: kujawsko-pomorskie, powiat_codes: ["RA"], prefixes: ["CRA"], powiat_code_length: 2 }
219
+ - { powiat: rypiński, voivodeship: kujawsko-pomorskie, powiat_codes: ["RY"], prefixes: ["CRY"], powiat_code_length: 2 }
220
+ - { powiat: sępoleński, voivodeship: kujawsko-pomorskie, powiat_codes: ["SE"], prefixes: ["CSE"], powiat_code_length: 2 }
221
+ - { powiat: świecki, voivodeship: kujawsko-pomorskie, powiat_codes: ["SW"], prefixes: ["CSW"], powiat_code_length: 2 }
222
+ - { powiat: toruński, voivodeship: kujawsko-pomorskie, powiat_codes: ["TR"], prefixes: ["CTR"], powiat_code_length: 2 }
223
+ - { powiat: tucholski, voivodeship: kujawsko-pomorskie, powiat_codes: ["TU"], prefixes: ["CTU"], powiat_code_length: 2 }
224
+ - { powiat: wąbrzeski, voivodeship: kujawsko-pomorskie, powiat_codes: ["WA"], prefixes: ["CWA"], powiat_code_length: 2 }
225
+ - { powiat: włocławski, voivodeship: kujawsko-pomorskie, powiat_codes: ["WL"], prefixes: ["CWL"], powiat_code_length: 2 }
226
+ - { powiat: żniński, voivodeship: kujawsko-pomorskie, powiat_codes: ["ZN"], prefixes: ["CZN"], powiat_code_length: 2 }
227
+ # 3. LUBELSKIE — wyróżnik województwa L | tymczasowe + indywidualne L0-L9
228
+ - { powiat: Biała Podlaska, voivodeship: lubelskie, powiat_codes: ["B"], prefixes: ["LB"], powiat_code_length: 1 }
229
+ - { powiat: Chełm, voivodeship: lubelskie, powiat_codes: ["C"], prefixes: ["LC"], powiat_code_length: 1 }
230
+ - { powiat: Lublin, voivodeship: lubelskie, powiat_codes: ["U"], prefixes: ["LU"], powiat_code_length: 1 }
231
+ - { powiat: Zamość, voivodeship: lubelskie, powiat_codes: ["Z"], prefixes: ["LZ"], powiat_code_length: 1 }
232
+ - { powiat: bialski, voivodeship: lubelskie, powiat_codes: ["BI"], prefixes: ["LBI"], powiat_code_length: 2 }
233
+ - { powiat: biłgorajski, voivodeship: lubelskie, powiat_codes: ["BL"], prefixes: ["LBL"], powiat_code_length: 2 }
234
+ - { powiat: chełmski, voivodeship: lubelskie, powiat_codes: ["CH"], prefixes: ["LCH"], powiat_code_length: 2 }
235
+ - { powiat: hrubieszowski, voivodeship: lubelskie, powiat_codes: ["HR"], prefixes: ["LHR"], powiat_code_length: 2 }
236
+ - { powiat: janowski, voivodeship: lubelskie, powiat_codes: ["JA"], prefixes: ["LJA"], powiat_code_length: 2 }
237
+ - { powiat: krasnostawski, voivodeship: lubelskie, powiat_codes: ["KS"], prefixes: ["LKS"], powiat_code_length: 2 }
238
+ - { powiat: kraśnicki, voivodeship: lubelskie, powiat_codes: ["KR"], prefixes: ["LKR"], powiat_code_length: 2 }
239
+ - { powiat: lubartowski, voivodeship: lubelskie, powiat_codes: ["LB"], prefixes: ["LLB"], powiat_code_length: 2 }
240
+ - { powiat: lubelski, voivodeship: lubelskie, powiat_codes: ["UB", "VB"], prefixes: ["LUB", "LVB"], powiat_code_length: 2, amended: "Dz.U. 2025 poz. 939 § 1 pkt 4 lit. b (in force 2025-07-30)" }
241
+ - { powiat: łęczyński, voivodeship: lubelskie, powiat_codes: ["LE"], prefixes: ["LLE"], powiat_code_length: 2 }
242
+ - { powiat: łukowski, voivodeship: lubelskie, powiat_codes: ["LU"], prefixes: ["LLU"], powiat_code_length: 2 }
243
+ - { powiat: opolski, voivodeship: lubelskie, powiat_codes: ["OP"], prefixes: ["LOP"], powiat_code_length: 2 }
244
+ - { powiat: parczewski, voivodeship: lubelskie, powiat_codes: ["PA"], prefixes: ["LPA"], powiat_code_length: 2 }
245
+ - { powiat: puławski, voivodeship: lubelskie, powiat_codes: ["PU"], prefixes: ["LPU"], powiat_code_length: 2 }
246
+ - { powiat: radzyński, voivodeship: lubelskie, powiat_codes: ["RA"], prefixes: ["LRA"], powiat_code_length: 2 }
247
+ - { powiat: rycki, voivodeship: lubelskie, powiat_codes: ["RY"], prefixes: ["LRY"], powiat_code_length: 2 }
248
+ - { powiat: świdnicki, voivodeship: lubelskie, powiat_codes: ["SW"], prefixes: ["LSW"], powiat_code_length: 2 }
249
+ - { powiat: tomaszowski, voivodeship: lubelskie, powiat_codes: ["TM"], prefixes: ["LTM"], powiat_code_length: 2 }
250
+ - { powiat: włodawski, voivodeship: lubelskie, powiat_codes: ["WL"], prefixes: ["LWL"], powiat_code_length: 2 }
251
+ - { powiat: zamojski, voivodeship: lubelskie, powiat_codes: ["ZA"], prefixes: ["LZA"], powiat_code_length: 2 }
252
+ # 4. LUBUSKIE — wyróżnik województwa F | tymczasowe + indywidualne F0-F9
253
+ - { powiat: Gorzów Wielkopolski, voivodeship: lubuskie, powiat_codes: ["G"], prefixes: ["FG"], powiat_code_length: 1 }
254
+ - { powiat: Zielona Góra, voivodeship: lubuskie, powiat_codes: ["Z"], prefixes: ["FZ"], powiat_code_length: 1 }
255
+ - { powiat: gorzowski, voivodeship: lubuskie, powiat_codes: ["GW"], prefixes: ["FGW"], powiat_code_length: 2 }
256
+ - { powiat: krośnieński, voivodeship: lubuskie, powiat_codes: ["KR"], prefixes: ["FKR"], powiat_code_length: 2 }
257
+ - { powiat: międzyrzecki, voivodeship: lubuskie, powiat_codes: ["MI"], prefixes: ["FMI"], powiat_code_length: 2 }
258
+ - { powiat: nowosolski, voivodeship: lubuskie, powiat_codes: ["NW"], prefixes: ["FNW"], powiat_code_length: 2 }
259
+ - { powiat: słubicki, voivodeship: lubuskie, powiat_codes: ["SL"], prefixes: ["FSL"], powiat_code_length: 2 }
260
+ - { powiat: strzelecko-drezdenecki, voivodeship: lubuskie, powiat_codes: ["SD"], prefixes: ["FSD"], powiat_code_length: 2 }
261
+ - { powiat: sulęciński, voivodeship: lubuskie, powiat_codes: ["SU"], prefixes: ["FSU"], powiat_code_length: 2 }
262
+ - { powiat: świebodziński, voivodeship: lubuskie, powiat_codes: ["SW"], prefixes: ["FSW"], powiat_code_length: 2 }
263
+ - { powiat: wschowski, voivodeship: lubuskie, powiat_codes: ["WS"], prefixes: ["FWS"], powiat_code_length: 2 }
264
+ - { powiat: zielonogórski, voivodeship: lubuskie, powiat_codes: ["ZI"], prefixes: ["FZI"], powiat_code_length: 2 }
265
+ - { powiat: żagański, voivodeship: lubuskie, powiat_codes: ["ZG"], prefixes: ["FZG"], powiat_code_length: 2 }
266
+ - { powiat: żarski, voivodeship: lubuskie, powiat_codes: ["ZA"], prefixes: ["FZA"], powiat_code_length: 2 }
267
+ # 5. ŁÓDZKIE — wyróżnik województwa E | tymczasowe + indywidualne E0-E9
268
+ - { powiat: Łódź, voivodeship: łódzkie, powiat_codes: ["L", "D"], prefixes: ["ED", "EL"], powiat_code_length: 1 }
269
+ - { powiat: Piotrków Trybunalski, voivodeship: łódzkie, powiat_codes: ["P"], prefixes: ["EP"], powiat_code_length: 1 }
270
+ - { powiat: Skierniewice, voivodeship: łódzkie, powiat_codes: ["S"], prefixes: ["ES"], powiat_code_length: 1 }
271
+ - { powiat: brzeziński, voivodeship: łódzkie, powiat_codes: ["BR"], prefixes: ["EBR"], powiat_code_length: 2 }
272
+ - { powiat: bełchatowski, voivodeship: łódzkie, powiat_codes: ["BE"], prefixes: ["EBE"], powiat_code_length: 2 }
273
+ - { powiat: kutnowski, voivodeship: łódzkie, powiat_codes: ["KU"], prefixes: ["EKU"], powiat_code_length: 2 }
274
+ - { powiat: łaski, voivodeship: łódzkie, powiat_codes: ["LA"], prefixes: ["ELA"], powiat_code_length: 2 }
275
+ - { powiat: łęczycki, voivodeship: łódzkie, powiat_codes: ["LE"], prefixes: ["ELE"], powiat_code_length: 2 }
276
+ - { powiat: łowicki, voivodeship: łódzkie, powiat_codes: ["LC"], prefixes: ["ELC"], powiat_code_length: 2 }
277
+ - { powiat: łódzki wschodni, voivodeship: łódzkie, powiat_codes: ["LW"], prefixes: ["ELW"], powiat_code_length: 2 }
278
+ - { powiat: opoczyński, voivodeship: łódzkie, powiat_codes: ["OP"], prefixes: ["EOP"], powiat_code_length: 2 }
279
+ - { powiat: pabianicki, voivodeship: łódzkie, powiat_codes: ["PA"], prefixes: ["EPA"], powiat_code_length: 2 }
280
+ - { powiat: pajęczański, voivodeship: łódzkie, powiat_codes: ["PJ"], prefixes: ["EPJ"], powiat_code_length: 2 }
281
+ - { powiat: piotrkowski, voivodeship: łódzkie, powiat_codes: ["PI"], prefixes: ["EPI"], powiat_code_length: 2 }
282
+ - { powiat: poddębicki, voivodeship: łódzkie, powiat_codes: ["PD"], prefixes: ["EPD"], powiat_code_length: 2 }
283
+ - { powiat: radomszczański, voivodeship: łódzkie, powiat_codes: ["RA"], prefixes: ["ERA"], powiat_code_length: 2 }
284
+ - { powiat: rawski, voivodeship: łódzkie, powiat_codes: ["RW"], prefixes: ["ERW"], powiat_code_length: 2 }
285
+ - { powiat: sieradzki, voivodeship: łódzkie, powiat_codes: ["SI"], prefixes: ["ESI"], powiat_code_length: 2 }
286
+ - { powiat: skierniewicki, voivodeship: łódzkie, powiat_codes: ["SK"], prefixes: ["ESK"], powiat_code_length: 2 }
287
+ - { powiat: tomaszowski, voivodeship: łódzkie, powiat_codes: ["TM"], prefixes: ["ETM"], powiat_code_length: 2 }
288
+ - { powiat: wieluński, voivodeship: łódzkie, powiat_codes: ["WI"], prefixes: ["EWI"], powiat_code_length: 2 }
289
+ - { powiat: wieruszowski, voivodeship: łódzkie, powiat_codes: ["WE"], prefixes: ["EWE"], powiat_code_length: 2 }
290
+ - { powiat: zduńskowolski, voivodeship: łódzkie, powiat_codes: ["ZD"], prefixes: ["EZD"], powiat_code_length: 2 }
291
+ - { powiat: zgierski, voivodeship: łódzkie, powiat_codes: ["ZG"], prefixes: ["EZG"], powiat_code_length: 2 }
292
+ # 6. MAŁOPOLSKIE — wyróżnik województwa K, J | tymczasowe + indywidualne K0-K9, J0-J9
293
+ - { powiat: Kraków, voivodeship: małopolskie, powiat_codes: ["R", "K"], prefixes: ["JK", "JR", "KK", "KR"], powiat_code_length: 1 }
294
+ - { powiat: Nowy Sącz, voivodeship: małopolskie, powiat_codes: ["N"], prefixes: ["JN", "KN"], powiat_code_length: 1 }
295
+ - { powiat: Tarnów, voivodeship: małopolskie, powiat_codes: ["T"], prefixes: ["JT", "KT"], powiat_code_length: 1 }
296
+ - { powiat: bocheński, voivodeship: małopolskie, powiat_codes: ["BC", "BA"], prefixes: ["JBA", "JBC", "KBA", "KBC"], powiat_code_length: 2 }
297
+ - { powiat: brzeski, voivodeship: małopolskie, powiat_codes: ["BR"], prefixes: ["JBR", "KBR"], powiat_code_length: 2 }
298
+ - { powiat: chrzanowski, voivodeship: małopolskie, powiat_codes: ["CH"], prefixes: ["JCH", "KCH"], powiat_code_length: 2 }
299
+ - { powiat: dąbrowski, voivodeship: małopolskie, powiat_codes: ["DA"], prefixes: ["JDA", "KDA"], powiat_code_length: 2 }
300
+ - { powiat: gorlicki, voivodeship: małopolskie, powiat_codes: ["GR"], prefixes: ["JGR", "KGR"], powiat_code_length: 2 }
301
+ - { powiat: krakowski, voivodeship: małopolskie, powiat_codes: ["RA", "RK"], prefixes: ["JRA", "JRK", "KRA", "KRK"], powiat_code_length: 2 }
302
+ - { powiat: limanowski, voivodeship: małopolskie, powiat_codes: ["LI"], prefixes: ["JLI", "KLI"], powiat_code_length: 2 }
303
+ - { powiat: miechowski, voivodeship: małopolskie, powiat_codes: ["MI"], prefixes: ["JMI", "KMI"], powiat_code_length: 2 }
304
+ - { powiat: myślenicki, voivodeship: małopolskie, powiat_codes: ["MY"], prefixes: ["JMY", "KMY"], powiat_code_length: 2 }
305
+ - { powiat: nowosądecki, voivodeship: małopolskie, powiat_codes: ["NS"], prefixes: ["JNS", "KNS"], powiat_code_length: 2 }
306
+ - { powiat: nowotarski, voivodeship: małopolskie, powiat_codes: ["NT"], prefixes: ["JNT", "KNT"], powiat_code_length: 2 }
307
+ - { powiat: olkuski, voivodeship: małopolskie, powiat_codes: ["OL"], prefixes: ["JOL", "KOL"], powiat_code_length: 2 }
308
+ - { powiat: oświęcimski, voivodeship: małopolskie, powiat_codes: ["OS"], prefixes: ["JOS", "KOS"], powiat_code_length: 2 }
309
+ - { powiat: proszowicki, voivodeship: małopolskie, powiat_codes: ["PR"], prefixes: ["JPR", "KPR"], powiat_code_length: 2 }
310
+ - { powiat: suski, voivodeship: małopolskie, powiat_codes: ["SU"], prefixes: ["JSU", "KSU"], powiat_code_length: 2 }
311
+ - { powiat: tarnowski, voivodeship: małopolskie, powiat_codes: ["TA"], prefixes: ["JTA", "KTA"], powiat_code_length: 2 }
312
+ - { powiat: tatrzański, voivodeship: małopolskie, powiat_codes: ["TT"], prefixes: ["JTT", "KTT"], powiat_code_length: 2 }
313
+ - { powiat: wadowicki, voivodeship: małopolskie, powiat_codes: ["WA"], prefixes: ["JWA", "KWA"], powiat_code_length: 2 }
314
+ - { powiat: wielicki, voivodeship: małopolskie, powiat_codes: ["WI"], prefixes: ["JWI", "KWI"], powiat_code_length: 2 }
315
+ # 7. MAZOWIECKIE — wyróżnik województwa W, A | tymczasowe + indywidualne W0-W9, A0-A9
316
+ - { powiat: Ostrołęka, voivodeship: mazowieckie, powiat_codes: ["O"], prefixes: ["AO", "WO"], powiat_code_length: 1 }
317
+ - { powiat: Płock, voivodeship: mazowieckie, powiat_codes: ["P"], prefixes: ["AP", "WP"], powiat_code_length: 1 }
318
+ - { powiat: Radom, voivodeship: mazowieckie, powiat_codes: ["R"], prefixes: ["AR", "WR"], powiat_code_length: 1 }
319
+ - { powiat: Siedlce, voivodeship: mazowieckie, powiat_codes: ["S"], prefixes: ["AS", "WS"], powiat_code_length: 1 }
320
+ - { powiat: białobrzeski, voivodeship: mazowieckie, powiat_codes: ["BR"], prefixes: ["ABR", "WBR"], powiat_code_length: 2 }
321
+ - { powiat: ciechanowski, voivodeship: mazowieckie, powiat_codes: ["CI"], prefixes: ["ACI", "WCI"], powiat_code_length: 2 }
322
+ - { powiat: garwoliński, voivodeship: mazowieckie, powiat_codes: ["G"], prefixes: ["AG", "WG"], powiat_code_length: 1 }
323
+ - { powiat: gostyniński, voivodeship: mazowieckie, powiat_codes: ["GS"], prefixes: ["AGS", "WGS"], powiat_code_length: 2 }
324
+ - { powiat: grodziski, voivodeship: mazowieckie, powiat_codes: ["GM"], prefixes: ["AGM", "WGM"], powiat_code_length: 2 }
325
+ - { powiat: grójecki, voivodeship: mazowieckie, powiat_codes: ["GR"], prefixes: ["AGR", "WGR"], powiat_code_length: 2 }
326
+ - { powiat: kozienicki, voivodeship: mazowieckie, powiat_codes: ["KZ"], prefixes: ["AKZ", "WKZ"], powiat_code_length: 2 }
327
+ - { powiat: legionowski, voivodeship: mazowieckie, powiat_codes: ["L"], prefixes: ["AL", "WL"], powiat_code_length: 1 }
328
+ - { powiat: lipski, voivodeship: mazowieckie, powiat_codes: ["LI"], prefixes: ["ALI", "WLI"], powiat_code_length: 2 }
329
+ - { powiat: łosicki, voivodeship: mazowieckie, powiat_codes: ["LS"], prefixes: ["ALS", "WLS"], powiat_code_length: 2 }
330
+ - { powiat: makowski, voivodeship: mazowieckie, powiat_codes: ["MA"], prefixes: ["AMA", "WMA"], powiat_code_length: 2 }
331
+ - { powiat: miński, voivodeship: mazowieckie, powiat_codes: ["M"], prefixes: ["AM", "WM"], powiat_code_length: 1 }
332
+ - { powiat: mławski, voivodeship: mazowieckie, powiat_codes: ["ML"], prefixes: ["AML", "WML"], powiat_code_length: 2 }
333
+ - { powiat: nowodworski, voivodeship: mazowieckie, powiat_codes: ["ND"], prefixes: ["AND", "WND"], powiat_code_length: 2 }
334
+ - { powiat: ostrołęcki, voivodeship: mazowieckie, powiat_codes: ["OS"], prefixes: ["AOS", "WOS"], powiat_code_length: 2 }
335
+ - { powiat: ostrowski, voivodeship: mazowieckie, powiat_codes: ["OR"], prefixes: ["AOR", "WOR"], powiat_code_length: 2 }
336
+ - { powiat: otwocki, voivodeship: mazowieckie, powiat_codes: ["OT"], prefixes: ["AOT", "WOT"], powiat_code_length: 2 }
337
+ - { powiat: piaseczyński, voivodeship: mazowieckie, powiat_codes: ["PI", "PA", "PW", "PX"], prefixes: ["APA", "API", "APW", "APX", "WPA", "WPI", "WPW", "WPX"], powiat_code_length: 2 }
338
+ - { powiat: płocki, voivodeship: mazowieckie, powiat_codes: ["PL"], prefixes: ["APL", "WPL"], powiat_code_length: 2 }
339
+ - { powiat: płoński, voivodeship: mazowieckie, powiat_codes: ["PN"], prefixes: ["APN", "WPN"], powiat_code_length: 2 }
340
+ - { powiat: pruszkowski, voivodeship: mazowieckie, powiat_codes: ["PR", "PP", "PS"], prefixes: ["APP", "APR", "APS", "WPP", "WPR", "WPS"], powiat_code_length: 2 }
341
+ - { powiat: przasnyski, voivodeship: mazowieckie, powiat_codes: ["PZ"], prefixes: ["APZ", "WPZ"], powiat_code_length: 2 }
342
+ - { powiat: przysuski, voivodeship: mazowieckie, powiat_codes: ["PY"], prefixes: ["APY", "WPY"], powiat_code_length: 2 }
343
+ - { powiat: pułtuski, voivodeship: mazowieckie, powiat_codes: ["PU"], prefixes: ["APU", "WPU"], powiat_code_length: 2 }
344
+ - { powiat: radomski, voivodeship: mazowieckie, powiat_codes: ["RA"], prefixes: ["ARA", "WRA"], powiat_code_length: 2 }
345
+ - { powiat: siedlecki, voivodeship: mazowieckie, powiat_codes: ["SI"], prefixes: ["ASI", "WSI"], powiat_code_length: 2 }
346
+ - { powiat: sierpecki, voivodeship: mazowieckie, powiat_codes: ["SE"], prefixes: ["ASE", "WSE"], powiat_code_length: 2 }
347
+ - { powiat: sochaczewski, voivodeship: mazowieckie, powiat_codes: ["SC"], prefixes: ["ASC", "WSC"], powiat_code_length: 2 }
348
+ - { powiat: sokołowski, voivodeship: mazowieckie, powiat_codes: ["SK"], prefixes: ["ASK", "WSK"], powiat_code_length: 2 }
349
+ - { powiat: szydłowiecki, voivodeship: mazowieckie, powiat_codes: ["SZ"], prefixes: ["ASZ", "WSZ"], powiat_code_length: 2 }
350
+ - { powiat: m.st. Warszawa, voivodeship: mazowieckie, powiat_codes: ["A", "B", "D", "E", "F", "H", "I", "J", "K", "N", "T", "U", "W", "X", "Y"], prefixes: ["AA", "AB", "AD", "AE", "AF", "AH", "AI", "AJ", "AK", "AN", "AT", "AU", "AW", "AX", "AY", "WA", "WB", "WD", "WE", "WF", "WH", "WI", "WJ", "WK", "WN", "WT", "WU", "WW", "WX", "WY"], powiat_code_length: 1 }
351
+ - { powiat: warszawski zachodni, voivodeship: mazowieckie, powiat_codes: ["Z"], prefixes: ["AZ", "WZ"], powiat_code_length: 1 }
352
+ - { powiat: węgrowski, voivodeship: mazowieckie, powiat_codes: ["WE"], prefixes: ["AWE", "WWE"], powiat_code_length: 2 }
353
+ - { powiat: wołomiński, voivodeship: mazowieckie, powiat_codes: ["WL", "V"], prefixes: ["AV", "AWL", "WV", "WWL"], powiat_code_length: 1/2 }
354
+ - { powiat: wyszkowski, voivodeship: mazowieckie, powiat_codes: ["WY"], prefixes: ["AWY", "WWY"], powiat_code_length: 2 }
355
+ - { powiat: zwoleński, voivodeship: mazowieckie, powiat_codes: ["ZW"], prefixes: ["AZW", "WZW"], powiat_code_length: 2 }
356
+ - { powiat: żuromiński, voivodeship: mazowieckie, powiat_codes: ["ZU"], prefixes: ["AZU", "WZU"], powiat_code_length: 2 }
357
+ - { powiat: żyrardowski, voivodeship: mazowieckie, powiat_codes: ["ZY"], prefixes: ["AZY", "WZY"], powiat_code_length: 2 }
358
+ # 8. OPOLSKIE — wyróżnik województwa O | tymczasowe + indywidualne O0-O9
359
+ - { powiat: Opole, voivodeship: opolskie, powiat_codes: ["P"], prefixes: ["OP"], powiat_code_length: 1 }
360
+ - { powiat: brzeski, voivodeship: opolskie, powiat_codes: ["B"], prefixes: ["OB"], powiat_code_length: 1 }
361
+ - { powiat: głubczycki, voivodeship: opolskie, powiat_codes: ["GL"], prefixes: ["OGL"], powiat_code_length: 2 }
362
+ - { powiat: kędzierzyńsko-kozielski, voivodeship: opolskie, powiat_codes: ["K"], prefixes: ["OK"], powiat_code_length: 1 }
363
+ - { powiat: kluczborski, voivodeship: opolskie, powiat_codes: ["KL"], prefixes: ["OKL"], powiat_code_length: 2 }
364
+ - { powiat: krapkowicki, voivodeship: opolskie, powiat_codes: ["KR"], prefixes: ["OKR"], powiat_code_length: 2 }
365
+ - { powiat: namysłowski, voivodeship: opolskie, powiat_codes: ["NA"], prefixes: ["ONA"], powiat_code_length: 2 }
366
+ - { powiat: nyski, voivodeship: opolskie, powiat_codes: ["NY", "NX"], prefixes: ["ONX", "ONY"], powiat_code_length: 2, amended: "Dz.U. 2025 poz. 939 § 1 pkt 4 lit. c (in force 2025-07-30)" }
367
+ - { powiat: oleski, voivodeship: opolskie, powiat_codes: ["OL"], prefixes: ["OOL"], powiat_code_length: 2 }
368
+ - { powiat: opolski, voivodeship: opolskie, powiat_codes: ["PO"], prefixes: ["OPO"], powiat_code_length: 2 }
369
+ - { powiat: prudnicki, voivodeship: opolskie, powiat_codes: ["PR"], prefixes: ["OPR"], powiat_code_length: 2 }
370
+ - { powiat: strzelecki, voivodeship: opolskie, powiat_codes: ["ST"], prefixes: ["OST"], powiat_code_length: 2 }
371
+ # 9. PODKARPACKIE — wyróżnik województwa R, Y | tymczasowe + indywidualne R0-R9, Y0-Y9
372
+ - { powiat: Krosno, voivodeship: podkarpackie, powiat_codes: ["K"], prefixes: ["RK", "YK"], powiat_code_length: 1 }
373
+ - { powiat: Przemyśl, voivodeship: podkarpackie, powiat_codes: ["P"], prefixes: ["RP", "YP"], powiat_code_length: 1 }
374
+ - { powiat: Rzeszów, voivodeship: podkarpackie, powiat_codes: ["Z"], prefixes: ["RZ", "YZ"], powiat_code_length: 1 }
375
+ - { powiat: Tarnobrzeg, voivodeship: podkarpackie, powiat_codes: ["T"], prefixes: ["RT", "YT"], powiat_code_length: 1 }
376
+ - { powiat: bieszczadzki, voivodeship: podkarpackie, powiat_codes: ["BI"], prefixes: ["RBI", "YBI"], powiat_code_length: 2 }
377
+ - { powiat: brzozowski, voivodeship: podkarpackie, powiat_codes: ["BR"], prefixes: ["RBR", "YBR"], powiat_code_length: 2 }
378
+ - { powiat: dębicki, voivodeship: podkarpackie, powiat_codes: ["DE"], prefixes: ["RDE", "YDE"], powiat_code_length: 2 }
379
+ - { powiat: jarosławski, voivodeship: podkarpackie, powiat_codes: ["JA"], prefixes: ["RJA", "YJA"], powiat_code_length: 2 }
380
+ - { powiat: jasielski, voivodeship: podkarpackie, powiat_codes: ["JS"], prefixes: ["RJS", "YJS"], powiat_code_length: 2 }
381
+ - { powiat: kolbuszowski, voivodeship: podkarpackie, powiat_codes: ["KL"], prefixes: ["RKL", "YKL"], powiat_code_length: 2 }
382
+ - { powiat: krośnieński, voivodeship: podkarpackie, powiat_codes: ["KR"], prefixes: ["RKR", "YKR"], powiat_code_length: 2 }
383
+ - { powiat: leski, voivodeship: podkarpackie, powiat_codes: ["LS"], prefixes: ["RLS", "YLS"], powiat_code_length: 2 }
384
+ - { powiat: leżajski, voivodeship: podkarpackie, powiat_codes: ["LE"], prefixes: ["RLE", "YLE"], powiat_code_length: 2 }
385
+ - { powiat: lubaczowski, voivodeship: podkarpackie, powiat_codes: ["LU"], prefixes: ["RLU", "YLU"], powiat_code_length: 2 }
386
+ - { powiat: łańcucki, voivodeship: podkarpackie, powiat_codes: ["LA"], prefixes: ["RLA", "YLA"], powiat_code_length: 2 }
387
+ - { powiat: mielecki, voivodeship: podkarpackie, powiat_codes: ["MI"], prefixes: ["RMI", "YMI"], powiat_code_length: 2 }
388
+ - { powiat: niżański, voivodeship: podkarpackie, powiat_codes: ["NI"], prefixes: ["RNI", "YNI"], powiat_code_length: 2 }
389
+ - { powiat: przemyski, voivodeship: podkarpackie, powiat_codes: ["PR"], prefixes: ["RPR", "YPR"], powiat_code_length: 2 }
390
+ - { powiat: przeworski, voivodeship: podkarpackie, powiat_codes: ["PZ"], prefixes: ["RPZ", "YPZ"], powiat_code_length: 2 }
391
+ - { powiat: ropczycko-sędziszowski, voivodeship: podkarpackie, powiat_codes: ["RS"], prefixes: ["RRS", "YRS"], powiat_code_length: 2 }
392
+ - { powiat: rzeszowski, voivodeship: podkarpackie, powiat_codes: ["ZE", "ZZ", "ZR"], prefixes: ["RZE", "RZR", "RZZ", "YZE", "YZR", "YZZ"], powiat_code_length: 2 }
393
+ - { powiat: sanocki, voivodeship: podkarpackie, powiat_codes: ["SA"], prefixes: ["RSA", "YSA"], powiat_code_length: 2 }
394
+ - { powiat: stalowowolski, voivodeship: podkarpackie, powiat_codes: ["ST"], prefixes: ["RST", "YST"], powiat_code_length: 2 }
395
+ - { powiat: strzyżowski, voivodeship: podkarpackie, powiat_codes: ["SR"], prefixes: ["RSR", "YSR"], powiat_code_length: 2 }
396
+ - { powiat: tarnobrzeski, voivodeship: podkarpackie, powiat_codes: ["TA"], prefixes: ["RTA", "YTA"], powiat_code_length: 2 }
397
+ # 10. PODLASKIE — wyróżnik województwa B | tymczasowe + indywidualne B0-B9
398
+ - { powiat: Białystok, voivodeship: podlaskie, powiat_codes: ["I"], prefixes: ["BI"], powiat_code_length: 1 }
399
+ - { powiat: Łomża, voivodeship: podlaskie, powiat_codes: ["L"], prefixes: ["BL"], powiat_code_length: 1 }
400
+ - { powiat: Suwałki, voivodeship: podlaskie, powiat_codes: ["S"], prefixes: ["BS"], powiat_code_length: 1 }
401
+ - { powiat: augustowski, voivodeship: podlaskie, powiat_codes: ["AU"], prefixes: ["BAU"], powiat_code_length: 2 }
402
+ - { powiat: białostocki, voivodeship: podlaskie, powiat_codes: ["IA", "IB"], prefixes: ["BIA", "BIB"], powiat_code_length: 2 }
403
+ - { powiat: bielski, voivodeship: podlaskie, powiat_codes: ["BI"], prefixes: ["BBI"], powiat_code_length: 2 }
404
+ - { powiat: grajewski, voivodeship: podlaskie, powiat_codes: ["GR"], prefixes: ["BGR"], powiat_code_length: 2 }
405
+ - { powiat: hajnowski, voivodeship: podlaskie, powiat_codes: ["HA"], prefixes: ["BHA"], powiat_code_length: 2 }
406
+ - { powiat: kolneński, voivodeship: podlaskie, powiat_codes: ["KL"], prefixes: ["BKL"], powiat_code_length: 2 }
407
+ - { powiat: łomżyński, voivodeship: podlaskie, powiat_codes: ["LM"], prefixes: ["BLM"], powiat_code_length: 2 }
408
+ - { powiat: moniecki, voivodeship: podlaskie, powiat_codes: ["MN"], prefixes: ["BMN"], powiat_code_length: 2 }
409
+ - { powiat: sejneński, voivodeship: podlaskie, powiat_codes: ["SE"], prefixes: ["BSE"], powiat_code_length: 2 }
410
+ - { powiat: siemiatycki, voivodeship: podlaskie, powiat_codes: ["SI"], prefixes: ["BSI"], powiat_code_length: 2 }
411
+ - { powiat: sokólski, voivodeship: podlaskie, powiat_codes: ["SK"], prefixes: ["BSK"], powiat_code_length: 2 }
412
+ - { powiat: suwalski, voivodeship: podlaskie, powiat_codes: ["SU"], prefixes: ["BSU"], powiat_code_length: 2 }
413
+ - { powiat: wysokomazowiecki, voivodeship: podlaskie, powiat_codes: ["WM"], prefixes: ["BWM"], powiat_code_length: 2 }
414
+ - { powiat: zambrowski, voivodeship: podlaskie, powiat_codes: ["ZA"], prefixes: ["BZA"], powiat_code_length: 2 }
415
+ # 11. POMORSKIE — wyróżnik województwa G, X | tymczasowe + indywidualne G0-G9, X0-X9
416
+ - { powiat: Gdańsk, voivodeship: pomorskie, powiat_codes: ["D"], prefixes: ["GD", "XD"], powiat_code_length: 1 }
417
+ - { powiat: Gdynia, voivodeship: pomorskie, powiat_codes: ["A"], prefixes: ["GA", "XA"], powiat_code_length: 1 }
418
+ - { powiat: Słupsk, voivodeship: pomorskie, powiat_codes: ["S"], prefixes: ["GS", "XS"], powiat_code_length: 1 }
419
+ - { powiat: Sopot, voivodeship: pomorskie, powiat_codes: ["SP"], prefixes: ["GSP", "XSP"], powiat_code_length: 2 }
420
+ - { powiat: bytowski, voivodeship: pomorskie, powiat_codes: ["BY"], prefixes: ["GBY", "XBY"], powiat_code_length: 2 }
421
+ - { powiat: chojnicki, voivodeship: pomorskie, powiat_codes: ["CH"], prefixes: ["GCH", "XCH"], powiat_code_length: 2 }
422
+ - { powiat: człuchowski, voivodeship: pomorskie, powiat_codes: ["CZ"], prefixes: ["GCZ", "XCZ"], powiat_code_length: 2 }
423
+ - { powiat: gdański, voivodeship: pomorskie, powiat_codes: ["DA"], prefixes: ["GDA", "XDA"], powiat_code_length: 2 }
424
+ - { powiat: kartuski, voivodeship: pomorskie, powiat_codes: ["KA", "KY", "KZ"], prefixes: ["GKA", "GKY", "GKZ", "XKA", "XKY", "XKZ"], powiat_code_length: 2 }
425
+ - { powiat: kościerski, voivodeship: pomorskie, powiat_codes: ["KS"], prefixes: ["GKS", "XKS"], powiat_code_length: 2 }
426
+ - { powiat: kwidzyński, voivodeship: pomorskie, powiat_codes: ["KW"], prefixes: ["GKW", "XKW"], powiat_code_length: 2 }
427
+ - { powiat: lęborski, voivodeship: pomorskie, powiat_codes: ["LE"], prefixes: ["GLE", "XLE"], powiat_code_length: 2 }
428
+ - { powiat: malborski, voivodeship: pomorskie, powiat_codes: ["MB"], prefixes: ["GMB", "XMB"], powiat_code_length: 2 }
429
+ - { powiat: nowodworski, voivodeship: pomorskie, powiat_codes: ["ND"], prefixes: ["GND", "XND"], powiat_code_length: 2 }
430
+ - { powiat: pucki, voivodeship: pomorskie, powiat_codes: ["PU"], prefixes: ["GPU", "XPU"], powiat_code_length: 2 }
431
+ - { powiat: słupski, voivodeship: pomorskie, powiat_codes: ["SL"], prefixes: ["GSL", "XSL"], powiat_code_length: 2 }
432
+ - { powiat: starogardzki, voivodeship: pomorskie, powiat_codes: ["ST"], prefixes: ["GST", "XST"], powiat_code_length: 2 }
433
+ - { powiat: sztumski, voivodeship: pomorskie, powiat_codes: ["SZ"], prefixes: ["GSZ", "XSZ"], powiat_code_length: 2 }
434
+ - { powiat: tczewski, voivodeship: pomorskie, powiat_codes: ["TC"], prefixes: ["GTC", "XTC"], powiat_code_length: 2 }
435
+ - { powiat: wejherowski, voivodeship: pomorskie, powiat_codes: ["WE", "WO"], prefixes: ["GWE", "GWO", "XWE", "XWO"], powiat_code_length: 2 }
436
+ # 12. ŚLĄSKIE — wyróżnik województwa S, I | tymczasowe + indywidualne S0-S9, I0-I9
437
+ - { powiat: Bielsko-Biała, voivodeship: śląskie, powiat_codes: ["B"], prefixes: ["IB", "SB"], powiat_code_length: 1 }
438
+ - { powiat: Bytom, voivodeship: śląskie, powiat_codes: ["Y"], prefixes: ["IY", "SY"], powiat_code_length: 1 }
439
+ - { powiat: Chorzów, voivodeship: śląskie, powiat_codes: ["H"], prefixes: ["IH", "SH"], powiat_code_length: 1 }
440
+ - { powiat: Częstochowa, voivodeship: śląskie, powiat_codes: ["C"], prefixes: ["IC", "SC"], powiat_code_length: 1 }
441
+ - { powiat: Dąbrowa Górnicza, voivodeship: śląskie, powiat_codes: ["D"], prefixes: ["ID", "SD"], powiat_code_length: 1 }
442
+ - { powiat: Gliwice, voivodeship: śląskie, powiat_codes: ["G"], prefixes: ["IG", "SG"], powiat_code_length: 1 }
443
+ - { powiat: Jastrzębie-Zdrój, voivodeship: śląskie, powiat_codes: ["JZ"], prefixes: ["IJZ", "SJZ"], powiat_code_length: 2 }
444
+ - { powiat: Jaworzno, voivodeship: śląskie, powiat_codes: ["J"], prefixes: ["IJ", "SJ"], powiat_code_length: 1 }
445
+ - { powiat: Katowice, voivodeship: śląskie, powiat_codes: ["K"], prefixes: ["IK", "SK"], powiat_code_length: 1 }
446
+ - { powiat: Mysłowice, voivodeship: śląskie, powiat_codes: ["M"], prefixes: ["IM", "SM"], powiat_code_length: 1 }
447
+ - { powiat: Piekary Śląskie, voivodeship: śląskie, powiat_codes: ["PI"], prefixes: ["IPI", "SPI"], powiat_code_length: 2 }
448
+ - { powiat: Ruda Śląska, voivodeship: śląskie, powiat_codes: ["RS", "L"], prefixes: ["IL", "IRS", "SL", "SRS"], powiat_code_length: 1/2 }
449
+ - { powiat: Rybnik, voivodeship: śląskie, powiat_codes: ["R"], prefixes: ["IR", "SR"], powiat_code_length: 1 }
450
+ - { powiat: Siemianowice Śląskie, voivodeship: śląskie, powiat_codes: ["I"], prefixes: ["II", "SI"], powiat_code_length: 1 }
451
+ - { powiat: Sosnowiec, voivodeship: śląskie, powiat_codes: ["O"], prefixes: ["IO", "SO"], powiat_code_length: 1 }
452
+ - { powiat: Świętochłowice, voivodeship: śląskie, powiat_codes: ["W"], prefixes: ["IW", "SW"], powiat_code_length: 1 }
453
+ - { powiat: Tychy, voivodeship: śląskie, powiat_codes: ["T"], prefixes: ["IT", "ST"], powiat_code_length: 1 }
454
+ - { powiat: Zabrze, voivodeship: śląskie, powiat_codes: ["Z"], prefixes: ["IZ", "SZ"], powiat_code_length: 1 }
455
+ - { powiat: Żory, voivodeship: śląskie, powiat_codes: ["ZO"], prefixes: ["IZO", "SZO"], powiat_code_length: 2 }
456
+ - { powiat: będziński, voivodeship: śląskie, powiat_codes: ["BE", "E", "BN"], prefixes: ["IBE", "IBN", "IE", "SBE", "SBN", "SE"], powiat_code_length: 1/2 }
457
+ - { powiat: bielski, voivodeship: śląskie, powiat_codes: ["BI"], prefixes: ["IBI", "SBI"], powiat_code_length: 2 }
458
+ - { powiat: cieszyński, voivodeship: śląskie, powiat_codes: ["CI", "CN"], prefixes: ["ICI", "ICN", "SCI", "SCN"], powiat_code_length: 2 }
459
+ - { powiat: częstochowski, voivodeship: śląskie, powiat_codes: ["CZ"], prefixes: ["ICZ", "SCZ"], powiat_code_length: 2 }
460
+ - { powiat: gliwicki, voivodeship: śląskie, powiat_codes: ["GL"], prefixes: ["IGL", "SGL"], powiat_code_length: 2 }
461
+ - { powiat: kłobucki, voivodeship: śląskie, powiat_codes: ["KL"], prefixes: ["IKL", "SKL"], powiat_code_length: 2 }
462
+ - { powiat: lubliniecki, voivodeship: śląskie, powiat_codes: ["LU"], prefixes: ["ILU", "SLU"], powiat_code_length: 2 }
463
+ - { powiat: mikołowski, voivodeship: śląskie, powiat_codes: ["MI"], prefixes: ["IMI", "SMI"], powiat_code_length: 2 }
464
+ - { powiat: myszkowski, voivodeship: śląskie, powiat_codes: ["MY"], prefixes: ["IMY", "SMY"], powiat_code_length: 2 }
465
+ - { powiat: pszczyński, voivodeship: śląskie, powiat_codes: ["PS"], prefixes: ["IPS", "SPS"], powiat_code_length: 2 }
466
+ - { powiat: raciborski, voivodeship: śląskie, powiat_codes: ["RC"], prefixes: ["IRC", "SRC"], powiat_code_length: 2 }
467
+ - { powiat: rybnicki, voivodeship: śląskie, powiat_codes: ["RB"], prefixes: ["IRB", "SRB"], powiat_code_length: 2 }
468
+ - { powiat: tarnogórski, voivodeship: śląskie, powiat_codes: ["TA", "TR", "TN"], prefixes: ["ITA", "ITN", "ITR", "STA", "STN", "STR"], powiat_code_length: 2, amended: "Dz.U. 2026 poz. 891 § 1 pkt 9 lit. b (in force 2026-07-04)" }
469
+ - { powiat: bieruńsko-lędziński, voivodeship: śląskie, powiat_codes: ["BL"], prefixes: ["IBL", "SBL"], powiat_code_length: 2 }
470
+ - { powiat: wodzisławski, voivodeship: śląskie, powiat_codes: ["WD", "WZ"], prefixes: ["IWD", "IWZ", "SWD", "SWZ"], powiat_code_length: 2 }
471
+ - { powiat: zawierciański, voivodeship: śląskie, powiat_codes: ["ZA"], prefixes: ["IZA", "SZA"], powiat_code_length: 2 }
472
+ - { powiat: żywiecki, voivodeship: śląskie, powiat_codes: ["ZY"], prefixes: ["IZY", "SZY"], powiat_code_length: 2 }
473
+ # 13. ŚWIĘTOKRZYSKIE — wyróżnik województwa T | tymczasowe + indywidualne T0-T9
474
+ - { powiat: Kielce, voivodeship: świętokrzyskie, powiat_codes: ["K"], prefixes: ["TK"], powiat_code_length: 1 }
475
+ - { powiat: buski, voivodeship: świętokrzyskie, powiat_codes: ["BU"], prefixes: ["TBU"], powiat_code_length: 2 }
476
+ - { powiat: jędrzejowski, voivodeship: świętokrzyskie, powiat_codes: ["JE"], prefixes: ["TJE"], powiat_code_length: 2 }
477
+ - { powiat: kazimierski, voivodeship: świętokrzyskie, powiat_codes: ["KA"], prefixes: ["TKA"], powiat_code_length: 2 }
478
+ - { powiat: kielecki, voivodeship: świętokrzyskie, powiat_codes: ["KI", "KC", "KM", "KP"], prefixes: ["TKC", "TKI", "TKM", "TKP"], powiat_code_length: 2 }
479
+ - { powiat: konecki, voivodeship: świętokrzyskie, powiat_codes: ["KN"], prefixes: ["TKN"], powiat_code_length: 2 }
480
+ - { powiat: opatowski, voivodeship: świętokrzyskie, powiat_codes: ["OP"], prefixes: ["TOP"], powiat_code_length: 2 }
481
+ - { powiat: ostrowiecki, voivodeship: świętokrzyskie, powiat_codes: ["OS"], prefixes: ["TOS"], powiat_code_length: 2 }
482
+ - { powiat: pińczowski, voivodeship: świętokrzyskie, powiat_codes: ["PI"], prefixes: ["TPI"], powiat_code_length: 2 }
483
+ - { powiat: sandomierski, voivodeship: świętokrzyskie, powiat_codes: ["SA"], prefixes: ["TSA"], powiat_code_length: 2 }
484
+ - { powiat: skarżyski, voivodeship: świętokrzyskie, powiat_codes: ["SK"], prefixes: ["TSK"], powiat_code_length: 2 }
485
+ - { powiat: starachowicki, voivodeship: świętokrzyskie, powiat_codes: ["ST"], prefixes: ["TST"], powiat_code_length: 2 }
486
+ - { powiat: staszowski, voivodeship: świętokrzyskie, powiat_codes: ["SZ"], prefixes: ["TSZ"], powiat_code_length: 2 }
487
+ - { powiat: włoszczowski, voivodeship: świętokrzyskie, powiat_codes: ["LW"], prefixes: ["TLW"], powiat_code_length: 2 }
488
+ # 14. WARMIŃSKO-MAZURSKIE — wyróżnik województwa N | tymczasowe + indywidualne N0-N9
489
+ - { powiat: Elbląg, voivodeship: warmińsko-mazurskie, powiat_codes: ["E"], prefixes: ["NE"], powiat_code_length: 1 }
490
+ - { powiat: Olsztyn, voivodeship: warmińsko-mazurskie, powiat_codes: ["O"], prefixes: ["NO"], powiat_code_length: 1 }
491
+ - { powiat: bartoszycki, voivodeship: warmińsko-mazurskie, powiat_codes: ["BA"], prefixes: ["NBA"], powiat_code_length: 2 }
492
+ - { powiat: braniewski, voivodeship: warmińsko-mazurskie, powiat_codes: ["BR"], prefixes: ["NBR"], powiat_code_length: 2 }
493
+ - { powiat: działdowski, voivodeship: warmińsko-mazurskie, powiat_codes: ["DZ"], prefixes: ["NDZ"], powiat_code_length: 2 }
494
+ - { powiat: elbląski, voivodeship: warmińsko-mazurskie, powiat_codes: ["EB"], prefixes: ["NEB"], powiat_code_length: 2 }
495
+ - { powiat: ełcki, voivodeship: warmińsko-mazurskie, powiat_codes: ["EL"], prefixes: ["NEL"], powiat_code_length: 2 }
496
+ - { powiat: giżycki, voivodeship: warmińsko-mazurskie, powiat_codes: ["GI"], prefixes: ["NGI"], powiat_code_length: 2 }
497
+ - { powiat: iławski, voivodeship: warmińsko-mazurskie, powiat_codes: ["IL"], prefixes: ["NIL"], powiat_code_length: 2 }
498
+ - { powiat: kętrzyński, voivodeship: warmińsko-mazurskie, powiat_codes: ["KE"], prefixes: ["NKE"], powiat_code_length: 2 }
499
+ - { powiat: lidzbarski, voivodeship: warmińsko-mazurskie, powiat_codes: ["LI"], prefixes: ["NLI"], powiat_code_length: 2 }
500
+ - { powiat: mrągowski, voivodeship: warmińsko-mazurskie, powiat_codes: ["MR"], prefixes: ["NMR"], powiat_code_length: 2 }
501
+ - { powiat: nidzicki, voivodeship: warmińsko-mazurskie, powiat_codes: ["NI"], prefixes: ["NNI"], powiat_code_length: 2 }
502
+ - { powiat: nowomiejski, voivodeship: warmińsko-mazurskie, powiat_codes: ["NM"], prefixes: ["NNM"], powiat_code_length: 2 }
503
+ - { powiat: olecki, voivodeship: warmińsko-mazurskie, powiat_codes: ["OE"], prefixes: ["NOE"], powiat_code_length: 2 }
504
+ - { powiat: gołdapski, voivodeship: warmińsko-mazurskie, powiat_codes: ["GO"], prefixes: ["NGO"], powiat_code_length: 2 }
505
+ - { powiat: olsztyński, voivodeship: warmińsko-mazurskie, powiat_codes: ["OL", "OZ", "OP"], prefixes: ["NOL", "NOP", "NOZ"], powiat_code_length: 2, amended: "Dz.U. 2026 poz. 891 § 1 pkt 9 lit. c (in force 2026-07-04)" }
506
+ - { powiat: ostródzki, voivodeship: warmińsko-mazurskie, powiat_codes: ["OS", "OT", "OX"], prefixes: ["NOS", "NOT", "NOX"], powiat_code_length: 2 }
507
+ - { powiat: piski, voivodeship: warmińsko-mazurskie, powiat_codes: ["PI"], prefixes: ["NPI"], powiat_code_length: 2 }
508
+ - { powiat: szczycieński, voivodeship: warmińsko-mazurskie, powiat_codes: ["SZ"], prefixes: ["NSZ"], powiat_code_length: 2 }
509
+ - { powiat: węgorzewski, voivodeship: warmińsko-mazurskie, powiat_codes: ["WE"], prefixes: ["NWE"], powiat_code_length: 2 }
510
+ # 15. WIELKOPOLSKIE — wyróżnik województwa P, M | tymczasowe + indywidualne P0-P9, M0-M9
511
+ - { powiat: Kalisz, voivodeship: wielkopolskie, powiat_codes: ["K", "A"], prefixes: ["MA", "MK", "PA", "PK"], powiat_code_length: 1 }
512
+ - { powiat: Konin, voivodeship: wielkopolskie, powiat_codes: ["KO", "N"], prefixes: ["MKO", "MN", "PKO", "PN"], powiat_code_length: 1/2 }
513
+ - { powiat: Leszno, voivodeship: wielkopolskie, powiat_codes: ["L"], prefixes: ["ML", "PL"], powiat_code_length: 1 }
514
+ - { powiat: Poznań, voivodeship: wielkopolskie, powiat_codes: ["O", "Y", "X"], prefixes: ["MO", "MX", "MY", "PO", "PX", "PY"], powiat_code_length: 1 }
515
+ - { powiat: chodzieski, voivodeship: wielkopolskie, powiat_codes: ["CH"], prefixes: ["MCH", "PCH"], powiat_code_length: 2 }
516
+ - { powiat: czarnkowsko-trzcianecki, voivodeship: wielkopolskie, powiat_codes: ["CT"], prefixes: ["MCT", "PCT"], powiat_code_length: 2 }
517
+ - { powiat: gnieźnieński, voivodeship: wielkopolskie, powiat_codes: ["GN"], prefixes: ["MGN", "PGN"], powiat_code_length: 2 }
518
+ - { powiat: gostyński, voivodeship: wielkopolskie, powiat_codes: ["GS"], prefixes: ["MGS", "PGS"], powiat_code_length: 2 }
519
+ - { powiat: grodziski, voivodeship: wielkopolskie, powiat_codes: ["GO"], prefixes: ["MGO", "PGO"], powiat_code_length: 2 }
520
+ - { powiat: jarociński, voivodeship: wielkopolskie, powiat_codes: ["JA"], prefixes: ["MJA", "PJA"], powiat_code_length: 2 }
521
+ - { powiat: kaliski, voivodeship: wielkopolskie, powiat_codes: ["KA"], prefixes: ["MKA", "PKA"], powiat_code_length: 2 }
522
+ - { powiat: kępiński, voivodeship: wielkopolskie, powiat_codes: ["KE"], prefixes: ["MKE", "PKE"], powiat_code_length: 2 }
523
+ - { powiat: kolski, voivodeship: wielkopolskie, powiat_codes: ["KL"], prefixes: ["MKL", "PKL"], powiat_code_length: 2 }
524
+ - { powiat: koniński, voivodeship: wielkopolskie, powiat_codes: ["KN"], prefixes: ["MKN", "PKN"], powiat_code_length: 2 }
525
+ - { powiat: kościański, voivodeship: wielkopolskie, powiat_codes: ["KS"], prefixes: ["MKS", "PKS"], powiat_code_length: 2 }
526
+ - { powiat: krotoszyński, voivodeship: wielkopolskie, powiat_codes: ["KR"], prefixes: ["MKR", "PKR"], powiat_code_length: 2 }
527
+ - { powiat: leszczyński, voivodeship: wielkopolskie, powiat_codes: ["LE"], prefixes: ["MLE", "PLE"], powiat_code_length: 2 }
528
+ - { powiat: międzychodzki, voivodeship: wielkopolskie, powiat_codes: ["MI"], prefixes: ["MMI", "PMI"], powiat_code_length: 2 }
529
+ - { powiat: nowotomyski, voivodeship: wielkopolskie, powiat_codes: ["NT"], prefixes: ["MNT", "PNT"], powiat_code_length: 2 }
530
+ - { powiat: obornicki, voivodeship: wielkopolskie, powiat_codes: ["OB"], prefixes: ["MOB", "POB"], powiat_code_length: 2 }
531
+ - { powiat: ostrowski, voivodeship: wielkopolskie, powiat_codes: ["OS"], prefixes: ["MOS", "POS"], powiat_code_length: 2 }
532
+ - { powiat: ostrzeszowski, voivodeship: wielkopolskie, powiat_codes: ["OT"], prefixes: ["MOT", "POT"], powiat_code_length: 2 }
533
+ - { powiat: pilski, voivodeship: wielkopolskie, powiat_codes: ["P"], prefixes: ["MP", "PP"], powiat_code_length: 1 }
534
+ - { powiat: pleszewski, voivodeship: wielkopolskie, powiat_codes: ["PL"], prefixes: ["MPL", "PPL"], powiat_code_length: 2 }
535
+ - { powiat: poznański, voivodeship: wielkopolskie, powiat_codes: ["OZ", "Z"], prefixes: ["MOZ", "MZ", "POZ", "PZ"], powiat_code_length: 1/2 }
536
+ - { powiat: rawicki, voivodeship: wielkopolskie, powiat_codes: ["RA"], prefixes: ["MRA", "PRA"], powiat_code_length: 2 }
537
+ - { powiat: słupecki, voivodeship: wielkopolskie, powiat_codes: ["SL"], prefixes: ["MSL", "PSL"], powiat_code_length: 2 }
538
+ - { powiat: szamotulski, voivodeship: wielkopolskie, powiat_codes: ["SZ"], prefixes: ["MSZ", "PSZ"], powiat_code_length: 2 }
539
+ - { powiat: średzki, voivodeship: wielkopolskie, powiat_codes: ["SR"], prefixes: ["MSR", "PSR"], powiat_code_length: 2 }
540
+ - { powiat: śremski, voivodeship: wielkopolskie, powiat_codes: ["SE"], prefixes: ["MSE", "PSE"], powiat_code_length: 2 }
541
+ - { powiat: turecki, voivodeship: wielkopolskie, powiat_codes: ["TU"], prefixes: ["MTU", "PTU"], powiat_code_length: 2 }
542
+ - { powiat: wągrowiecki, voivodeship: wielkopolskie, powiat_codes: ["WA"], prefixes: ["MWA", "PWA"], powiat_code_length: 2 }
543
+ - { powiat: wolsztyński, voivodeship: wielkopolskie, powiat_codes: ["WL"], prefixes: ["MWL", "PWL"], powiat_code_length: 2 }
544
+ - { powiat: wrzesiński, voivodeship: wielkopolskie, powiat_codes: ["WR"], prefixes: ["MWR", "PWR"], powiat_code_length: 2 }
545
+ - { powiat: złotowski, voivodeship: wielkopolskie, powiat_codes: ["ZL"], prefixes: ["MZL", "PZL"], powiat_code_length: 2 }
546
+ # 16. ZACHODNIOPOMORSKIE — wyróżnik województwa Z | tymczasowe + indywidualne Z0-Z9
547
+ - { powiat: Koszalin, voivodeship: zachodniopomorskie, powiat_codes: ["K"], prefixes: ["ZK"], powiat_code_length: 1 }
548
+ - { powiat: Szczecin, voivodeship: zachodniopomorskie, powiat_codes: ["S", "Z"], prefixes: ["ZS", "ZZ"], powiat_code_length: 1 }
549
+ - { powiat: Świnoujście, voivodeship: zachodniopomorskie, powiat_codes: ["SW"], prefixes: ["ZSW"], powiat_code_length: 2 }
550
+ - { powiat: białogardzki, voivodeship: zachodniopomorskie, powiat_codes: ["BI"], prefixes: ["ZBI"], powiat_code_length: 2 }
551
+ - { powiat: choszczeński, voivodeship: zachodniopomorskie, powiat_codes: ["CH"], prefixes: ["ZCH"], powiat_code_length: 2 }
552
+ - { powiat: drawski, voivodeship: zachodniopomorskie, powiat_codes: ["DR"], prefixes: ["ZDR"], powiat_code_length: 2 }
553
+ - { powiat: goleniowski, voivodeship: zachodniopomorskie, powiat_codes: ["GL"], prefixes: ["ZGL"], powiat_code_length: 2 }
554
+ - { powiat: gryficki, voivodeship: zachodniopomorskie, powiat_codes: ["GY"], prefixes: ["ZGY"], powiat_code_length: 2 }
555
+ - { powiat: gryfiński, voivodeship: zachodniopomorskie, powiat_codes: ["GR"], prefixes: ["ZGR"], powiat_code_length: 2 }
556
+ - { powiat: kamieński, voivodeship: zachodniopomorskie, powiat_codes: ["KA"], prefixes: ["ZKA"], powiat_code_length: 2 }
557
+ - { powiat: kołobrzeski, voivodeship: zachodniopomorskie, powiat_codes: ["KL"], prefixes: ["ZKL"], powiat_code_length: 2 }
558
+ - { powiat: koszaliński, voivodeship: zachodniopomorskie, powiat_codes: ["KO"], prefixes: ["ZKO"], powiat_code_length: 2 }
559
+ - { powiat: łobeski, voivodeship: zachodniopomorskie, powiat_codes: ["LO"], prefixes: ["ZLO"], powiat_code_length: 2 }
560
+ - { powiat: myśliborski, voivodeship: zachodniopomorskie, powiat_codes: ["MY"], prefixes: ["ZMY"], powiat_code_length: 2 }
561
+ - { powiat: policki, voivodeship: zachodniopomorskie, powiat_codes: ["PL"], prefixes: ["ZPL"], powiat_code_length: 2 }
562
+ - { powiat: pyrzycki, voivodeship: zachodniopomorskie, powiat_codes: ["PY"], prefixes: ["ZPY"], powiat_code_length: 2 }
563
+ - { powiat: sławieński, voivodeship: zachodniopomorskie, powiat_codes: ["SL"], prefixes: ["ZSL"], powiat_code_length: 2 }
564
+ - { powiat: stargardzki, voivodeship: zachodniopomorskie, powiat_codes: ["ST"], prefixes: ["ZST"], powiat_code_length: 2 }
565
+ - { powiat: szczecinecki, voivodeship: zachodniopomorskie, powiat_codes: ["SZ"], prefixes: ["ZSZ"], powiat_code_length: 2 }
566
+ - { powiat: świdwiński, voivodeship: zachodniopomorskie, powiat_codes: ["SD"], prefixes: ["ZSD"], powiat_code_length: 2 }
567
+ - { powiat: wałecki, voivodeship: zachodniopomorskie, powiat_codes: ["WA"], prefixes: ["ZWA"], powiat_code_length: 2 }