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.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +164 -0
- data/CHANGELOG.md +274 -0
- data/README.md +55 -10
- data/data/PROVENANCE-vehicles.md +12 -0
- data/data/plates/PROVENANCE.md +5 -4
- data/data/plates/_decode/at-districts.yml +287 -0
- data/data/plates/_decode/ch-cantons.yml +110 -0
- data/data/plates/_decode/cn-issuing-offices.yml +463 -0
- data/data/plates/_decode/cn-provinces.yml +614 -0
- data/data/plates/_decode/cz-kraj.yml +159 -0
- data/data/plates/_decode/dk-serial-blocks.yml +327 -0
- data/data/plates/_decode/fr-departements.yml +191 -0
- data/data/plates/_decode/gb-age-identifiers.yml +170 -0
- data/data/plates/_decode/gb-memory-tags.yml +202 -0
- data/data/plates/_decode/gr-prefectures.yml +1408 -0
- data/data/plates/_decode/hr-cities.yml +315 -0
- data/data/plates/_decode/ie-counties.yml +227 -0
- data/data/plates/_decode/in-state-codes.yml +169 -0
- data/data/plates/_decode/is-districts-1938.yml +116 -0
- data/data/plates/_decode/it-provinces.yml +348 -0
- data/data/plates/_decode/jp-office-marks.yml +960 -0
- data/data/plates/_decode/jp-use-marks.yml +205 -0
- data/data/plates/_decode/kr-authority-marks.yml +146 -0
- data/data/plates/_decode/kr-use-syllables.yml +194 -0
- data/data/plates/_decode/lu-series-order.yml +638 -0
- data/data/plates/_decode/mx-entity-series.yml +380 -0
- data/data/plates/_decode/my-index-marks.yml +271 -0
- data/data/plates/_decode/no-counties-1913.yml +148 -0
- data/data/plates/_decode/no-districts.yml +901 -0
- data/data/plates/_decode/pl-powiats.yml +567 -0
- data/data/plates/_decode/pt-trailer-services.yml +96 -0
- data/data/plates/_decode/ro-counties.yml +213 -0
- data/data/plates/_decode/se-diplomatic.yml +220 -0
- data/data/plates/_decode/si-regions.yml +123 -0
- data/data/plates/_decode/sk-districts.yml +314 -0
- data/data/plates/_decode/th-registration-elements.yml +208 -0
- data/data/plates/_decode/ua-regions.yml +393 -0
- data/data/plates/_decode/za-licence-marks.yml +215 -0
- data/data/plates/_meta/classes.yml +1 -0
- data/data/plates/_meta/separators.yml +102 -0
- data/data/plates/ad.yml +961 -0
- data/data/plates/ar.yml +762 -0
- data/data/plates/at.yml +1424 -0
- data/data/plates/au-act.yml +472 -0
- data/data/plates/au-nsw.yml +282 -0
- data/data/plates/au-nt.yml +431 -0
- data/data/plates/au-qld.yml +272 -0
- data/data/plates/au-sa.yml +248 -0
- data/data/plates/au-tas.yml +302 -0
- data/data/plates/au-vic.yml +215 -0
- data/data/plates/au-wa.yml +309 -0
- data/data/plates/be.yml +1840 -0
- data/data/plates/br.yml +1152 -0
- data/data/plates/ca-ab.yml +430 -0
- data/data/plates/ca-bc.yml +697 -0
- data/data/plates/ca-mb.yml +499 -0
- data/data/plates/ca-nb.yml +537 -0
- data/data/plates/ca-nl.yml +743 -0
- data/data/plates/ca-ns.yml +808 -0
- data/data/plates/ca-nt.yml +610 -0
- data/data/plates/ca-nu.yml +280 -0
- data/data/plates/ca-on.yml +881 -0
- data/data/plates/ca-pe.yml +592 -0
- data/data/plates/ca-qc.yml +1036 -0
- data/data/plates/ca-sk.yml +256 -0
- data/data/plates/ca-yt.yml +656 -0
- data/data/plates/ch.yml +1273 -0
- data/data/plates/cn.yml +1431 -0
- data/data/plates/cy.yml +688 -0
- data/data/plates/cz.yml +1179 -0
- data/data/plates/de.yml +553 -118
- data/data/plates/dk.yml +1647 -0
- data/data/plates/ee.yml +1275 -0
- data/data/plates/es.yml +228 -32
- data/data/plates/fi.yml +1271 -0
- data/data/plates/fr.yml +1265 -0
- data/data/plates/gb.yml +1188 -0
- data/data/plates/gr.yml +721 -0
- data/data/plates/hr.yml +860 -0
- data/data/plates/hu.yml +959 -0
- data/data/plates/ie.yml +775 -0
- data/data/plates/in.yml +1172 -0
- data/data/plates/is.yml +667 -0
- data/data/plates/it.yml +1317 -0
- data/data/plates/jp.yml +3650 -0
- data/data/plates/kr.yml +1375 -0
- data/data/plates/li.yml +1010 -0
- data/data/plates/lt.yml +879 -0
- data/data/plates/lu.yml +842 -0
- data/data/plates/lv.yml +924 -0
- data/data/plates/mc.yml +1024 -0
- data/data/plates/mt.yml +854 -0
- data/data/plates/mx.yml +1372 -0
- data/data/plates/my.yml +685 -0
- data/data/plates/nl.yml +44 -0
- data/data/plates/no.yml +1018 -0
- data/data/plates/nz.yml +1699 -0
- data/data/plates/pl.yml +1296 -0
- data/data/plates/pt.yml +847 -0
- data/data/plates/ro.yml +785 -0
- data/data/plates/se.yml +1091 -0
- data/data/plates/si.yml +1105 -0
- data/data/plates/sk.yml +1439 -0
- data/data/plates/sm.yml +1119 -0
- data/data/plates/th.yml +1150 -0
- data/data/plates/ua.yml +1672 -0
- data/data/plates/us-ak.yml +763 -0
- data/data/plates/us-al.yml +457 -0
- data/data/plates/us-ar.yml +427 -0
- data/data/plates/us-as.yml +454 -0
- data/data/plates/us-az.yml +430 -0
- data/data/plates/us-ca.yml +892 -0
- data/data/plates/us-co.yml +452 -0
- data/data/plates/us-ct.yml +427 -0
- data/data/plates/us-dc.yml +614 -0
- data/data/plates/us-de.yml +551 -0
- data/data/plates/us-fl.yml +319 -96
- data/data/plates/us-ga.yml +644 -0
- data/data/plates/us-gu.yml +658 -0
- data/data/plates/us-hi.yml +585 -0
- data/data/plates/us-ia.yml +438 -0
- data/data/plates/us-id.yml +531 -0
- data/data/plates/us-il.yml +516 -0
- data/data/plates/us-in.yml +324 -0
- data/data/plates/us-ks.yml +351 -0
- data/data/plates/us-ky.yml +770 -0
- data/data/plates/us-la.yml +568 -0
- data/data/plates/us-ma.yml +379 -0
- data/data/plates/us-md.yml +536 -0
- data/data/plates/us-me.yml +445 -0
- data/data/plates/us-mi.yml +408 -0
- data/data/plates/us-mn.yml +411 -0
- data/data/plates/us-mo.yml +356 -0
- data/data/plates/us-mp.yml +402 -0
- data/data/plates/us-ms.yml +432 -0
- data/data/plates/us-mt.yml +619 -0
- data/data/plates/us-nc.yml +602 -0
- data/data/plates/us-nd.yml +419 -0
- data/data/plates/us-ne.yml +483 -0
- data/data/plates/us-nh.yml +394 -0
- data/data/plates/us-nj.yml +547 -0
- data/data/plates/us-nm.yml +574 -0
- data/data/plates/us-nv.yml +655 -0
- data/data/plates/us-ny.yml +592 -0
- data/data/plates/us-oh.yml +404 -0
- data/data/plates/us-ok.yml +513 -0
- data/data/plates/us-or.yml +392 -0
- data/data/plates/us-pa.yml +506 -0
- data/data/plates/us-pr.yml +507 -0
- data/data/plates/us-ri.yml +445 -0
- data/data/plates/us-sc.yml +605 -0
- data/data/plates/us-sd.yml +428 -0
- data/data/plates/us-tn.yml +471 -0
- data/data/plates/us-tx.yml +535 -0
- data/data/plates/us-ut.yml +384 -0
- data/data/plates/us-va.yml +567 -0
- data/data/plates/us-vi.yml +489 -0
- data/data/plates/us-vt.yml +458 -0
- data/data/plates/us-wa.yml +484 -0
- data/data/plates/us-wi.yml +509 -0
- data/data/plates/us-wv.yml +446 -0
- data/data/plates/us-wy.yml +523 -0
- data/data/plates/va.yml +604 -0
- data/data/plates/za.yml +1141 -0
- data/data/vehicles.json +160653 -105090
- data/lib/vehicles/configuration.rb +17 -3
- data/lib/vehicles/dataset.rb +73 -18
- data/lib/vehicles/fuzzy.rb +115 -0
- data/lib/vehicles/http.rb +48 -0
- data/lib/vehicles/make.rb +36 -6
- data/lib/vehicles/mcp_server.rb +5 -5
- data/lib/vehicles/model.rb +21 -2
- data/lib/vehicles/plates/series.rb +172 -18
- data/lib/vehicles/plates/template_fill.rb +188 -0
- data/lib/vehicles/plates/templates.rb +162 -0
- data/lib/vehicles/plates.rb +12 -0
- data/lib/vehicles/providers/hosted_provider.rb +28 -55
- data/lib/vehicles/validators/vehicle_make_validator.rb +3 -1
- data/lib/vehicles/validators/vehicle_model_validator.rb +1 -1
- data/lib/vehicles/version.rb +1 -1
- data/lib/vehicles.rb +32 -16
- data/rakelib/data_refresh.rake +109 -0
- data/rakelib/plates_refresh.rake +29 -0
- data/sig/vehicles.rbs +18 -0
- metadata +164 -2
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# plates/_decode/pt-trailer-services.yml — the Portuguese TRAILER registration
|
|
2
|
+
# prefixes: the issuing regional service, one or two letters.
|
|
3
|
+
#
|
|
4
|
+
# This is the one place geography survives on a Portuguese plate. Car, motorcycle
|
|
5
|
+
# and moped numbers carry none at all — the national car series is purely
|
|
6
|
+
# sequential — but a Portuguese trailer number is, verbatim from the statute,
|
|
7
|
+
# "uma ou duas letras identificadoras do serviço regional que procedeu à
|
|
8
|
+
# matrícula, seguidas de um número de ordem" (Regulamento de Matrícula, art. 4.º
|
|
9
|
+
# n.º 1). The letters are the district office that issued it, not the trailer's
|
|
10
|
+
# home district and not the towing vehicle's.
|
|
11
|
+
#
|
|
12
|
+
# THE TABLE IS A STATUTORY ANNEX, and it was AMENDED ONCE, which is why this
|
|
13
|
+
# file carries two vintages instead of one:
|
|
14
|
+
#
|
|
15
|
+
# * Decreto-Lei n.º 54/2005, de 3 de março — ANEXO I as originally enacted.
|
|
16
|
+
# 22 rows. Viseu is "VS".
|
|
17
|
+
# * Decreto-Lei n.º 106/2006, de 8 de junho, art. 1.º n.º 3 — replaces
|
|
18
|
+
# Anexo I wholesale. Same 22 districts, same 21 codes, and Viseu is "VI".
|
|
19
|
+
#
|
|
20
|
+
# The Viseu change is recorded, not averaged, and not treated as a misprint:
|
|
21
|
+
# both readings were taken from the Diário da República page images (the 2005
|
|
22
|
+
# facsimile at p. 1896 and the 2006 facsimile at p. 4054), so both are what the
|
|
23
|
+
# gazette printed. From the 2006 instrument's entry into force the operative
|
|
24
|
+
# code is VI; VS is on the road on every trailer plated between 2005 and 2006
|
|
25
|
+
# and on every earlier one issued under the same code. A parse API must accept
|
|
26
|
+
# BOTH — which is exactly the "decode tables rot" hazard PRD-PLATES §9 names,
|
|
27
|
+
# caught here inside a single fourteen-month window.
|
|
28
|
+
#
|
|
29
|
+
# WHAT THIS TABLE IS NOT: it is not a district-code table for cars. There has
|
|
30
|
+
# never been one in the modern Portuguese system. And it is not the EXPORT
|
|
31
|
+
# prefix set — export numbers take a single trailing letter from a different,
|
|
32
|
+
# four-member list (L / P / A / M), which is carried inline on pt-export in
|
|
33
|
+
# plates/pt.yml rather than here, because it is a different statutory list in a
|
|
34
|
+
# different article with different members.
|
|
35
|
+
#
|
|
36
|
+
# Referenced by: pt-trailer (plates/pt.yml) via region_encoding.
|
|
37
|
+
jurisdiction: pt
|
|
38
|
+
topic: trailer-services
|
|
39
|
+
authority:
|
|
40
|
+
name: "Regulamento do Número e Chapa de Matrícula (anexo ao Decreto-Lei n.º 54/2005, de 3 de março), Anexo I — na redação do Decreto-Lei n.º 106/2006, de 8 de junho"
|
|
41
|
+
url: "https://dre.pt/application/conteudo/346124"
|
|
42
|
+
sources:
|
|
43
|
+
- "https://files.diariodarepublica.pt/1s/2006/06/111a00/40524060.pdf # Decreto-Lei n.º 106/2006 (DR I-A n.º 111, 08-06-2006), art. 1.º n.º 3 + ANEXO I, p. 4054: the CURRENT 22-row table, with Viseu = VI. Locator: https://dre.pt/application/conteudo/346124 — accessed 2026-08-02"
|
|
44
|
+
- "https://files.diariodarepublica.pt/1s/2005/03/044a00/18921897.pdf # Decreto-Lei n.º 54/2005 (DR I-A n.º 44, 03-03-2005), ANEXO I 'Tabela de dígitos identificadores dos serviços emissores de matrículas de reboques (referente ao n.º 2 do artigo 4.º)', p. 1896: the SUPERSEDED table, with Viseu = VS. Locator: https://dre.pt/application/conteudo/589934 — accessed 2026-08-02"
|
|
45
|
+
period: { start: 2006 }
|
|
46
|
+
period_evidence: instrument-in-force
|
|
47
|
+
period_note: >-
|
|
48
|
+
2006 is the vintage of the list read here (Decreto-Lei n.º 106/2006, published
|
|
49
|
+
08-06-2006; no entry-into-force clause of its own, so the general 5-day
|
|
50
|
+
vacatio of Lei n.º 74/98 applies and the operative date is 13-06-2006 —
|
|
51
|
+
DERIVED from the default rule, not stated by the instrument, and flagged as
|
|
52
|
+
such). The CODES themselves are far older than either instrument: the
|
|
53
|
+
composition "letter(s) + serial" is drawn in the pre-1992 plate model
|
|
54
|
+
(DL 54/2005 Anexo II, Modelo V, "L-10978"), so trailers were numbered this way
|
|
55
|
+
for decades before any text reachable in this pass. The instrument that first
|
|
56
|
+
enacted the list was not located — recorded gap, and the reason this file's
|
|
57
|
+
period is an instrument vintage rather than a series start.
|
|
58
|
+
maximal_munch: true
|
|
59
|
+
maximal_munch_note: >-
|
|
60
|
+
Single-letter codes collide with the prefixes of two-letter ones and the
|
|
61
|
+
digits that follow give no separator help, so a parser MUST take the longest
|
|
62
|
+
matching code before the serial: A (Ponta Delgada) inside AV (Aveiro) and AN
|
|
63
|
+
(Angra do Heroísmo); C (Coimbra) inside CB (Castelo Branco); L (Lisboa) inside
|
|
64
|
+
LE (Leiria); P (Porto) inside PT (Portalegre). E (Évora), H (Horta) and M
|
|
65
|
+
(Funchal) are unambiguous.
|
|
66
|
+
|
|
67
|
+
codes:
|
|
68
|
+
# Mainland districts (distritos), in the order the annex prints them.
|
|
69
|
+
- { code: AV, name: "Aveiro" }
|
|
70
|
+
- { code: BE, name: "Beja" }
|
|
71
|
+
- { code: BR, name: "Braga" }
|
|
72
|
+
- { code: BN, name: "Bragança" }
|
|
73
|
+
- { code: CB, name: "Castelo Branco" }
|
|
74
|
+
- { code: C, name: "Coimbra" }
|
|
75
|
+
- { code: E, name: "Évora" }
|
|
76
|
+
- { code: FA, name: "Faro" }
|
|
77
|
+
- { code: GD, name: "Guarda" }
|
|
78
|
+
- { code: LE, name: "Leiria" }
|
|
79
|
+
- { code: L, name: "Lisboa" }
|
|
80
|
+
- { code: PT, name: "Portalegre" }
|
|
81
|
+
- { code: P, name: "Porto" }
|
|
82
|
+
- { code: SA, name: "Santarém" }
|
|
83
|
+
- { code: SE, name: "Setúbal" }
|
|
84
|
+
- { code: VC, name: "Viana do Castelo" }
|
|
85
|
+
- { code: VR, name: "Vila Real" }
|
|
86
|
+
- { code: VI, name: "Viseu", superseded_code: VS, superseded_note: "VS in the 2005 Anexo I; VI since the 2006 replacement. Both were printed by the Diário da República; both are on the road." }
|
|
87
|
+
# Autonomous regions — the annex lists the Azores by ISLAND-GROUP district
|
|
88
|
+
# (three of them) and Madeira by its single district, under the same heading.
|
|
89
|
+
- { code: AN, name: "Angra do Heroísmo", kind: autonomous-region, region: "Açores" }
|
|
90
|
+
- { code: H, name: "Horta", kind: autonomous-region, region: "Açores" }
|
|
91
|
+
- { code: A, name: "Ponta Delgada", kind: autonomous-region, region: "Açores" }
|
|
92
|
+
- { code: M, name: "Funchal", kind: autonomous-region, region: "Madeira" }
|
|
93
|
+
|
|
94
|
+
# Sanity note for the verifier: 22 rows, and the set is complete against
|
|
95
|
+
# Portugal's administrative map — 18 mainland distritos + the 3 Azorean
|
|
96
|
+
# distritos + Funchal. No code is duplicated; no district is missing.
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
# plates/_decode/ro-counties.yml — Romania's registration-mark territorial codes.
|
|
2
|
+
#
|
|
3
|
+
# PROVENANCE, STATED FIRST AND WITHOUT DECORATION. Unlike
|
|
4
|
+
# plates/_decode/it-provinces.yml and plates/_decode/at-districts.yml, whose rows
|
|
5
|
+
# are enacted law read off Normattiva and RIS, THE 41 COUNTY ROWS BELOW ARE
|
|
6
|
+
# `secondary-wikipedia`. The statutory annex exists and is named in `authority`;
|
|
7
|
+
# it was NOT reachable in this pass, and every URL tried and every failure mode
|
|
8
|
+
# is recorded in `primary_attempts` below so the next pass starts from a map.
|
|
9
|
+
# Every row carries `evidence_tier: secondary-wikipedia` inline. No row in this
|
|
10
|
+
# file claims `instrument-in-force`, and a reviewer who fingerprints this table
|
|
11
|
+
# against Wikipedia SHOULD find a match — that is the declared provenance, not a
|
|
12
|
+
# defect.
|
|
13
|
+
#
|
|
14
|
+
# THREE STRUCTURAL FACTS THIS FILE EXISTS TO CARRY
|
|
15
|
+
#
|
|
16
|
+
# 1. BUCHAREST IS NOT A COUNTY ROW, AND THAT IS WHY IT IS NOT IN THE COUNTY
|
|
17
|
+
# TABLE. Romania's territorial code is a ONE-letter code for the capital and a
|
|
18
|
+
# TWO-letter code for each of the 41 counties, and the two take DIFFERENT
|
|
19
|
+
# SERIAL FORMATS: a county plate carries two digits between the code and the
|
|
20
|
+
# three letters, Bucharest carries three. That is a real format fork inside
|
|
21
|
+
# one jurisdiction, it is modelled as separate SERIES in plates/ro.yml, and
|
|
22
|
+
# this file keeps `municipality` structurally apart from `counties` so a
|
|
23
|
+
# decoder cannot silently treat "B" as though it were a 42nd county row. The
|
|
24
|
+
# ordering and the split below are this dataset's, chosen to make the fork
|
|
25
|
+
# visible; they are not any source's arrangement.
|
|
26
|
+
#
|
|
27
|
+
# 2. THERE IS NO MAXIMAL-MUNCH PROBLEM, AND THAT IS WORTH SAYING OUT LOUD.
|
|
28
|
+
# Spain's pre-2000 province codes are one, two or three letters and a decoder
|
|
29
|
+
# must try longest-first (see plates/_decode/es-provinces.yml). Romania looks
|
|
30
|
+
# like it should have the same trouble — "B" is Bucharest while "BC", "BH",
|
|
31
|
+
# "BN", "BR", "BT", "BV" and "BZ" are all counties — but it does not, because
|
|
32
|
+
# the DIGIT BLOCK ALWAYS FOLLOWS THE CODE. In "B12ABC" the character after B
|
|
33
|
+
# is a digit, so the code is one letter; in "BC12ABC" it is a letter, so the
|
|
34
|
+
# code is two. The rule is mechanical and total, and it survives separator
|
|
35
|
+
# stripping (PRD-PLATES §2.6), which is exactly when a decoder needs it most.
|
|
36
|
+
#
|
|
37
|
+
# 3. THESE ARE NOT THE PRE-1992 CODES. The communist-era system used a different
|
|
38
|
+
# territorial letter set built on the administrative regions of the day — the
|
|
39
|
+
# much-repeated example is that the Craiova area ran under "OL" for Oltenia —
|
|
40
|
+
# and it also placed the letters in the MIDDLE of the mark rather than at the
|
|
41
|
+
# front. This table decodes the 1992-and-later mark only. Applying it to a
|
|
42
|
+
# pre-1992 Romanian plate will produce confident nonsense; ro-communist-1966
|
|
43
|
+
# in plates/ro.yml carries no reference to this file for that reason.
|
|
44
|
+
jurisdiction: ro
|
|
45
|
+
topic: counties
|
|
46
|
+
authority:
|
|
47
|
+
name: "Regulamentul de aplicare a Ordonanţei de urgenţă a Guvernului nr. 195/2002 privind circulaţia pe drumurile publice, aprobat prin H.G. nr. 1.391 din 4 octombrie 2006 — the instrument whose annex carries the official list of indicative"
|
|
48
|
+
url: "https://legislatie.just.ro/Public/DetaliiDocument/79058"
|
|
49
|
+
note: >-
|
|
50
|
+
Named as the CARRIER of the official list, not as the source of the rows
|
|
51
|
+
below. Art. 23 of the Regulament composes the mark from "indicativul
|
|
52
|
+
judeţului sau al municipiului Bucureşti" plus an order number plus three
|
|
53
|
+
letters, and the indicative themselves are set out in the instrument's annex.
|
|
54
|
+
That annex was not retrieved — see `primary_attempts`.
|
|
55
|
+
|
|
56
|
+
evidence:
|
|
57
|
+
tier: secondary-wikipedia
|
|
58
|
+
source: "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Romania # the 41 county code-to-name pairs and the Bucharest code, re-expressed in this schema's own shape and ordering. Accessed 2026-08-02"
|
|
59
|
+
what_is_secondary: "every code, every county name, and the count of 41 + 1"
|
|
60
|
+
what_is_not_secondary: >-
|
|
61
|
+
The COMPOSITION RULE — that the mark begins with the indicative of the county
|
|
62
|
+
or of the municipality of Bucharest — is the Regulament's own words and is
|
|
63
|
+
cited as such in plates/ro.yml. What is secondary here is the CONTENTS of the
|
|
64
|
+
list, not the fact that the law keeps one.
|
|
65
|
+
|
|
66
|
+
primary_attempts:
|
|
67
|
+
- url: "https://legislatie.just.ro/Public/DetaliiDocument/79058"
|
|
68
|
+
result: "socket hang up, four separate attempts across the pass"
|
|
69
|
+
- url: "https://legislatie.just.ro/Public/DetaliiDocumentAfis/79058"
|
|
70
|
+
result: "socket hang up"
|
|
71
|
+
- url: "https://www.dsclex.ro/legislatie/2006/octombrie/hg1391_2006.htm"
|
|
72
|
+
result: "connection reset"
|
|
73
|
+
- url: "https://r.jina.ai/https://legislatie.just.ro/Public/DetaliiDocument/79058"
|
|
74
|
+
result: "HTTP 422 (also tried percent-encoded: HTTP 422)"
|
|
75
|
+
- url: "https://web.archive.org/web/2024/https://legislatie.just.ro/Public/DetaliiDocument/79058"
|
|
76
|
+
result: "fetch tool refuses web.archive.org"
|
|
77
|
+
- url: "https://www.legex.ro/Hotararea-1391-2006-76973.aspx"
|
|
78
|
+
result: "HOST IS REACHABLE — but that document id resolves to Ordinul 2374/2006 (civil aviation), not to HG 1391/2006. legex.ro is a live route for the next pass IF the correct document id is found; the id was not."
|
|
79
|
+
primary_attempts_note: >-
|
|
80
|
+
Search-engine assistance was unavailable for the second half of this pass: the
|
|
81
|
+
WebSearch budget was exhausted, DuckDuckGo's HTML endpoint moved to a CAPTCHA,
|
|
82
|
+
Mojeek returned 403 and SearXNG returned a browser check. The correct legex.ro
|
|
83
|
+
document id is therefore the single cheapest next step for whoever picks this
|
|
84
|
+
up.
|
|
85
|
+
|
|
86
|
+
period: { start: 1992 }
|
|
87
|
+
period_evidence: secondary-wikipedia
|
|
88
|
+
period_note: >-
|
|
89
|
+
The code set below belongs to the system introduced in 1992. Two period
|
|
90
|
+
cautions a decoder must carry. (1) LOWER BOUND: these codes do not decode
|
|
91
|
+
pre-1992 marks at all (header fact 3). (2) STABILITY: Romania's county
|
|
92
|
+
boundaries have not been re-cut since 1968, so unlike the Italian province
|
|
93
|
+
sigle (four withdrawn in 2017) and the German district codes (reinstated in
|
|
94
|
+
waves), this table has no known withdrawn rows and no known period-closed rows.
|
|
95
|
+
That is an ABSENCE OF EVIDENCE of churn rather than sourced evidence of
|
|
96
|
+
stability, and it is recorded as the former.
|
|
97
|
+
|
|
98
|
+
iso_3166_2_correspondence:
|
|
99
|
+
status: UNVERIFIED
|
|
100
|
+
claim_not_made: >-
|
|
101
|
+
The 41 two-letter codes below LOOK like the subdivision codes of ISO
|
|
102
|
+
3166-2:RO with the "RO-" prefix removed, and if that correspondence held it
|
|
103
|
+
would give this table a second, non-Wikipedia, structured route. THIS FILE
|
|
104
|
+
DOES NOT RELY ON IT AND DOES NOT ASSERT IT. The ISO register was not fetched
|
|
105
|
+
in this pass, so the correspondence is an unchecked hypothesis, and an
|
|
106
|
+
unchecked hypothesis dressed as corroboration would be worse than no
|
|
107
|
+
corroboration at all — two sources that were never actually compared are one
|
|
108
|
+
source with a false witness. Recorded here as the FIRST task for a verifier:
|
|
109
|
+
fetch the ISO 3166-2:RO register, diff it against these rows, and either
|
|
110
|
+
upgrade the tier or record where they diverge.
|
|
111
|
+
|
|
112
|
+
# ---------------------------------------------------------------------------
|
|
113
|
+
# THE CAPITAL — one letter, three digits, its own series in plates/ro.yml.
|
|
114
|
+
# ---------------------------------------------------------------------------
|
|
115
|
+
municipality:
|
|
116
|
+
code: B
|
|
117
|
+
name: "București"
|
|
118
|
+
name_en: Bucharest
|
|
119
|
+
type: "municipiu (the capital, which is not a județ)"
|
|
120
|
+
serial_digits: 3
|
|
121
|
+
serial_digits_history:
|
|
122
|
+
- { digits: 2, note: "the original 1992 form, B 99 LLL — see ro-bucharest-1992 / ro-bucharest-2007" }
|
|
123
|
+
- { digits: 3, note: "adopted when the two-digit space was exhausted — see ro-bucharest-2010" }
|
|
124
|
+
evidence_tier: secondary-wikipedia
|
|
125
|
+
note: >-
|
|
126
|
+
THE FORMAT FORK. Every other territorial code in Romania takes two digits;
|
|
127
|
+
Bucharest takes three. The reason is capacity, not law: art. 23 of the
|
|
128
|
+
Regulament prescribes "numărul de ordine, format din cifre arabe" and fixes
|
|
129
|
+
NO number of digits at all, so the capital was able to lengthen its order
|
|
130
|
+
number without any amendment. That is why plates/ro.yml carries a
|
|
131
|
+
`regex_statutory` wider than its `regex` for the standard series — the
|
|
132
|
+
statute is genuinely wider than what is issued, and Bucharest is the proof.
|
|
133
|
+
|
|
134
|
+
# ---------------------------------------------------------------------------
|
|
135
|
+
# THE 41 COUNTIES — ordered by CODE, this dataset's ordering. Two letters each,
|
|
136
|
+
# two digits in the serial, without exception.
|
|
137
|
+
# ---------------------------------------------------------------------------
|
|
138
|
+
counties_note: "every row: { code, name (Romanian, with diacritics), evidence_tier }. serial_digits is 2 for all 41 and is stated once here rather than repeated per row."
|
|
139
|
+
counties_serial_digits: 2
|
|
140
|
+
counties:
|
|
141
|
+
- { code: AB, name: "Alba", evidence_tier: secondary-wikipedia }
|
|
142
|
+
- { code: AG, name: "Argeș", evidence_tier: secondary-wikipedia }
|
|
143
|
+
- { code: AR, name: "Arad", evidence_tier: secondary-wikipedia }
|
|
144
|
+
- { code: BC, name: "Bacău", evidence_tier: secondary-wikipedia }
|
|
145
|
+
- { code: BH, name: "Bihor", evidence_tier: secondary-wikipedia }
|
|
146
|
+
- { code: BN, name: "Bistrița-Năsăud", evidence_tier: secondary-wikipedia }
|
|
147
|
+
- { code: BR, name: "Brăila", evidence_tier: secondary-wikipedia }
|
|
148
|
+
- { code: BT, name: "Botoșani", evidence_tier: secondary-wikipedia }
|
|
149
|
+
- { code: BV, name: "Brașov", evidence_tier: secondary-wikipedia }
|
|
150
|
+
- { code: BZ, name: "Buzău", evidence_tier: secondary-wikipedia }
|
|
151
|
+
- { code: CJ, name: "Cluj", evidence_tier: secondary-wikipedia }
|
|
152
|
+
- { code: CL, name: "Călărași", evidence_tier: secondary-wikipedia }
|
|
153
|
+
- { code: CS, name: "Caraș-Severin", evidence_tier: secondary-wikipedia }
|
|
154
|
+
- { code: CT, name: "Constanța", evidence_tier: secondary-wikipedia }
|
|
155
|
+
- { code: CV, name: "Covasna", evidence_tier: secondary-wikipedia }
|
|
156
|
+
- { code: DB, name: "Dâmbovița", evidence_tier: secondary-wikipedia }
|
|
157
|
+
- { code: DJ, name: "Dolj", evidence_tier: secondary-wikipedia }
|
|
158
|
+
- { code: GJ, name: "Gorj", evidence_tier: secondary-wikipedia }
|
|
159
|
+
- { code: GL, name: "Galați", evidence_tier: secondary-wikipedia }
|
|
160
|
+
- { code: GR, name: "Giurgiu", evidence_tier: secondary-wikipedia }
|
|
161
|
+
- { code: HD, name: "Hunedoara", evidence_tier: secondary-wikipedia }
|
|
162
|
+
- { code: HR, name: "Harghita", evidence_tier: secondary-wikipedia }
|
|
163
|
+
- { code: IF, name: "Ilfov", evidence_tier: secondary-wikipedia }
|
|
164
|
+
- { code: IL, name: "Ialomița", evidence_tier: secondary-wikipedia }
|
|
165
|
+
- { code: IS, name: "Iași", evidence_tier: secondary-wikipedia }
|
|
166
|
+
- { code: MH, name: "Mehedinți", evidence_tier: secondary-wikipedia }
|
|
167
|
+
- { code: MM, name: "Maramureș", evidence_tier: secondary-wikipedia }
|
|
168
|
+
- { code: MS, name: "Mureș", evidence_tier: secondary-wikipedia }
|
|
169
|
+
- { code: NT, name: "Neamț", evidence_tier: secondary-wikipedia }
|
|
170
|
+
- { code: OT, name: "Olt", evidence_tier: secondary-wikipedia }
|
|
171
|
+
- { code: PH, name: "Prahova", evidence_tier: secondary-wikipedia }
|
|
172
|
+
- { code: SB, name: "Sibiu", evidence_tier: secondary-wikipedia }
|
|
173
|
+
- { code: SJ, name: "Sălaj", evidence_tier: secondary-wikipedia }
|
|
174
|
+
- { code: SM, name: "Satu Mare", evidence_tier: secondary-wikipedia }
|
|
175
|
+
- { code: SV, name: "Suceava", evidence_tier: secondary-wikipedia }
|
|
176
|
+
- { code: TL, name: "Tulcea", evidence_tier: secondary-wikipedia }
|
|
177
|
+
- { code: TM, name: "Timiș", evidence_tier: secondary-wikipedia }
|
|
178
|
+
- { code: TR, name: "Teleorman", evidence_tier: secondary-wikipedia }
|
|
179
|
+
- { code: VL, name: "Vâlcea", evidence_tier: secondary-wikipedia }
|
|
180
|
+
- { code: VN, name: "Vrancea", evidence_tier: secondary-wikipedia }
|
|
181
|
+
- { code: VS, name: "Vaslui", evidence_tier: secondary-wikipedia }
|
|
182
|
+
|
|
183
|
+
# ---------------------------------------------------------------------------
|
|
184
|
+
# Decoder cautions.
|
|
185
|
+
# ---------------------------------------------------------------------------
|
|
186
|
+
decoder_cautions:
|
|
187
|
+
- id: place-of-registration-not-residence
|
|
188
|
+
text: >-
|
|
189
|
+
The Romanian indicative denotes where the vehicle is REGISTERED. It is
|
|
190
|
+
therefore semantically unlike the Italian right-hand sticker (the holder's
|
|
191
|
+
province of RESIDENCE, and legally not part of the plate at all) and unlike
|
|
192
|
+
the French SIV département band (owner-CHOSEN, decoding to nothing). A
|
|
193
|
+
Romanian indicative is real geography. It is still not a claim about where
|
|
194
|
+
the vehicle IS, only about where it was put on the register.
|
|
195
|
+
- id: ilfov-is-not-bucharest
|
|
196
|
+
text: >-
|
|
197
|
+
IF (Ilfov) is the county that SURROUNDS Bucharest and is a separate
|
|
198
|
+
indicative with the ordinary two-digit format. A decoder that folds IF into
|
|
199
|
+
B, or renders IF as "Bucharest area", is wrong on both the code and the
|
|
200
|
+
format.
|
|
201
|
+
- id: no-code-is-a-word
|
|
202
|
+
text: >-
|
|
203
|
+
Unlike Italy, whose Rome sigla is the literal word "Roma" and forces a
|
|
204
|
+
special case into every parser, every Romanian code here is exactly one or
|
|
205
|
+
two letters. There is no four-letter exception and no mixed-case row.
|
|
206
|
+
- id: three-letter-group-is-not-a-code
|
|
207
|
+
text: >-
|
|
208
|
+
The THREE letters at the end of a Romanian mark are a serial group, not a
|
|
209
|
+
territorial code, even when they spell a plausible abbreviation. Certain
|
|
210
|
+
combinations are reported to be reserved for institutions (POL, DEP, SNT,
|
|
211
|
+
SRI, GUV); those are reservations inside the serial space and are recorded
|
|
212
|
+
in plates/ro.yml, not here, because they decode to an INSTITUTION and not
|
|
213
|
+
to a place.
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# plates/_decode/se-diplomatic.yml — Swedish beskickningsskylt country codes.
|
|
2
|
+
#
|
|
3
|
+
# WHY THIS IS A _decode FILE AND NOT AN INLINE TABLE (PRD-PLATES §2.4): 128
|
|
4
|
+
# rows is past the "small" threshold that put FZV Anlage 2 inline in de.yml,
|
|
5
|
+
# and it is a CLOSED, PRIMARY list — Transportstyrelsen publishes the whole
|
|
6
|
+
# thing, so it qualifies on the other limb of the rule ("a reference … if the
|
|
7
|
+
# full table is primary-sourced and closed").
|
|
8
|
+
#
|
|
9
|
+
# THE SOURCE MOVED, AND THAT MATTERS FOR PROVENANCE. Until 2 June 2025 this
|
|
10
|
+
# table WAS a regulation annex: TSFS 2015:63 Bilaga 1 ("Landskod enligt
|
|
11
|
+
# 12 kap. 3 § 1") and Bilaga 2 ("Kategorikod enligt 12 kap. 3 § 3"). TSFS
|
|
12
|
+
# 2025:33 repealed both annexes and rewrote 12 kap. 3 § so that the codes are
|
|
13
|
+
# no longer enumerated in the föreskrift at all — they now live only on
|
|
14
|
+
# Transportstyrelsen's website. Both are cited below: the website for the
|
|
15
|
+
# CURRENT list, the repealed annex for the fact that this used to be enacted
|
|
16
|
+
# text and for the pre-2025 kategorikod set (which had no "J").
|
|
17
|
+
#
|
|
18
|
+
# DECODE DISCIPLINE: the assigning authority is NOT Transportstyrelsen. 11 kap.
|
|
19
|
+
# 2 § förordningen (2019:383): "Sammansättningen av tecken på skyltar för
|
|
20
|
+
# beskickningsfordon bestäms av Regeringskansliet (Utrikesdepartementet) med
|
|
21
|
+
# hänsyn till det berörda landet och den ställning som den som äger eller
|
|
22
|
+
# använder fordonet har." Missions open and close; a code withdrawn from this
|
|
23
|
+
# list does not become undecodable for plates already issued, so rows are
|
|
24
|
+
# closed by period and never deleted — the same rule de.yml records for German
|
|
25
|
+
# district codes.
|
|
26
|
+
#
|
|
27
|
+
# ALPHABET OBSERVATION (a fact about the table, not a rule): across all 128
|
|
28
|
+
# codes the letters I, O and Q never appear, while V does (EV = IDEA). That is
|
|
29
|
+
# the opposite of the ordinary registration-number alphabet, which excludes
|
|
30
|
+
# I, Q, V, Å, Ä and Ö. No primary states a letter rule for landskoder; the
|
|
31
|
+
# observation is recorded so a parse API does not infer one.
|
|
32
|
+
jurisdiction: se
|
|
33
|
+
topic: diplomatic
|
|
34
|
+
authority:
|
|
35
|
+
name: Regeringskansliet (Utrikesdepartementet) — codes; Transportstyrelsen — publication
|
|
36
|
+
url: "https://www.transportstyrelsen.se/sv/vagtrafik/fordon/aga-kopa-eller-salja-fordon/registreringsskyltar/skylt-for-beskickningsfordon-diplomatfordon/"
|
|
37
|
+
sources:
|
|
38
|
+
- "https://www.transportstyrelsen.se/sv/vagtrafik/fordon/aga-kopa-eller-salja-fordon/registreringsskyltar/skylt-for-beskickningsfordon-diplomatfordon/ # the current 128-row landskod table and the kategorikod table (A-H, 'I eller J'); accessed 2026-08-02"
|
|
39
|
+
- "https://www.transportstyrelsen.se/TSFS/TSFS%202015_63.pdf # TSFS 2015:63 as enacted, Bilaga 1 'Landskod enligt 12 kap. 3 § 1' and Bilaga 2 'Kategorikod enligt 12 kap. 3 § 3' (kategorikod A-I, no J) — the version in force 2016-01-01; accessed 2026-08-02"
|
|
40
|
+
- "https://www.transportstyrelsen.se/TSFS/TSFS%202025_33.pdf # TSFS 2025:33: 'dels att 3 kap. 17 §, 6 kap. 14 §, 12 kap. 4 § samt bilaga 1 och 2 ska upphöra att gälla' — in force 2 June 2025, which is when the table left the regulation; accessed 2026-08-02"
|
|
41
|
+
- "https://data.riksdagen.se/dokument/sfs-2019-383.html # 11 kap. 2 §: the character composition is set by Regeringskansliet (Utrikesdepartementet); accessed 2026-08-02"
|
|
42
|
+
period: { start: 2025 }
|
|
43
|
+
period_evidence: instrument-in-force
|
|
44
|
+
period_note: >-
|
|
45
|
+
2025 is the date of the SOURCE now read (the Transportstyrelsen web table,
|
|
46
|
+
which replaced TSFS 2015:63 Bilaga 1 on 2 June 2025), not the date any code
|
|
47
|
+
was first assigned. The beskickningsskylt regime itself is far older —
|
|
48
|
+
förordningen (1988:964) om skyltar för beskickningsfordon took effect on
|
|
49
|
+
1 October 1988 — and the per-mission code assignments are Utrikesdepartementet
|
|
50
|
+
decisions that are not individually dated in any published source. Treat every
|
|
51
|
+
row as "in force when read"; do not infer an assignment year from it.
|
|
52
|
+
|
|
53
|
+
# ---------------------------------------------------------------------------
|
|
54
|
+
# LANDSKOD — two letters, the mission. 128 rows, verbatim from the authority's
|
|
55
|
+
# table, keyed by code (the table is printed mission-first; keying by code is
|
|
56
|
+
# the decode direction a parse API needs).
|
|
57
|
+
# ---------------------------------------------------------------------------
|
|
58
|
+
landskod:
|
|
59
|
+
AA: "Sydafrikas ambassad"
|
|
60
|
+
AB: "Albaniens ambassad"
|
|
61
|
+
AC: "Algeriets ambassad"
|
|
62
|
+
AD: "Tysklands ambassad"
|
|
63
|
+
AE: "Armeniens ambassad"
|
|
64
|
+
AF: "Amerikas förenta staters ambassad"
|
|
65
|
+
AG: "Angolas ambassad"
|
|
66
|
+
AH: "Saudiarabiens ambassad"
|
|
67
|
+
AJ: "Argentinas ambassad"
|
|
68
|
+
AK: "Australiens ambassad"
|
|
69
|
+
AL: "Österrikes ambassad"
|
|
70
|
+
AM: "Bangladesh ambassad"
|
|
71
|
+
AN: "Belgiens ambassad"
|
|
72
|
+
AP: "Bolivias ambassad"
|
|
73
|
+
AR: "Botswanas ambassad"
|
|
74
|
+
AS: "Brasiliens ambassad"
|
|
75
|
+
AT: "Bulgariens ambassad"
|
|
76
|
+
AU: "Canadas ambassad"
|
|
77
|
+
AW: "Chiles ambassad"
|
|
78
|
+
AX: "Folkrepubliken Kinas ambassad"
|
|
79
|
+
AY: "Colombias ambassad"
|
|
80
|
+
AZ: "Republiken Koreas ambassad"
|
|
81
|
+
BA: "Demokratiska folkrepubliken Koreasambassad"
|
|
82
|
+
BB: "Afghanistans ambassad"
|
|
83
|
+
BC: "Cubas ambassad"
|
|
84
|
+
BD: "Danmarks ambassad"
|
|
85
|
+
BE: "Dominikanska republikens ambassad"
|
|
86
|
+
BF: "Egyptens ambassad"
|
|
87
|
+
BG: "Ecuadors ambassad"
|
|
88
|
+
BH: "Spaniens ambassad"
|
|
89
|
+
BJ: "Etiopiens ambassad"
|
|
90
|
+
BK: "Finlands ambassad"
|
|
91
|
+
BL: "Frankrikes ambassad"
|
|
92
|
+
BM: "Storbritanniens ambassad"
|
|
93
|
+
BN: "Greklands ambassad"
|
|
94
|
+
BP: "Guatemalas ambassad"
|
|
95
|
+
BR: "Kazakstans ambassad"
|
|
96
|
+
BS: "Ungerns ambassad"
|
|
97
|
+
BT: "Indiens ambassad"
|
|
98
|
+
BU: "Indonesiens ambassad"
|
|
99
|
+
BW: "Iraks ambassad"
|
|
100
|
+
BX: "Irans ambassad"
|
|
101
|
+
BY: "Irlands ambassad"
|
|
102
|
+
BZ: "Islands ambassad"
|
|
103
|
+
CA: "Israels ambassad"
|
|
104
|
+
CB: "Italiens ambassad"
|
|
105
|
+
CC: "Japans ambassad"
|
|
106
|
+
CD: "Kenyas ambassad"
|
|
107
|
+
CE: "Laos ambassad"
|
|
108
|
+
CF: "Libanons ambassad"
|
|
109
|
+
CG: "Libyens folkkontor"
|
|
110
|
+
CH: "Malaysias ambassad"
|
|
111
|
+
CJ: "Marockos ambassad"
|
|
112
|
+
CK: "Mexikos ambassad"
|
|
113
|
+
CL: "Moçambiques ambassad"
|
|
114
|
+
CM: "Nicaraguas ambassad"
|
|
115
|
+
CN: "Nigerias ambassad"
|
|
116
|
+
CP: "Norges ambassad"
|
|
117
|
+
CR: "Qatars ambassad"
|
|
118
|
+
CS: "Pakistans ambassad"
|
|
119
|
+
CT: "Panamas ambassad"
|
|
120
|
+
CU: "Nederländernas ambassad"
|
|
121
|
+
CW: "Perus ambassad"
|
|
122
|
+
CX: "Filippinernas ambassad"
|
|
123
|
+
CY: "Polens ambassad"
|
|
124
|
+
CZ: "Portugals ambassad"
|
|
125
|
+
DA: "Rumäniens ambassad"
|
|
126
|
+
DB: "Senegals ambassad"
|
|
127
|
+
DD: "Sri Lankas ambassad"
|
|
128
|
+
DE: "Schweiz ambassad"
|
|
129
|
+
DF: "Tanzanias ambassad"
|
|
130
|
+
DG: "Tjeckiens ambassad"
|
|
131
|
+
DH: "Thailands ambassad"
|
|
132
|
+
DJ: "Tunisiens ambassad"
|
|
133
|
+
DK: "Turkiets ambassad"
|
|
134
|
+
DL: "Rysslands ambassad"
|
|
135
|
+
DM: "Uruguays ambassad"
|
|
136
|
+
DN: "Venezuelas ambassad"
|
|
137
|
+
DP: "Vietnams ambassad"
|
|
138
|
+
DR: "Serbiens ambassad"
|
|
139
|
+
DS: "Zambias ambassad"
|
|
140
|
+
DT: "Zimbabwes ambassad"
|
|
141
|
+
DU: "FN:s flyktingkommissariat"
|
|
142
|
+
DW: "Världssjöfartsuniversitet"
|
|
143
|
+
DX: "Nordiska rådets presidiesekretariat"
|
|
144
|
+
DY: "Namibias ambassad"
|
|
145
|
+
DZ: "Sudans ambassad"
|
|
146
|
+
EA: "Europeiska rymdorganisationen (ESA)"
|
|
147
|
+
EB: "Europeiska Unionen (EU)"
|
|
148
|
+
EC: "Burundis ambassad"
|
|
149
|
+
ED: "Estlands ambassad"
|
|
150
|
+
EE: "Lettlands ambassad"
|
|
151
|
+
EF: "Litauens ambassad"
|
|
152
|
+
EG: "Kroatiens ambassad"
|
|
153
|
+
EH: "Sloveniens ambassad"
|
|
154
|
+
EJ: "Slovakiens ambassad"
|
|
155
|
+
EK: "Bosnien-Hercegovinas ambassad"
|
|
156
|
+
EL: "Eritreas ambassad"
|
|
157
|
+
EM: "Ukrainas ambassad"
|
|
158
|
+
EN: "Cyperns ambassad"
|
|
159
|
+
EP: "Makedoniens ambassad"
|
|
160
|
+
ER: "Kuwaits ambassad"
|
|
161
|
+
ES: "Honduras ambassad"
|
|
162
|
+
ET: "Rwandas ambassad"
|
|
163
|
+
EV: "International Institute for Democracy and Electoral Assistance (IDEA)"
|
|
164
|
+
EX: "Kap Verdes ambassad"
|
|
165
|
+
EY: "Östersjöstaternas råds sekretariat (CBSS)"
|
|
166
|
+
FA: "Vitrysslands ambassad"
|
|
167
|
+
FB: "Demokratiska Republiken Kongos ambassad"
|
|
168
|
+
FC: "El Salvadors ambassad"
|
|
169
|
+
FD: "Syriens ambassad"
|
|
170
|
+
FE: "GIWA (Global International WatersAssessment)"
|
|
171
|
+
FF: "Apostoliska nuntiaturen"
|
|
172
|
+
FG: "European Commission/RepresentationIn Sweden"
|
|
173
|
+
FH: "GWPO (Global Water PartnershipOrganisation)"
|
|
174
|
+
FJ: "Förenade Arabemiratens ambassad"
|
|
175
|
+
FK: "Moldaviens ambassad"
|
|
176
|
+
FL: "Georgiens ambassad"
|
|
177
|
+
FM: "Azerbajdzjans ambassad"
|
|
178
|
+
FN: "Nya Zeelands ambassad"
|
|
179
|
+
FP: "Mongoliets ambassad"
|
|
180
|
+
FS: "Republiken Kongos ambassad"
|
|
181
|
+
FT: "Kosovos ambassad"
|
|
182
|
+
FU: "Paraguays ambassad"
|
|
183
|
+
FW: "Palestinas ambassad"
|
|
184
|
+
FX: "Europeiska investeringsbanken"
|
|
185
|
+
FY: "Sekretariatet för Nordliga dimensionens partnerskap för hälsa och socialt välbefinnande (NDPHS)"
|
|
186
|
+
FZ: "Uzbekistans ambassad"
|
|
187
|
+
|
|
188
|
+
# ---------------------------------------------------------------------------
|
|
189
|
+
# KATEGORIKOD — one letter, the holder's standing. Note the I/J pair: the
|
|
190
|
+
# repealed TSFS 2015:63 Bilaga 2 listed only "I tjänsteman vid internationell
|
|
191
|
+
# organisation"; the current web table reads "I eller J", so J is an addition
|
|
192
|
+
# made after the annex was written. Recorded as two rows with the same meaning
|
|
193
|
+
# rather than as the string "I eller J", so the table is machine-usable.
|
|
194
|
+
# ---------------------------------------------------------------------------
|
|
195
|
+
kategorikod:
|
|
196
|
+
A: "beskickningschef"
|
|
197
|
+
B: "ambassad"
|
|
198
|
+
C: "diplomat"
|
|
199
|
+
D: "administrativ/teknisk tjänsteman"
|
|
200
|
+
E: "karriärkonsulat"
|
|
201
|
+
F: "karriärkonsul"
|
|
202
|
+
G: "konsulattjänsteman"
|
|
203
|
+
H: "internationell organisation"
|
|
204
|
+
I: "tjänsteman vid internationell organisation"
|
|
205
|
+
J: "tjänsteman vid internationell organisation"
|
|
206
|
+
kategorikod_note: >-
|
|
207
|
+
TSFS 2015:63 Bilaga 2 as enacted (in force 2016-01-01) ended at I. The
|
|
208
|
+
current Transportstyrelsen table prints "I eller J" against the single
|
|
209
|
+
meaning "tjänsteman vid internationell organisation". No instrument dating
|
|
210
|
+
J's addition was found — recorded gap.
|
|
211
|
+
|
|
212
|
+
# The middle group is a THREE-DIGIT löpnummer allocated inside each landskod
|
|
213
|
+
# (TSFS 2015:63 12 kap. 3 § 2: "ett löpnummer (tre siffror) inom respektive
|
|
214
|
+
# landskod"). It is a per-mission sequence with no published meaning, so there
|
|
215
|
+
# is nothing to decode below the landskod + kategorikod pair.
|
|
216
|
+
lopnummer:
|
|
217
|
+
digits: 3
|
|
218
|
+
scope: "per landskod"
|
|
219
|
+
decodes_to: null
|
|
220
|
+
source: "https://www.transportstyrelsen.se/TSFS/TSFS%202015_63k.pdf # 12 kap. 3 §, consolidated; accessed 2026-08-02"
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# plates/_decode/si-regions.yml — Slovenian registracijska območja, and the
|
|
2
|
+
# thing that actually makes a Slovenian plate decodable: THE MUNICIPAL ARMS.
|
|
3
|
+
#
|
|
4
|
+
# TWO LEVELS, and the second one is the interesting one.
|
|
5
|
+
#
|
|
6
|
+
# LEVEL 1 — the two-letter code. Only ELEVEN exist, and both halves of the fact
|
|
7
|
+
# are primary: 29. člen (1) of the Pravilnik o registraciji motornih in
|
|
8
|
+
# priklopnih vozil (Uradni list RS, št. 48/11) names the eleven registration
|
|
9
|
+
# areas and, for each, the upravne enote it covers; 29. člen (2) delegates the
|
|
10
|
+
# LETTERS to Priloga IV ("Oznake registracijskih območij, ki se uporabljajo na
|
|
11
|
+
# registrskih in preskusnih tablicah, so navedene v seznamu oznak
|
|
12
|
+
# registracijskih območij v Prilogi IV tega pravilnika"), which is a one-page
|
|
13
|
+
# table printed with the regulation. Both are reproduced below, in the
|
|
14
|
+
# regulation's own numbering — which is the same in the article and the annex.
|
|
15
|
+
#
|
|
16
|
+
# LEVEL 2 — the coat of arms, which is NOT decoration. 28. člen (1), verbatim:
|
|
17
|
+
# "Za oznako registracijskega območja je grb občine, kjer je sedež upravne
|
|
18
|
+
# enote v tem registracijskem območju." The shield between the code and the
|
|
19
|
+
# serial is the arms of the MUNICIPALITY THAT HOSTS THE SEAT OF THE UPRAVNA
|
|
20
|
+
# ENOTA — not of the registration area. So thirteen visually different plates
|
|
21
|
+
# all read "LJ", and the shield is the only thing that tells Kočevje from
|
|
22
|
+
# Domžale from Ljubljana. A Slovenian plate therefore carries strictly more
|
|
23
|
+
# geography than its letters do, and a text-only parse throws it away.
|
|
24
|
+
# 28. člen (3) adds that the arms must be adapted graphically to the plate.
|
|
25
|
+
#
|
|
26
|
+
# WHAT THE ARMS BIND TO, and when. The 2011 pravilnik states the rule
|
|
27
|
+
# positionally and leaves the binding to the registration rules; its 2004
|
|
28
|
+
# predecessor said it outright, and the sense has not changed —
|
|
29
|
+
# Uradni list RS, št. 29/04, 22. člen (1), verbatim: "se uporabi grb mesta, v
|
|
30
|
+
# katerem je sedež organa, ki vodi vozilo v evidenci in v kateri ima lastnik
|
|
31
|
+
# vozila, OB IZDAJI REGISTRSKIH TABLIC, svoje stalno prebivališče oziroma
|
|
32
|
+
# začasno prebivališče". The arms are fixed AT ISSUE, to the then-owner's
|
|
33
|
+
# residence. Same caution as the Croatian city code: decode to
|
|
34
|
+
# residence-at-issue, never to "where this car is now".
|
|
35
|
+
#
|
|
36
|
+
# NOT A COMPLETE ARMS CATALOGUE. This file names the upravne enote whose seat
|
|
37
|
+
# municipality supplies each shield; it does NOT carry the 58 blazons, their
|
|
38
|
+
# artwork or their licensing. Municipal arms are protected independently of
|
|
39
|
+
# copyright and PRD-PLATES §3 puts them in the placeholder slot
|
|
40
|
+
# (`design.emblem.rendered: placeholder` in plates/si.yml). Recorded gap:
|
|
41
|
+
# a per-upravna-enota arms ledger.
|
|
42
|
+
jurisdiction: si
|
|
43
|
+
topic: regions
|
|
44
|
+
authority:
|
|
45
|
+
name: "Pravilnik o registraciji motornih in priklopnih vozil, 29. člen in Priloga IV — Ministrstvo za infrastrukturo / upravne enote"
|
|
46
|
+
url: "https://www.uradni-list.si/glasilo-uradni-list-rs/vsebina/2011-01-2292"
|
|
47
|
+
sources:
|
|
48
|
+
- "https://www.uradni-list.si/glasilo-uradni-list-rs/vsebina/2011-01-2292 # Uradni list RS, št. 48/2011 z dne 24. 6. 2011 — 29. člen (1) the eleven areas with their upravne enote, (2) the delegation to Priloga IV; 28. člen (1) the grb občine rule; 58. člen 'Ta pravilnik začne veljati 4. julija 2011.' Accessed 2026-08-02"
|
|
49
|
+
- "https://www.uradni-list.si/files/RS_-2011-048-02292-OB~P004-0000.PDF # PRILOGA IV, 'REGISTRACIJSKA OBMOČJA — Seznam oznak registracijskih območij', the eleven code letters, read from the gazette PDF. Accessed 2026-08-02"
|
|
50
|
+
- "https://www.uradni-list.si/glasilo-uradni-list-rs/vsebina/2004-01-1253/pravilnik-o-registrskih-tablicah-motornih-in-priklopnih-vozil # Uradni list RS, št. 29/2004 z dne 26. 3. 2004, 22. člen (1) — the arms bind to the owner's residence AT PLATE ISSUE. Accessed 2026-08-02"
|
|
51
|
+
period: { start: 2011 }
|
|
52
|
+
period_evidence: enacted-commencement
|
|
53
|
+
period_note: >-
|
|
54
|
+
2011 is the commencement of the instrument these rows are printed in
|
|
55
|
+
(58. člen: "Ta pravilnik začne veljati 4. julija 2011."), not the age of the
|
|
56
|
+
codes. The ELEVEN-AREA system is much older — the 2006 predecessor
|
|
57
|
+
(Uradni list RS, št. 83/06, 3. člen) lists the same eleven areas with the
|
|
58
|
+
same upravne enote — and the two-letter codes themselves go back to the first
|
|
59
|
+
independent-Slovenia instrument (Uradni list RS, št. 5/92, 14. člen, whose
|
|
60
|
+
own seznam was not fetched in this pass). Per-code start dates are therefore
|
|
61
|
+
a RECORDED GAP, and 1992-era codes withdrawn since would not appear here.
|
|
62
|
+
maximal_munch: false
|
|
63
|
+
maximal_munch_note: >-
|
|
64
|
+
Not needed. Slovenian area codes are all exactly two letters (Priloga IV has
|
|
65
|
+
no one-letter entry), and 30. člen separates the area code from the serial by
|
|
66
|
+
a shield rather than by ambiguity. The prefix is the first two characters,
|
|
67
|
+
full stop — unlike Austria, where the split is genuinely ambiguous.
|
|
68
|
+
collisions:
|
|
69
|
+
- "KR (Kranj) vs KK (Krško) vs KP (Koper) — three K- codes, no overlap, listed only because they are the set most often mistyped for one another."
|
|
70
|
+
- "MV is NOT an area code. It is the fixed prefix of the starodobno (historic) plate, 40. člen: 'nato sledi oznaka za starodobna vozila »MV«'. A parse API must not look it up here."
|
|
71
|
+
- "PR is NOT an area code either. It is the red 'preskušnja' field on a test plate, 41. člen (2), and it sits AFTER the area code rather than replacing it."
|
|
72
|
+
- "CMD / CD / CC / M are activity codes on foreign-mission plates (39. člen (2)) and REPLACE the area code entirely; those plates carry no arms at all (28. člen (2))."
|
|
73
|
+
|
|
74
|
+
# ---------------------------------------------------------------------------
|
|
75
|
+
# The eleven areas. `upravne_enote` is the list from 29. člen (1) verbatim;
|
|
76
|
+
# each one's SEAT MUNICIPALITY supplies one distinct coat of arms under
|
|
77
|
+
# 28. člen (1), which is why this list is the arms key and not just trivia.
|
|
78
|
+
# ---------------------------------------------------------------------------
|
|
79
|
+
codes:
|
|
80
|
+
- code: CE
|
|
81
|
+
region: "Celje"
|
|
82
|
+
priloga_iv_no: 1
|
|
83
|
+
upravne_enote: ["Celje", "Laško", "Mozirje", "Slovenske Konjice", "Šentjur pri Celju", "Šmarje pri Jelšah", "Velenje", "Žalec"]
|
|
84
|
+
- code: KP
|
|
85
|
+
region: "Koper"
|
|
86
|
+
priloga_iv_no: 2
|
|
87
|
+
upravne_enote: ["Izola", "Koper", "Piran", "Sežana", "Ilirska Bistrica"]
|
|
88
|
+
- code: KR
|
|
89
|
+
region: "Kranj"
|
|
90
|
+
priloga_iv_no: 3
|
|
91
|
+
upravne_enote: ["Jesenice", "Kranj", "Radovljica", "Škofja Loka", "Tržič"]
|
|
92
|
+
- code: KK
|
|
93
|
+
region: "Krško"
|
|
94
|
+
priloga_iv_no: 4
|
|
95
|
+
upravne_enote: ["Brežice", "Krško", "Sevnica"]
|
|
96
|
+
- code: LJ
|
|
97
|
+
region: "Ljubljana"
|
|
98
|
+
priloga_iv_no: 5
|
|
99
|
+
upravne_enote: ["Domžale", "Grosuplje", "Hrastnik", "Kamnik", "Kočevje", "Litija", "Ljubljana", "Logatec", "Ribnica", "Trbovlje", "Vrhnika", "Zagorje ob Savi", "Cerknica"]
|
|
100
|
+
- code: MB
|
|
101
|
+
region: "Maribor"
|
|
102
|
+
priloga_iv_no: 6
|
|
103
|
+
upravne_enote: ["Lenart", "Maribor", "Ormož", "Pesnica", "Ptuj", "Ruše", "Slovenska Bistrica"]
|
|
104
|
+
- code: MS
|
|
105
|
+
region: "Murska Sobota"
|
|
106
|
+
priloga_iv_no: 7
|
|
107
|
+
upravne_enote: ["Gornja Radgona", "Lendava", "Ljutomer", "Murska Sobota"]
|
|
108
|
+
- code: GO
|
|
109
|
+
region: "Nova Gorica"
|
|
110
|
+
priloga_iv_no: 8
|
|
111
|
+
upravne_enote: ["Ajdovščina", "Idrija", "Nova Gorica", "Tolmin"]
|
|
112
|
+
- code: NM
|
|
113
|
+
region: "Novo mesto"
|
|
114
|
+
priloga_iv_no: 9
|
|
115
|
+
upravne_enote: ["Črnomelj", "Metlika", "Novo mesto", "Trebnje"]
|
|
116
|
+
- code: PO
|
|
117
|
+
region: "Postojna"
|
|
118
|
+
priloga_iv_no: 10
|
|
119
|
+
upravne_enote: ["Postojna"]
|
|
120
|
+
- code: SG
|
|
121
|
+
region: "Slovenj Gradec"
|
|
122
|
+
priloga_iv_no: 11
|
|
123
|
+
upravne_enote: ["Dravograd", "Radlje ob Dravi", "Ravne na Koroškem", "Slovenj Gradec"]
|