vehicles 0.6.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +164 -0
  3. data/CHANGELOG.md +274 -0
  4. data/README.md +55 -10
  5. data/data/PROVENANCE-vehicles.md +12 -0
  6. data/data/plates/PROVENANCE.md +5 -4
  7. data/data/plates/_decode/at-districts.yml +287 -0
  8. data/data/plates/_decode/ch-cantons.yml +110 -0
  9. data/data/plates/_decode/cn-issuing-offices.yml +463 -0
  10. data/data/plates/_decode/cn-provinces.yml +614 -0
  11. data/data/plates/_decode/cz-kraj.yml +159 -0
  12. data/data/plates/_decode/dk-serial-blocks.yml +327 -0
  13. data/data/plates/_decode/fr-departements.yml +191 -0
  14. data/data/plates/_decode/gb-age-identifiers.yml +170 -0
  15. data/data/plates/_decode/gb-memory-tags.yml +202 -0
  16. data/data/plates/_decode/gr-prefectures.yml +1408 -0
  17. data/data/plates/_decode/hr-cities.yml +315 -0
  18. data/data/plates/_decode/ie-counties.yml +227 -0
  19. data/data/plates/_decode/in-state-codes.yml +169 -0
  20. data/data/plates/_decode/is-districts-1938.yml +116 -0
  21. data/data/plates/_decode/it-provinces.yml +348 -0
  22. data/data/plates/_decode/jp-office-marks.yml +960 -0
  23. data/data/plates/_decode/jp-use-marks.yml +205 -0
  24. data/data/plates/_decode/kr-authority-marks.yml +146 -0
  25. data/data/plates/_decode/kr-use-syllables.yml +194 -0
  26. data/data/plates/_decode/lu-series-order.yml +638 -0
  27. data/data/plates/_decode/mx-entity-series.yml +380 -0
  28. data/data/plates/_decode/my-index-marks.yml +271 -0
  29. data/data/plates/_decode/no-counties-1913.yml +148 -0
  30. data/data/plates/_decode/no-districts.yml +901 -0
  31. data/data/plates/_decode/pl-powiats.yml +567 -0
  32. data/data/plates/_decode/pt-trailer-services.yml +96 -0
  33. data/data/plates/_decode/ro-counties.yml +213 -0
  34. data/data/plates/_decode/se-diplomatic.yml +220 -0
  35. data/data/plates/_decode/si-regions.yml +123 -0
  36. data/data/plates/_decode/sk-districts.yml +314 -0
  37. data/data/plates/_decode/th-registration-elements.yml +208 -0
  38. data/data/plates/_decode/ua-regions.yml +393 -0
  39. data/data/plates/_decode/za-licence-marks.yml +215 -0
  40. data/data/plates/_meta/classes.yml +1 -0
  41. data/data/plates/_meta/separators.yml +102 -0
  42. data/data/plates/ad.yml +961 -0
  43. data/data/plates/ar.yml +762 -0
  44. data/data/plates/at.yml +1424 -0
  45. data/data/plates/au-act.yml +472 -0
  46. data/data/plates/au-nsw.yml +282 -0
  47. data/data/plates/au-nt.yml +431 -0
  48. data/data/plates/au-qld.yml +272 -0
  49. data/data/plates/au-sa.yml +248 -0
  50. data/data/plates/au-tas.yml +302 -0
  51. data/data/plates/au-vic.yml +215 -0
  52. data/data/plates/au-wa.yml +309 -0
  53. data/data/plates/be.yml +1840 -0
  54. data/data/plates/br.yml +1152 -0
  55. data/data/plates/ca-ab.yml +430 -0
  56. data/data/plates/ca-bc.yml +697 -0
  57. data/data/plates/ca-mb.yml +499 -0
  58. data/data/plates/ca-nb.yml +537 -0
  59. data/data/plates/ca-nl.yml +743 -0
  60. data/data/plates/ca-ns.yml +808 -0
  61. data/data/plates/ca-nt.yml +610 -0
  62. data/data/plates/ca-nu.yml +280 -0
  63. data/data/plates/ca-on.yml +881 -0
  64. data/data/plates/ca-pe.yml +592 -0
  65. data/data/plates/ca-qc.yml +1036 -0
  66. data/data/plates/ca-sk.yml +256 -0
  67. data/data/plates/ca-yt.yml +656 -0
  68. data/data/plates/ch.yml +1273 -0
  69. data/data/plates/cn.yml +1431 -0
  70. data/data/plates/cy.yml +688 -0
  71. data/data/plates/cz.yml +1179 -0
  72. data/data/plates/de.yml +553 -118
  73. data/data/plates/dk.yml +1647 -0
  74. data/data/plates/ee.yml +1275 -0
  75. data/data/plates/es.yml +228 -32
  76. data/data/plates/fi.yml +1271 -0
  77. data/data/plates/fr.yml +1265 -0
  78. data/data/plates/gb.yml +1188 -0
  79. data/data/plates/gr.yml +721 -0
  80. data/data/plates/hr.yml +860 -0
  81. data/data/plates/hu.yml +959 -0
  82. data/data/plates/ie.yml +775 -0
  83. data/data/plates/in.yml +1172 -0
  84. data/data/plates/is.yml +667 -0
  85. data/data/plates/it.yml +1317 -0
  86. data/data/plates/jp.yml +3650 -0
  87. data/data/plates/kr.yml +1375 -0
  88. data/data/plates/li.yml +1010 -0
  89. data/data/plates/lt.yml +879 -0
  90. data/data/plates/lu.yml +842 -0
  91. data/data/plates/lv.yml +924 -0
  92. data/data/plates/mc.yml +1024 -0
  93. data/data/plates/mt.yml +854 -0
  94. data/data/plates/mx.yml +1372 -0
  95. data/data/plates/my.yml +685 -0
  96. data/data/plates/nl.yml +44 -0
  97. data/data/plates/no.yml +1018 -0
  98. data/data/plates/nz.yml +1699 -0
  99. data/data/plates/pl.yml +1296 -0
  100. data/data/plates/pt.yml +847 -0
  101. data/data/plates/ro.yml +785 -0
  102. data/data/plates/se.yml +1091 -0
  103. data/data/plates/si.yml +1105 -0
  104. data/data/plates/sk.yml +1439 -0
  105. data/data/plates/sm.yml +1119 -0
  106. data/data/plates/th.yml +1150 -0
  107. data/data/plates/ua.yml +1672 -0
  108. data/data/plates/us-ak.yml +763 -0
  109. data/data/plates/us-al.yml +457 -0
  110. data/data/plates/us-ar.yml +427 -0
  111. data/data/plates/us-as.yml +454 -0
  112. data/data/plates/us-az.yml +430 -0
  113. data/data/plates/us-ca.yml +892 -0
  114. data/data/plates/us-co.yml +452 -0
  115. data/data/plates/us-ct.yml +427 -0
  116. data/data/plates/us-dc.yml +614 -0
  117. data/data/plates/us-de.yml +551 -0
  118. data/data/plates/us-fl.yml +319 -96
  119. data/data/plates/us-ga.yml +644 -0
  120. data/data/plates/us-gu.yml +658 -0
  121. data/data/plates/us-hi.yml +585 -0
  122. data/data/plates/us-ia.yml +438 -0
  123. data/data/plates/us-id.yml +531 -0
  124. data/data/plates/us-il.yml +516 -0
  125. data/data/plates/us-in.yml +324 -0
  126. data/data/plates/us-ks.yml +351 -0
  127. data/data/plates/us-ky.yml +770 -0
  128. data/data/plates/us-la.yml +568 -0
  129. data/data/plates/us-ma.yml +379 -0
  130. data/data/plates/us-md.yml +536 -0
  131. data/data/plates/us-me.yml +445 -0
  132. data/data/plates/us-mi.yml +408 -0
  133. data/data/plates/us-mn.yml +411 -0
  134. data/data/plates/us-mo.yml +356 -0
  135. data/data/plates/us-mp.yml +402 -0
  136. data/data/plates/us-ms.yml +432 -0
  137. data/data/plates/us-mt.yml +619 -0
  138. data/data/plates/us-nc.yml +602 -0
  139. data/data/plates/us-nd.yml +419 -0
  140. data/data/plates/us-ne.yml +483 -0
  141. data/data/plates/us-nh.yml +394 -0
  142. data/data/plates/us-nj.yml +547 -0
  143. data/data/plates/us-nm.yml +574 -0
  144. data/data/plates/us-nv.yml +655 -0
  145. data/data/plates/us-ny.yml +592 -0
  146. data/data/plates/us-oh.yml +404 -0
  147. data/data/plates/us-ok.yml +513 -0
  148. data/data/plates/us-or.yml +392 -0
  149. data/data/plates/us-pa.yml +506 -0
  150. data/data/plates/us-pr.yml +507 -0
  151. data/data/plates/us-ri.yml +445 -0
  152. data/data/plates/us-sc.yml +605 -0
  153. data/data/plates/us-sd.yml +428 -0
  154. data/data/plates/us-tn.yml +471 -0
  155. data/data/plates/us-tx.yml +535 -0
  156. data/data/plates/us-ut.yml +384 -0
  157. data/data/plates/us-va.yml +567 -0
  158. data/data/plates/us-vi.yml +489 -0
  159. data/data/plates/us-vt.yml +458 -0
  160. data/data/plates/us-wa.yml +484 -0
  161. data/data/plates/us-wi.yml +509 -0
  162. data/data/plates/us-wv.yml +446 -0
  163. data/data/plates/us-wy.yml +523 -0
  164. data/data/plates/va.yml +604 -0
  165. data/data/plates/za.yml +1141 -0
  166. data/data/vehicles.json +160653 -105090
  167. data/lib/vehicles/configuration.rb +17 -3
  168. data/lib/vehicles/dataset.rb +73 -18
  169. data/lib/vehicles/fuzzy.rb +115 -0
  170. data/lib/vehicles/http.rb +48 -0
  171. data/lib/vehicles/make.rb +36 -6
  172. data/lib/vehicles/mcp_server.rb +5 -5
  173. data/lib/vehicles/model.rb +21 -2
  174. data/lib/vehicles/plates/series.rb +172 -18
  175. data/lib/vehicles/plates/template_fill.rb +188 -0
  176. data/lib/vehicles/plates/templates.rb +162 -0
  177. data/lib/vehicles/plates.rb +12 -0
  178. data/lib/vehicles/providers/hosted_provider.rb +28 -55
  179. data/lib/vehicles/validators/vehicle_make_validator.rb +3 -1
  180. data/lib/vehicles/validators/vehicle_model_validator.rb +1 -1
  181. data/lib/vehicles/version.rb +1 -1
  182. data/lib/vehicles.rb +32 -16
  183. data/rakelib/data_refresh.rake +109 -0
  184. data/rakelib/plates_refresh.rake +29 -0
  185. data/sig/vehicles.rbs +18 -0
  186. metadata +164 -2
@@ -0,0 +1,1152 @@
1
+ # plates/br.yml — Brazil (PRD-PLATES gate L3, DRAFT for human verification).
2
+ #
3
+ # PASS 2 (2026-08-02, second Opus researcher over the same jurisdiction). This
4
+ # file supersedes a pass-1 draft, preserved beside it as `pass1/br.pass1.yml`
5
+ # with its own dossier. Pass 1 established the instrument chain and is where
6
+ # most of the research below comes from; pass 2 re-read every instrument text
7
+ # and changed five things, each of which is argued at the point of change:
8
+ #
9
+ # 1. LLLNLNN IS A 2018 ARRANGEMENT, NOT A 2019 ONE. Res. CONTRAN 741/2018
10
+ # (17-09-2018) Anexo III item 1 spells it, together with the pre-Mercosul
11
+ # shape LLLNNNN and the whole 0→A…9→J conversion table. Pass 1 credited
12
+ # Res. 780/2019 with the first appearance. Corrected on the series and in
13
+ # the chain below.
14
+ # 2. THE NATIVE-ALLOCATION `regex_strict` [K-Z] IS WITHDRAWN. It was an
15
+ # entailment from Res. 969/2022 Anexo II item 2, and Res. 741/2018 Anexo
16
+ # III item 3 contradicts it in terms. See fact 2.
17
+ # 3. NEW SERIES `br-mercosul-uf-brasao-2018` — the nine-month 2018 design
18
+ # that carried the state flag, a coat of arms and the municipality name,
19
+ # created by Res. 729/2018 Anexo I items 1.7-1.8.1 and killed by
20
+ # Res. 748/2018 art. 4. The only entry here with an instrument at both
21
+ # ends of its period.
22
+ # 4. PNU DIPLOMATIC STARTS 2008, NOT 1990. Res. 45/98's colour table has no
23
+ # diplomatic row at all; the blue rows and the CMD/CD/CC/OI/ADM/CI codes
24
+ # begin with Res. 231/2007, in force 1 January 2008. Draft id
25
+ # `br-pnu-diplomatic-1990` retired for `br-pnu-diplomatic-2008`.
26
+ # 5. EVERY PNU COLOUR IS RAL-SOURCED, not observed. Res. 45/98 Anexo item 11
27
+ # publishes the full six-colour RAL table (7001/3000/6016/9010/5019/9011),
28
+ # which pass 1 read only in its truncated Res. 231/2007 form.
29
+ #
30
+ # EVERY format, dimension, colour, class and period claim in this file comes
31
+ # from an instrument whose TEXT WAS FETCHED AND READ, in this order of
32
+ # authority:
33
+ #
34
+ # * Lei nº 9.503, de 23 de setembro de 1997 (Código de Trânsito Brasileiro,
35
+ # CTB), art. 115 — the ENABLING STATUTE. It delegates the whole subject to
36
+ # CONTRAN in one sentence, verbatim: "O veículo será identificado
37
+ # externamente por meio de placas dianteira e traseira, sendo esta lacrada
38
+ # em sua estrutura, obedecidas as especificações e modelos estabelecidos
39
+ # pelo CONTRAN." (Planalto consolidated text, accessed 2026-08-02.)
40
+ # * MERCOSUL/GMC/RES. Nº 33/14, "Patente e Sistema de Consultas sobre
41
+ # Veículos do MERCOSUL" — the supranational instrument Brazil implements.
42
+ # * Resolução CONTRAN nº 969, de 20 de junho de 2022 (DOU 24/06/2022,
43
+ # Edição 118, Seção 1, p. 57; in force 1 July 2022) — THE CURRENT
44
+ # BRAZILIAN INSTRUMENT. Its art. 64 revoked BOTH the Mercosul resolution
45
+ # (nº 780/2019) AND the pre-Mercosul plate standard (nº 231/2007), so one
46
+ # instrument now governs both plate systems still on Brazilian roads.
47
+ # * Resolução CONTRAN nº 729, de 6 de março de 2018 (DOU 08/03/2018) and its
48
+ # amendment chain (733/2018, 741/2018, 745/2018, 748/2018, 770/2018) —
49
+ # where the Mercosul TRANSITION DATES live, and nowhere else.
50
+ # * Resolução CONTRAN nº 741, de 17 de setembro de 2018 — the FIRST
51
+ # instrument to spell the letter/number ARRANGEMENT "LLLNLNN" and to
52
+ # publish the PNU→PIV character-conversion table, both in its Anexo III
53
+ # ("REGRA DE TRANSIÇÃO PARA EMPLACAMENTOS").
54
+ # * Resolução CONTRAN nº 780, de 26 de junho de 2019 (DOU 28/06/2019) — the
55
+ # consolidation that re-enacted both, unchanged, as its Anexo I item 1.2
56
+ # and Anexo II.
57
+ # * Resolução CONTRAN nº 231, de 15 de março de 2007 (consolidated text with
58
+ # the amendments made by nº 241/07, 309/09 and 372/11) and Resolução
59
+ # CONTRAN nº 45/98 — the PRE-MERCOSUL standard, i.e. the one-series-back
60
+ # layer of this file.
61
+ #
62
+ # SIX STRUCTURAL FACTS THAT SHAPE THIS FILE
63
+ #
64
+ # 1. BRAZIL RUNS TWO PLATE SYSTEMS SIMULTANEOUSLY, AND WILL FOR DECADES.
65
+ # Res. 969/2022 art. 57, verbatim: "Os veículos em circulação que utilizem
66
+ # a PNU poderão circular até o seu sucateamento sem necessidade de
67
+ # substituição das placas e, a qualquer tempo, optar voluntariamente pelo
68
+ # novo modelo de PIV de que trata esta Resolução". PNU = "Placa Nacional
69
+ # Única", the 1990-generation plate, defined in the same Resolution
70
+ # (art. 2 § 3) as "uma sequência de três caracteres alfabéticos e quatro
71
+ # caracteres numéricos no padrão 'AAA-1111'". So the one-back series is
72
+ # not history: it is a large, legally current part of the fleet that is
73
+ # simply NOT ISSUED any more. `period.end` on those series is an ISSUANCE
74
+ # end, never a validity end; every such series says so in its notes.
75
+ #
76
+ # 2. THE FIFTH CHARACTER IS THE SINGLE BEST ERA SIGNAL IN THE AMERICAS.
77
+ # Res. 969/2022 Anexo II, item 1, prescribes the PNU→PIV conversion as a
78
+ # substitution of "o antepenúltimo caractere, de número para letra"
79
+ # (0→A, 1→B … 9→J), "Ex.: A placa anterior ABC1234 será substituída pela
80
+ # nova placa com o padrão alfanumérico ABC1C34." Item 2 then closes the
81
+ # loop, verbatim: "A faixa de letras de 'A' a 'J' será utilizada apenas
82
+ # para a conversão da PNU para o novo sistema de PIV constante desta
83
+ # Resolução, de forma a permitir a convivência entre ambos os modelos e
84
+ # possibilitar a consulta por ambos os critérios de placas."
85
+ # Consequence, and it is a strong one IN ONE DIRECTION ONLY: a CONVERTED
86
+ # plate necessarily carries A–J at position 5, because the table says so and
87
+ # leaves no other value; so from a converted plate the original PNU is
88
+ # mechanically recoverable as plate[0,4] + (letter − 'A') + plate[5,2].
89
+ # `br-mercosul-converted-2018` and `br-mercosul-motorcycle-converted-2018`
90
+ # carry that sourced grammar as their `regex_strict`.
91
+ #
92
+ # THE CONVERSE IS *NOT* SOURCED, AND PASS 2 REMOVED IT. An earlier draft of
93
+ # this file asserted `regex_strict: \A[A-Z]{3}\d[K-Z]\d{2}\z` on the two
94
+ # NATIVE series, reading item 2's "apenas para a conversão" as reserving
95
+ # A–J away from native allocations. That reading is contradicted by the
96
+ # instrument that introduced the table. Res. CONTRAN 741/2018, Anexo III
97
+ # item 3, verbatim: "Durante todo o período de transição será utilizada
98
+ # apenas a faixa de letras de 'A' a 'J' para o antepenúltimo caractere, de
99
+ # forma a permitir a conversão dos emplacamentos e a convivência entre ambos
100
+ # os modelos" — i.e. from September 2018 EVERY Brazilian Mercosul plate,
101
+ # native or converted, took A–J at position 5. Res. 780/2019 and Res.
102
+ # 969/2022 narrowed the sentence to conversions without ever enacting a K–Z
103
+ # rule for natives, and the observed per-UF allocation blocks still run
104
+ # 0A01→9J99 (secondary). The two readings are reconciled by the ALLOCATION,
105
+ # not by the alphabet: native Mercosul combinations are issued out of FRESH
106
+ # three-letter blocks that the PNU never used, so no collision with a
107
+ # converted plate is possible even though both use A–J.
108
+ # PRD-PLATES § 5.3 forbids averaging a disagreement, so the native series
109
+ # carry NO `regex_strict` and the whole question is recorded here, in
110
+ # `common.fifth_character_rule`, and as verifier target #1 in the dossier.
111
+ # NET EFFECT FOR A CONSUMER: an A–J fifth character is NOT proof of
112
+ # conversion; a fifth character outside A–J, if one is ever observed, IS
113
+ # proof of a native allocation.
114
+ #
115
+ # 3. THE MERCOSUL PLATE DELETED THE ONLY NON-COLOUR CATEGORY MARKER, SO SIX
116
+ # LEGAL CATEGORIES COLLAPSED INTO COLOUR-ONLY VARIANTS. Under the PNU,
117
+ # Res. 231/2007 art. 1 § 1 required removable "tarjetas" carrying "a sigla
118
+ # identificadora da Unidade da Federação e o nome do Município de registro
119
+ # do veículo", with § 2 substituting BRASIL / the state name / the
120
+ # diplomatic codes (CMD, CD, CC, OI, ADM, CI) for official and diplomatic
121
+ # vehicles. The Mercosul plate has no tarjeta at all: Res. 969/2022
122
+ # Anexo I Tabela III distinguishes Particular, Comercial (Aluguel e
123
+ # Aprendizagem), Oficial e Representação, Diplomático/Consular, Especiais
124
+ # and Coleção by CHARACTER COLOUR ALONE, on an identical white plate with
125
+ # an identical LLLNLNN combination. PRD-PLATES § 2.3 is explicit that a
126
+ # colour-only variant of the same format+period is a SUB-ENTRY, so those
127
+ # six live in `variants:` with a `class:` flag each — while the PNU-era
128
+ # official and diplomatic plates, whose tarjeta content differed, are
129
+ # their own series. `common.class_map` below is the index of where each
130
+ # legal category lives, because a class-keyed consumer needs one.
131
+ #
132
+ # 4. THERE IS NO GEOGRAPHY IN A BRAZILIAN SERIAL — TODAY IT IS RANDOM BY
133
+ # INSTRUMENT. Res. 969/2022 Anexo I item 1.2, verbatim: "O padrão de
134
+ # estampagem é composto de 7 (sete) caracteres alfanuméricos, em alto
135
+ # relevo, na sequência LLLNLNN, com espaçamento equidistante e combinação
136
+ # aleatória, distribuída e controlada pelo órgão máximo executivo de
137
+ # trânsito da União." Two things follow. (a) "espaçamento equidistante" is
138
+ # why the current pattern carries NO separator: the seven characters are
139
+ # evenly spaced, there is no group. (b) "combinação aleatória" is why
140
+ # `region_encoding: none` is a sourced claim and not an omission.
141
+ # Under the PNU the three-letter group WAS allocated per state, but by
142
+ # delegation, not by instrument: Res. 231/2007 art. 4, verbatim, "O Órgão
143
+ # Maximo Executivo de Transito da União estabelecerá normas técnicas para
144
+ # a distribuição e controle das series alfanuméricas". The resulting
145
+ # UF→letter-range table is administrative and was NOT found published;
146
+ # it is recorded as a gap, not guessed. What the pre-2018 plate showed of
147
+ # geography, it showed IN WORDS on the tarjeta.
148
+ #
149
+ # 5. PERIODS ARE INSTRUMENT-DATED, AND THE ONE SOFT YEAR IS NAMED AS SOFT.
150
+ # The Mercosul dates are primary and unambiguous: Res. 729/2018 art. 8 § 3
151
+ # ("até 1º de setembro de 2018", first registrations / transfers /
152
+ # replacements) → Res. 748/2018 art. 2, a per-state cronograma running from
153
+ # Rio de Janeiro ("Até 3 de dezembro de 2018") to the last thirteen states
154
+ # ("Até 31 de dezembro de 2018") → Res. 770/2018 art. 1 ("até 30 de junho
155
+ # de 2019") → Res. 780/2019 art. 21 ("deverá ser implementada pelos DETRAN
156
+ # até o dia 31 de janeiro de 2020, sendo exigida nos casos de primeiro
157
+ # emplacamento do veículo"). The PNU's 1990 start is NOT of that quality:
158
+ # the instrument is Resolução CONTRAN nº 742, de 31 de outubro de 1989
159
+ # ("Dispõe sobre sistema de placas de identificação de veículos", revoked
160
+ # by Res. 754/91), whose existence, date and title come from DENATRAN's own
161
+ # catalogue *100 anos de Legislação de Trânsito no Brasil* (2010) and whose
162
+ # TEXT COULD NOT BE RETRIEVED. It is recorded on the series, in terms.
163
+ #
164
+ # 6. TWO KINDS OF BRAZILIAN PLATE ARE DELIBERATELY NOT SERIES HERE, because
165
+ # they carry no alphanumeric combination at all and a series without a
166
+ # serial is not a series: the CTB art. 115 § 2 green-and-yellow plates of
167
+ # the President, Vice-President and the other named authorities, and the
168
+ # CTB art. 115 § 3 / Res. 969/2022 arts. 26-30 bronze representation
169
+ # plates (Anexo I figures 9 and 10: "Placa em Bronze / Letras em
170
+ # alto-relevo/dourada / Fundo Preto / Dimensões: 35 cm x 16 cm / Brasão",
171
+ # lettered with the office — GOVERNADOR DO ESTADO, COMANDANTE DA MARINHA,
172
+ # OFICIAL GENERAL). They are recorded in `special_plates:` instead.
173
+ #
174
+ # REGEX POLICY (identical to plates/gb.yml, plates/de.yml, plates/nl.yml):
175
+ # `format.regex` is the LINT-ROUND-TRIPPABLE regex — the lint generates
176
+ # serials from `format.pattern` (L → any A-Z, 9 → any 0-9) and requires the
177
+ # regex to accept all of them, so `regex` can never be narrower than the
178
+ # pattern's own alphabet. `format.regex_strict` carries the tighter, sourced
179
+ # form, which here is only ever the fifth-character range of Anexo II item 2.
180
+ #
181
+ # SEPARATOR NOTE (PRD-PLATES § 2.6): the CURRENT plate prints no separator
182
+ # ("espaçamento equidistante", above) and its pattern has none. The PNU does:
183
+ # Res. 969/2022 art. 2 § 3 writes the old standard as "AAA-1111", while the
184
+ # instrument that actually prescribed it (Res. 231/2007 art. 1) describes two
185
+ # groups — "o primeiro grupo composto por 3 (três) ... e o segundo grupo
186
+ # composto por 4 (quatro)" — and prescribes no separator GLYPH. The PNU
187
+ # regexes therefore spell the gap as the sanctioned separator-only class
188
+ # `[- ]?` (PRD-PLATES § 2.8, the es-consular-cc-1999 precedent), and
189
+ # `pattern` shows the canonical printed form `LLL-9999`.
190
+ jurisdiction: br
191
+ authority:
192
+ name: SENATRAN (Secretaria Nacional de Trânsito), órgão máximo executivo de trânsito da União, Ministério dos Transportes; normative authority CONTRAN (Conselho Nacional de Trânsito)
193
+ url: "https://www.gov.br/transportes/pt-br/assuntos/transito"
194
+ contran_url: "https://www.gov.br/transportes/pt-br/assuntos/transito/contran"
195
+ note: >-
196
+ Plates are SPECIFIED nationally by CONTRAN, ISSUED by the 27 state/DF
197
+ DETRANs, and the combination pool is "distribuída e controlada pelo órgão
198
+ máximo executivo de trânsito da União" (Res. 969/2022 Anexo I 1.2).
199
+ Brazil is federated for issuance but NOT for format, which is why this is
200
+ one national file and not 27 (contrast us-*.yml, where each state legislates
201
+ its own format).
202
+ binding: vehicle
203
+ binding_note: >-
204
+ CTB art. 115 § 1, verbatim: "Os caracteres das placas serão individualizados
205
+ para cada veículo e o acompanharão até a baixa do registro, sendo vedado seu
206
+ reaproveitamento." The mark belongs to the vehicle for its whole life and may
207
+ never be recycled onto another — the strongest statutory statement of
208
+ vehicle-binding in this dataset. Res. 969/2022 art. 57 § 1 preserves it
209
+ across the Mercosul conversion: the old combination is kept in the record and
210
+ printed in the CRLV-e field "placa anterior", and both combinations remain
211
+ queryable.
212
+
213
+ instrument:
214
+ current:
215
+ citation: "Resolução CONTRAN nº 969, de 20 de junho de 2022 — 'Dispõe sobre o sistema de Placas de Identificação de Veículos (PIV) registrados no território nacional'"
216
+ made: "2022-06-20"
217
+ published: "2022-06-24" # DOU Edição 118, Seção 1, p. 57
218
+ in_force: "2022-07-01" # art. 65
219
+ made_under: "Lei nº 9.503/1997 (CTB), art. 12, incisos I e X; art. 115"
220
+ revokes:
221
+ - "Resolução CONTRAN nº 231, de 15 de março de 2007 (the PNU standard)"
222
+ - "Resolução CONTRAN nº 780, de 26 de junho de 2019 (the Mercosul standard it replaces)"
223
+ - "Resoluções nº 493/1975, 793/1994, 32/1998, 60/1998, 88/1999, 241/2007, 275/2008, 286/2008, 309/2009, 342/2010, 372/2011, 527/2015, 670/2017, 742/2018, 786/2020, 792/2020, 887/2021; Deliberação CONTRAN nº 260/2022"
224
+ annexes: "Anexo I (specifications), Anexo II (conversion table), Anexo III (accreditation) — published separately per art. 63; fetched from the SENATRAN site"
225
+ sources:
226
+ - "https://www.in.gov.br/en/web/dou/-/resolucao-contran-n-969-de-20-de-junho-de-2022-410033795 # DOU text: arts. 1-65, revocation list, in-force date"
227
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao9692022.pdf # same text, SENATRAN PDF"
228
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao9692022anexos.pdf # Anexos I-III: Tabelas I-VI, Figuras 1-10"
229
+ supranational:
230
+ citation: "MERCOSUL/GMC/RES. Nº 33/14 — 'Patente e Sistema de Consultas sobre Veículos do MERCOSUL'"
231
+ key_articles: >-
232
+ Art. 1: the Patente MERCOSUL is mandatory in all States Parties for
233
+ vehicles registered for the first time from 1 January 2016. Art. 2: the
234
+ distribution of the alphanumeric characters belongs to each State Party
235
+ and must not coincide with any other State Party's. Annex: seven
236
+ characters, white background, FE Engschrift at 65 mm (vehicles) /
237
+ 53 mm (motorcycles), 400x130 and 200x170 mm, blue Pantone 286 band
238
+ 30x390 / 30x196 mm, and the same six-row colour-by-use table Brazil
239
+ transposed verbatim.
240
+ amended_by: "MERCOSUL/GMC/RES. Nº 12/17"
241
+ text_status: >-
242
+ FETCHED as a scanned PDF with NO text layer; read by local OCR
243
+ (tesseract, English model, Portuguese source) — so its wording is
244
+ paraphrased here and never quoted as verbatim law. Every fact taken from
245
+ it is independently carried by the Brazilian instruments, which is why
246
+ nothing in this file depends on the OCR.
247
+ sources:
248
+ - "https://web.archive.org/web/20220220015017/https://www.cartillaciudadania.mercosur.int/oldAssets/uploads/54478_RES_033-2014_PT_Patente%20MERCOSUL.pdf # GMC 33/14 (PT), scanned"
249
+ - "https://web.archive.org/web/20220220015054/https://www.cartillaciudadania.mercosur.int/oldAssets/uploads/65491_RES_012-2017_PT_Placa%20MERCOSUL-ModifRes.33-14.pdf # GMC 12/17 (PT), scanned"
250
+ transition_chain:
251
+ - { citation: "Resolução CONTRAN nº 510, de 27 de novembro de 2014", holds: "first Brazilian adoption of the Mercosul plate; art. 1 § 2 c) 'conter 7 (sete) caracteres alfanuméricos estampados em alto relevo, com combinação aleatória, a ser fornecida e controlada pelo DENATRAN' — SEVEN CHARACTERS BUT NO ARRANGEMENT; art. 6: all vehicles registered from 1 January 2016, states free to anticipate. The Anexo's sample combination is 'BRA0000', i.e. still the PNU shape.", source: "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao5102014.pdf" }
252
+ - { citation: "Resolução CONTRAN nº 729, de 6 de março de 2018 (DOU 08/03/2018)", holds: "the operative Mercosul system; art. 1 § 3 III still gives only '7 (sete) caracteres alfanuméricos ... com o último caractere obrigatoriamente numeral'; art. 8 § 3 sets the first mandatory date, 1 September 2018; art. 8 caput sets full-fleet implementation by 31 December 2023.", source: "https://www.in.gov.br/en/web/dou/-/resolucao-n-729-de-6-de-marco-de-2018-5755402" }
253
+ - { citation: "Resolução CONTRAN nº 733, de 10 de maio de 2018", holds: "stamping-company accreditation rules inserted into 729/2018.", source: "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7332018.pdf" }
254
+ - { citation: "Resolução CONTRAN nº 741, de 17 de setembro de 2018", holds: "PASS-2 CORRECTION — this is the FORMAT instrument, not merely a chip amendment. Arts. 1-2 insert the SINIAV chip / QR Code provisions into 729/2018 (art. 1 §§ 6-7); art. 3 inserts ANEXO III, 'REGRA DE TRANSIÇÃO PARA EMPLACAMENTOS', which is where the Brazilian Mercosul grammar first appears: item 1 'A placa MERCOSUL terá a seguinte disposição: LLLNLNN, onde L é letra e N é número'; item 2 names the old shape 'LLLNNNN'; item 3 puts every transition-period plate on A-J at the antepenultimate character; item 4 is the ten-row 0→A…9→J conversion table with the worked example 'um veículo com a placa ABC1234 tem equivalência no Padrão Mercosul de ABC1C34'. It carries NO DATES — the transition dates are in 729/2018 art. 8 as amended by 748/2018 and 770/2018 — which is what an earlier draft's note was reaching for, but the arrangement and the conversion table ARE here, ten months before Res. 780/2019.", source: "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7412018.pdf" }
255
+ - { citation: "Resolução CONTRAN nº 745, de 12 de novembro de 2018 — OR nº 742 of the same date", holds: "amends art. 1 § 4-A (the 15% size reduction). NUMBERING DISCREPANCY IN THE INSTRUMENTS THEMSELVES, recorded rather than resolved: Res. 748/2018 art. 1 cites it as 'Resolução CONTRAN nº 745, de 12 de novembro de 2018', while Res. 969/2022 art. 64 XV revokes 'nº 742, de 12 de novembro de 2018'. Neither text was fetched. Note also that a DIFFERENT Res. 742, of 31 October 1989, is the probable creator of the PNU — see br-pnu-standard-1990.", source: "cited, not fetched — discrepancy visible in the texts of Res. 748/2018 art. 1 and Res. 969/2022 art. 64 XV" }
256
+ - { citation: "Resolução CONTRAN nº 748, de 30 de novembro de 2018", holds: "replaces art. 8 caput with a PER-STATE CRONOGRAMA: Rio de Janeiro by 3 December 2018; AM, ES, GO, PE, RO by 10 December; BA, RN, RS by 17 December; AC, AL, MA, PR, PI by 24 December; AP, CE, DF, MT, MS, MG, PA, PB, RR, SC, SP, SE, TO by 31 December 2018. This is the primary evidence that Rio de Janeiro was the first state.", source: "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7482018.pdf" }
257
+ - { citation: "Resolução CONTRAN nº 770, de 20 de dezembro de 2018", holds: "replaces the cronograma with a single date, 30 June 2019.", source: "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7702018.pdf" }
258
+ - { citation: "Resolução CONTRAN nº 780, de 26 de junho de 2019 (DOU 28/06/2019)", holds: "FIRST instrument to spell the arrangement — Anexo I 1.2, 'na sequência LLLNLNN'; introduces the Anexo II conversion table; art. 21 sets DETRAN implementation by 31 January 2020 for first registrations; art. 22 lets PNU plates run to scrapping.", source: "https://www.in.gov.br/en/web/dou/-/resolucao-n-780-de-26-de-junho-de-2019-179414765" }
259
+ previous_standard:
260
+ citation: "Resolução CONTRAN nº 231, de 15 de março de 2007 (republished DOU 21/03/2007 Seção 1 p. 30), consolidated with Resoluções nº 241/2007, 309/2009 and 372/2011 — 'Estabelece o Sistema de Placas de Identificação de Veículos'"
261
+ in_force_from: "2008-01-01" # art. 11, as amended by Res. 241/07
262
+ revoked_by: "Resolução CONTRAN nº 969/2022 art. 64, VI"
263
+ predecessors: "Res. 45/98 (21 May 1998, itself revoking Res. 754/91, 755/91, 813/96 and 09/98); Res. 99/99 (extending the national re-plating deadline to 31 December 1999); and, before them, Res. 742/1989 — see the pnu series notes"
264
+ sources:
265
+ - "https://web.archive.org/web/20140815083608/http://www.denatran.gov.br/download/Consolidadas/cons231.pdf # DENATRAN consolidated text of Res. 231/2007 with 241/07, 309/09, 372/11"
266
+ - "https://web.archive.org/web/20070421095524/http://www.denatran.gov.br/download/Resolucoes/RESOLUCAO_231.pdf # original 2007 text as first published"
267
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao045_98.zip # Res. 45/98 (Word), art. 1 and the 1998-99 national re-plating"
268
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao099_99.doc # Res. 99/99: substitution deadline moved to 31 December 1999"
269
+ enabling_statute:
270
+ citation: "Lei nº 9.503, de 23 de setembro de 1997 (Código de Trânsito Brasileiro), art. 115"
271
+ source: "https://www.planalto.gov.br/ccivil_03/leis/l9503compilado.htm # art. 115 caput and §§ 1, 2, 3, 5, 6, 9; art. 12 I and X"
272
+ licence: >-
273
+ Brazilian official acts are outside copyright by statute — Lei nº 9.610/1998
274
+ art. 8º, IV excludes "os textos de tratados ou convenções, leis, decretos,
275
+ regulamentos, decisões judiciais e demais atos oficiais" from protection.
276
+ CONTRAN resolutions are atos oficiais. NOTE the one exception encountered:
277
+ DENATRAN's compilation *100 anos de Legislação de Trânsito no Brasil*
278
+ (2010) asserts "É totalmente proibida a reprodução total ou parcial deste
279
+ material" — only the official ACT titles and dates are taken from it here,
280
+ never its editorial text.
281
+
282
+ # ---------------------------------------------------------------------------
283
+ # Jurisdiction-wide facts, cited once and referenced per series.
284
+ # ---------------------------------------------------------------------------
285
+ common:
286
+ serial_grammar_current:
287
+ arrangement: LLLNLNN
288
+ quote: >-
289
+ "O padrão de estampagem é composto de 7 (sete) caracteres alfanuméricos,
290
+ em alto relevo, na sequência LLLNLNN, com espaçamento equidistante e
291
+ combinação aleatória, distribuída e controlada pelo órgão máximo
292
+ executivo de trânsito da União." / "1.2.1 O caracter 'L' refere-se à
293
+ letra, e o caracter 'N' refere-se ao numeral."
294
+ charset: "A-Z and 0-9; no letter is excluded by any instrument read — Brazil publishes no vowel/lookalike exclusion, unlike NL, GB and several US states"
295
+ source: "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao9692022anexos.pdf # Anexo I 1.2, 1.2.1"
296
+ fifth_character_rule:
297
+ sound_direction: >-
298
+ CONVERTED ⇒ A-J. Anexo II's table maps 0→A … 9→J and offers no other
299
+ value, so a plate that replaced a PNU registration always carries A-J at
300
+ position 5 and its original PNU is plate[0,4] + (letter − 'A') +
301
+ plate[5,2]. This is the direction `regex_strict` encodes, on
302
+ br-mercosul-converted-2018 and br-mercosul-motorcycle-converted-2018.
303
+ unsound_direction: >-
304
+ A-J ⇏ CONVERTED. Res. 741/2018 Anexo III item 3 put EVERY transition-period
305
+ plate on A-J; Res. 780/2019 and 969/2022 narrowed the sentence to
306
+ conversions but never enacted a range for native allocations; and the
307
+ observed per-UF blocks still run 0A01→9J99. Native and converted plates
308
+ are kept apart by the THREE-LETTER BLOCK (natives are issued out of blocks
309
+ the PNU never used), not by the fifth character. No K-Z claim is made
310
+ anywhere in this file — an earlier draft made one and pass 2 removed it.
311
+ quote_current: >-
312
+ Res. 969/2022 Anexo II item 2: "A faixa de letras de 'A' a 'J' será
313
+ utilizada apenas para a conversão da PNU para o novo sistema de PIV
314
+ constante desta Resolução, de forma a permitir a convivência entre ambos
315
+ os modelos e possibilitar a consulta por ambos os critérios de placas."
316
+ quote_2018: >-
317
+ Res. 741/2018 Anexo III item 3: "Durante todo o período de transição será
318
+ utilizada apenas a faixa de letras de 'A' a 'J' para o antepenúltimo
319
+ caractere, de forma a permitir a conversão dos emplacamentos e a
320
+ convivência entre ambos os modelos."
321
+ example: "ABC1234 (PNU) → ABC1C34 (PIV) — the worked example given by Res. 741/2018 Anexo III item 4.1 and repeated by Res. 969/2022 Anexo II item 1"
322
+ source: "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao9692022anexos.pdf # Anexo II items 1 and 2, and the worked example"
323
+ source_2018: "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7412018.pdf # Anexo III items 1-4.1"
324
+ observed_blocks: "SECONDARY (pt.wikipedia 'Placas de identificação de veículos no Brasil', accessed 2026-08-02): per-UF Mercosul sequences 'todas as sequências se iniciam em 0A01 e terminam em 9J99', and the Rio de Janeiro commemorative block RIO0A01-RIO9J99 opened in September 2018. Tagged secondary; it corroborates the 741/2018 reading and is not itself relied on for any regex."
325
+ colour_by_use:
326
+ note: >-
327
+ Res. 969/2022 Anexo I Tabela III fixes the CHARACTER colour by the
328
+ vehicle's use, on an otherwise identical white plate. The hexes below are
329
+ nominal sRGB renderings of the Pantone Coated values the instrument
330
+ names; the instrument itself specifies Pantone and, for the retro-
331
+ reflective film, CIE 1964 chromaticity boxes (Tabela V) — never a hex.
332
+ Every `hex_basis: pantone-converted` in this file means exactly that.
333
+ table:
334
+ - { use: "Particular", colour: "Preta", spec: "-", hex: "#000000" }
335
+ - { use: "Comercial (Aluguel e Aprendizagem)", colour: "Vermelha", spec: "Pantone Fórmula Sólido Brilhante 186C", hex: "#C8102E" }
336
+ - { use: "Oficial e Representação", colour: "Azul", spec: "Sólido Brilhante 286C", hex: "#0033A0" }
337
+ - { use: "Diplomático/Consular (Missão Diplomática, Corpo Consular, Corpo Diplomático, Organismo Consular e/ou Internacional e Acordo Cooperação Internacional)", colour: "Dourada", spec: "Pantone Fórmula Sólido Brilhante 130C", hex: "#F2A900" }
338
+ - { use: "Especiais (Experiência / Fabricantes de veículos, peças e implementos)", colour: "Verde", spec: "Pantone Fórmula Sólido Brilhante 341C", hex: "#007A53" }
339
+ - { use: "Coleção (uso no âmbito do Mercosul)", colour: "Cinza Prata", spec: "Swop Pantone Grey", hex: "#8C8C8C" }
340
+ - { use: "Coleção (uso restrito em território nacional)", colour: "Branco", spec: "-", hex: "#FFFFFF" }
341
+ source: "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao9692022anexos.pdf # Anexo I Tabela III"
342
+ security_elements_current:
343
+ band: "blue Pantone 286 strip on the upper margin, 30 mm high, 390 mm (vehicles) / 196 mm (two- and three-wheelers) long, carrying the MERCOSUL logo left, the Brazilian flag right and BRASIL voided in white at centre"
344
+ flag: "28x20 mm (vehicles) / 23x16 mm (two-wheelers), upper-right, 4 mm from the top and right edges, rounded corners, 1 mm white border"
345
+ emblem: "official MERCOSUL emblem, Pantone blue 286 + green 347, 32x22 mm (vehicles) / 25x20 mm (two-wheelers), left edge at 15 mm"
346
+ distinguishing_sign: "'BR' in Gill Sans, black, heat-applied or printed in the lower-left corner (white on the national-only collector plate)"
347
+ watermark: "MERCOSUL emblem in circular form inside the retroreflective film, repeating every 72 mm"
348
+ qr_code: "16-22 mm square, indelible, upper-left below the blue band; per art. 3 the QR Code IS the electronic seal and replaces the physical lacre of CTB art. 115"
349
+ microtext: "the words 'MERCOSUR BRASIL MERCOSUL' printed over the characters in Gill Sans at 5 mm, in the per-use Pantone of Tabela VI (447C particular, 187C comercial, 288C oficial, 131C diplomático, 342C especiais, Warm Grey 11C coleção)"
350
+ source: "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao9692022anexos.pdf # Anexo I 1.1, 2.3.2, 2.3.4, 3.1-3.5, Tabela II, Tabela VI, Figuras 2-6"
351
+ fonts:
352
+ current_serial: { name: "FE Engschrift", height_mm: { vehicles: 65, two_wheelers: 53 }, stroke: "proportional to the typeface standard", source: "Res. 969/2022 Anexo I 2.4.1" }
353
+ current_country_name: { name: "Gill Sans Standard Bold Condensed 50 Interletrado", source: "Res. 969/2022 Anexo I 2.4.2" }
354
+ pnu_serial: { name: "Mandatory", source: "Res. 231/2007 Anexo item 4 — 'A Tipologia dos caracteres das placas e tarjetas devem seguir o modelo abaixo especificado na fonte: Mandatory'" }
355
+ licence_posture: >-
356
+ Both current fonts are NAMED third-party typefaces, which is unusual —
357
+ most surveyed jurisdictions prescribe a statutory drawing (PRD-PLATES
358
+ § 6). Neither instrument grants any licence. The render layer must
359
+ therefore derive glyphs from the instrument's own figures and the
360
+ published character-width tables (Res. 231/2007 Anexo item 2 gives a full
361
+ per-character advance-width table in mm for the PNU), never from a
362
+ third-party FE-Schrift or Gill Sans binary.
363
+ class_map:
364
+ note: >-
365
+ Where each legal issuance category lives in this file. PRD-PLATES § 2.3
366
+ sends colour-only variants to `variants:`; Brazil's current system makes
367
+ six categories colour-only, so a class-keyed consumer must read variants.
368
+ current:
369
+ standard: "series br-mercosul-standard-2018 / br-mercosul-converted-2018 (black characters, Particular); br-mercosul-uf-brasao-2018 for the 2018-only design that additionally carried the state flag, arms and municipality name"
370
+ motorcycle: "series br-mercosul-motorcycle-2018 / br-mercosul-motorcycle-converted-2018"
371
+ taxi: "variant 'aluguel-aprendizagem' (red characters) on the standard and motorcycle series"
372
+ government: "variant 'oficial-representacao' (blue characters)"
373
+ diplomatic: "variant 'diplomatico-consular' (gold characters)"
374
+ consular: "variant 'diplomatico-consular' (gold characters) — Brazil issues one gold class for both"
375
+ dealer: "variant 'especiais-experiencia-fabricante' (green characters) — PIV-Exp, Res. 969/2022 arts. 39-49"
376
+ historic: "variant 'colecao-mercosul' (silver-grey characters) for Mercosul-wide circulation; series br-mercosul-collection-national-2022 for the black national-only plate"
377
+ previous:
378
+ standard: "series br-pnu-standard-1990 (grey plate) + its colour variants"
379
+ government: "series br-pnu-official-1990 (white plate, BRASIL / state / municipality tarjeta)"
380
+ diplomatic: "series br-pnu-diplomatic-2008 (blue plate, CMD/CD/CC/OI/ADM/CI tarjeta)"
381
+ motorcycle: "series br-pnu-motorcycle-1990 (187x136 mm) and br-pnu-motorcycle-2012 (200x170 mm)"
382
+
383
+ special_plates:
384
+ note: >-
385
+ Brazilian plates that carry NO alphanumeric combination, and therefore no
386
+ `format.pattern`/`format.regex` and no series record. Recorded here so the
387
+ jurisdiction-completeness detector does not read their absence as a gap.
388
+ presidential_and_high_authority:
389
+ basis: "CTB art. 115 § 2"
390
+ quote: >-
391
+ "As placas com as cores verde e amarela da Bandeira Nacional serão usadas
392
+ somente pelos veículos de representação pessoal do Presidente e do
393
+ Vice-Presidente da República, dos Presidentes do Senado Federal e da
394
+ Câmara dos Deputados, do Presidente e dos Ministros do Supremo Tribunal
395
+ Federal, dos Ministros de Estado, do Advogado-Geral da União e do
396
+ Procurador-Geral da República."
397
+ source: "https://www.planalto.gov.br/ccivil_03/leis/l9503compilado.htm # art. 115 § 2"
398
+ representation_bronze:
399
+ basis: "CTB art. 115 § 3; Res. 969/2022 arts. 26-30 and Anexo I Figuras 9-10"
400
+ spec: "Placa em Bronze; letters in gold high relief; black ground; 350 x 160 mm; coat of arms in official colours or in bronze. Lettered with the office (e.g. GOVERNADOR DO ESTADO, COMANDANTE DA MARINHA, COMANDANTE DA AERONÁUTICA, OFICIAL GENERAL, and the Secretários de Estado do Governo Federal model of Figura 10). The vehicle is separately registered in RENAVAM (art. 28) and carries ordinary PIV as well."
401
+ source: "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao9692022anexos.pdf # Anexo I Figuras 9 and 10 + INFORMAÇÕES COMPLEMENTARES"
402
+ military:
403
+ basis: "CTB art. 115 § 5, verbatim: 'O disposto neste artigo não se aplica aos veículos de uso bélico.'"
404
+ note: "Armed-forces vehicles of war are excluded from the CTB plate regime altogether, so their identification (EB/FAB/MB registration systems) is set by the services, not by CONTRAN, and is out of scope for this file. Res. 969/2022 art. 30 covers only the bronze REPRESENTATION plates of the service Commanders and Oficiais Generais."
405
+ source: "https://www.planalto.gov.br/ccivil_03/leis/l9503compilado.htm # art. 115 § 5"
406
+ judicial_protected:
407
+ basis: "CTB art. 115 § 7 (Incluído pela Lei nº 12.694, de 2012)"
408
+ note: "Judges and prosecutors with criminal jurisdiction may TEMPORARILY carry special plates that defeat identification, under a joint CNJ/CNMP/CONTRAN regulation. No format is published, by design; not modelled."
409
+ source: "https://www.planalto.gov.br/ccivil_03/leis/l9503compilado.htm # art. 115 § 7"
410
+
411
+ series:
412
+
413
+ # =========================================================================
414
+ # CURRENT — PLACA DE IDENTIFICAÇÃO VEICULAR (PIV), MERCOSUL PATTERN.
415
+ # Res. 969/2022 (in force 1 July 2022), continuing the system created by
416
+ # Res. 729/2018 and specified as LLLNLNN by Res. 780/2019.
417
+ # =========================================================================
418
+ - id: br-mercosul-standard-2018
419
+ class: standard
420
+ categories: [car, van, truck, bus, trailer, semitrailer]
421
+ period: { start: 2018 }
422
+ period_evidence: enabling-instrument
423
+ matching: strict
424
+ format:
425
+ pattern: "LLL9L99"
426
+ regex: '\A[A-Z]{3}\d[A-Z]\d{2}\z'
427
+ charset:
428
+ letters: "A-Z, no exclusions published"
429
+ fifth_character: >-
430
+ NO NARROWING IS ASSERTED, and the absence is sourced. Res. 741/2018
431
+ Anexo III item 3 put EVERY transition-period plate on A-J at this
432
+ position; Res. 780/2019 and Res. 969/2022 Anexo II item 2 reserve A-J
433
+ "apenas para a conversão" without enacting any range for native
434
+ allocations. Natively-allocated blocks are observed running 0A01 to
435
+ 9J99 (secondary), which is consistent with the 741/2018 reading and
436
+ inconsistent with a K-Z rule. See the file header, fact 2, and
437
+ `common.fifth_character_rule`. A `regex_strict` here would be an
438
+ inference, so there is none.
439
+ progression: >-
440
+ "combinação aleatória, distribuída e controlada pelo órgão máximo
441
+ executivo de trânsito da União" (Anexo I 1.2). There is no published
442
+ allocation order and no geographic block: a Brazilian PIV combination
443
+ carries no state, city or date information of its own. The only
444
+ inference the combination supports is the fifth-character one.
445
+ design:
446
+ plate: { w: 400, h: 130, unit: mm, tolerance_mm: 2 }
447
+ plate_variants:
448
+ - { note: "up to 15% reduction permitted where the plate does not fit the vehicle's homologated receptacle (Anexo I 2.1.2)" }
449
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: spec }
450
+ foreground: "#000000"
451
+ band: { side: top, color: "#0033A0", hex_basis: pantone-converted, h: 30, w: 390, unit: mm, content: "MERCOSUL emblem (left) + BRASIL voided white (centre) + Brazilian flag (right)" }
452
+ emblem: { present: true, rendered: placeholder, note: "MERCOSUL emblem per DEC CMC nº 17/02 corporate identity manual; national flag; PRD-PLATES § 3 placeholder rule applies until the emblem licence is affirmatively cleared" }
453
+ characters: { height_mm: 65, font: "FE Engschrift", relief: "alto relevo", process: "hot stamp thermal film, non-retroreflective, non-diffractive, overprinted with the words MERCOSUR BRASIL MERCOSUL at 5 mm" }
454
+ material: { substrate: "non-galvanised aluminium 1 mm ± 0.2", film: "microprismatic or microspherical retroreflective, ISO 7591:1982 tested, ASTM E-810 measured" }
455
+ rear_differs: false
456
+ note: "front and rear plates are identical; trailers, semi-trailers, two- and three-wheelers, quadricycles and cranes carry the rear plate only (art. 2 § 1)"
457
+ region_encoding: none
458
+ variants:
459
+ - class: taxi
460
+ name: aluguel-aprendizagem
461
+ design: { foreground: "#C8102E", hex_basis: pantone-converted, note: "Pantone Fórmula Sólido Brilhante 186C; micro-inscriptions Pantone 187C" }
462
+ note: >-
463
+ "Comercial (Aluguel e Aprendizagem)" — hire vehicles (taxis, ride-hail,
464
+ rental) AND driving-school vehicles share one red-character category.
465
+ Colour-only variant of this series per PRD-PLATES § 2.3: same plate,
466
+ same LLLNLNN combination, same period. Under the PNU these were two
467
+ DIFFERENT designs (red ground / white ground, see br-pnu-standard-1990
468
+ variants) — the Mercosul plate merged them.
469
+ sources:
470
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao9692022anexos.pdf # Anexo I Tabela III row 2, Tabela VI row 2"
471
+ - class: government
472
+ name: oficial-representacao
473
+ design: { foreground: "#0033A0", hex_basis: pantone-converted, note: "Sólido Brilhante 286C; micro-inscriptions Pantone 288C" }
474
+ note: >-
475
+ "Oficial e Representação" — federal, state and municipal fleets, and
476
+ the ordinary plates of representation vehicles. Colour-only variant.
477
+ The BRONZE representation plate of CTB art. 115 § 3 is a different
478
+ object entirely and is recorded in `special_plates`.
479
+ sources:
480
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao9692022anexos.pdf # Anexo I Tabela III row 3"
481
+ - class: diplomatic
482
+ name: diplomatico-consular
483
+ design: { foreground: "#F2A900", hex_basis: pantone-converted, note: "Pantone Fórmula Sólido Brilhante 130C; micro-inscriptions Pantone 131C" }
484
+ note: >-
485
+ One gold-character category covers Missão Diplomática, Corpo Consular,
486
+ Corpo Diplomático, Organismo Consular e/ou Internacional and Acordo de
487
+ Cooperação Internacional (Res. 969/2022 art. 6º VIII and art. 31).
488
+ Registration requires an authorisation from the Cerimonial do
489
+ Ministério das Relações Exteriores (art. 32). DECODE LOSS WORTH
490
+ RECORDING: the PNU carried a two- or three-letter tarjeta code
491
+ (CMD/CD/CC/OI/ADM/CI) that told you WHICH corps; the Mercosul plate
492
+ does not, so the sub-category is no longer readable off the plate.
493
+ sources:
494
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao9692022anexos.pdf # Anexo I Tabela III row 4"
495
+ - "https://www.in.gov.br/en/web/dou/-/resolucao-contran-n-969-de-20-de-junho-de-2022-410033795 # arts. 6º VIII, 31-34 (who qualifies, MRE authorisation, annual licensing)"
496
+ - class: dealer
497
+ name: especiais-experiencia-fabricante
498
+ design: { foreground: "#007A53", hex_basis: pantone-converted, note: "Pantone Fórmula Sólido Brilhante 341C; micro-inscriptions Pantone 342C" }
499
+ note: >-
500
+ Green characters cover BOTH special plates: PIV-Exp (trade plates for
501
+ establishments that repair, buy, sell or dismantle vehicles, CTB
502
+ art. 330; circulation restricted to the issuing state, art. 42) and
503
+ PIV-Fab (manufacturer/bodybuilder test plates, arts. 35-38, valid
504
+ without geographic or time restriction). Class `dealer` is the closest
505
+ entry in _meta/classes.yml; the manufacturer half has no exact class.
506
+ sources:
507
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao9692022anexos.pdf # Anexo I Tabela III row 5"
508
+ - "https://www.in.gov.br/en/web/dou/-/resolucao-contran-n-969-de-20-de-junho-de-2022-410033795 # arts. 6º III-IV, 35-49"
509
+ - class: historic
510
+ name: colecao-mercosul
511
+ design: { foreground: "#8C8C8C", hex_basis: observed, note: "the instrument says only 'Cinza Prata / Swop Pantone Grey', which has no single sRGB definition — hex is an observation, flagged" }
512
+ note: >-
513
+ Collector vehicles circulating Mercosul-wide keep the white plate with
514
+ silver-grey characters. Collector vehicles "classificados como
515
+ originais" may instead take the BLACK national-only plate, which is a
516
+ different design and therefore its own series
517
+ (br-mercosul-collection-national-2022).
518
+ sources:
519
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao9692022anexos.pdf # Anexo I Tabela III row 6, Tabela VI row 6"
520
+ sources:
521
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao9692022anexos.pdf # Anexo I 1.1, 1.2 (LLLNLNN), 2.1 Tabela I (400x130), 2.3 (white ground, Pantone 286 band), 2.4 (FE Engschrift 65 mm), 3.1-3.5 (security elements)"
522
+ - "https://www.in.gov.br/en/web/dou/-/resolucao-contran-n-969-de-20-de-junho-de-2022-410033795 # arts. 2 (front+rear, rear-only categories), 3 (QR Code replaces the lacre), 56 (when the PIV is required)"
523
+ - "https://www.in.gov.br/en/web/dou/-/resolucao-n-729-de-6-de-marco-de-2018-5755402 # art. 8 § 3: PIV required for new registrations, transfers and replacements from 1 September 2018 — the period.start evidence"
524
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7412018.pdf # Res. CONTRAN 741/2018 of 17-09-2018, Anexo III item 1 — the FIRST instrument to spell LLLNLNN (pass-2 correction; an earlier draft credited Res. 780/2019)"
525
+ - "https://www.in.gov.br/en/web/dou/-/resolucao-n-780-de-26-de-junho-de-2019-179414765 # Res. 780/2019 Anexo I 1.2, which re-enacts LLLNLNN unchanged; art. 21 (31 January 2020 deadline)"
526
+ notes: >-
527
+ The current Brazilian standard-issue plate, black characters on white with
528
+ the Mercosul blue band. period.start 2018 is the year the plate became
529
+ MANDATORY for new registrations under Res. 729/2018 art. 8 § 3 ("até 1º de
530
+ setembro de 2018"), and the year the first states issued it: the per-state
531
+ cronograma of Res. 748/2018 art. 2 gave Rio de Janeiro until 3 December
532
+ 2018 and every other state until 31 December 2018, which is the primary
533
+ evidence for the widely repeated "Rio de Janeiro first, 2018" claim. The
534
+ deadline then moved twice (30 June 2019 by Res. 770/2018; 31 January 2020
535
+ by Res. 780/2019 art. 21), so 2018-2020 is a genuine transition window in
536
+ which BOTH systems were being issued, state by state — modelled here as
537
+ the deliberate overlap with br-pnu-standard-1990. THE ARRANGEMENT LLLNLNN
538
+ WAS FIRST SPELLED BY RES. CONTRAN 741/2018 (17 September 2018), Anexo III
539
+ item 1, verbatim: "A placa MERCOSUL terá a seguinte disposição: LLLNLNN,
540
+ onde L é letra e N é número", with item 2 naming the old shape in the same
541
+ breath — "os demais DETRANs continuarão a emplacar no padrão pré-Mercosul,
542
+ ou seja, LLLNNNN". (PASS-2 CORRECTION: an earlier draft of this file
543
+ credited Res. 780/2019 with the first appearance of LLLNLNN. It is
544
+ 741/2018, ten months earlier, and the difference matters because 741/2018
545
+ also carries the A-J rule — see the file header, fact 2.) Before
546
+ September 2018 the instruments were genuinely looser: Res. 510/2014
547
+ required only seven characters and Res. 729/2018 art. 1 § 3 III added only
548
+ "com o último caractere obrigatoriamente numeral", which is why the
549
+ 2014-2018 pre-production samples in circulation show other shapes and why
550
+ no series in this file claims a pre-2018 Mercosul format for Brazil.
551
+
552
+ - id: br-mercosul-converted-2018
553
+ class: standard
554
+ categories: [car, van, truck, bus, trailer, semitrailer]
555
+ period: { start: 2018 }
556
+ period_evidence: enabling-instrument
557
+ matching: strict
558
+ format:
559
+ pattern: "LLL9L99"
560
+ regex: '\A[A-Z]{3}\d[A-Z]\d{2}\z'
561
+ regex_strict: '\A[A-Z]{3}\d[A-J]\d{2}\z'
562
+ charset:
563
+ fifth_character: "A-J only — the letter is the ENCODED FORM of the PNU's second numeral (A=0 … J=9)"
564
+ decode:
565
+ note: "invert the fifth character to recover the vehicle's pre-Mercosul PNU registration"
566
+ map: { A: 0, B: 1, C: 2, D: 3, E: 4, F: 5, G: 6, H: 7, I: 8, J: 9 }
567
+ worked_example: "ABC1C34 (PIV) ⇄ ABC-1234 (PNU)"
568
+ progression: "not an allocation at all — the combination is DERIVED from the vehicle's existing PNU by a fixed one-character substitution"
569
+ design:
570
+ plate: { w: 400, h: 130, unit: mm, tolerance_mm: 2 }
571
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: spec }
572
+ foreground: "#000000"
573
+ band: { side: top, color: "#0033A0", hex_basis: pantone-converted, h: 30, w: 390, unit: mm, content: "MERCOSUL emblem + BRASIL + Brazilian flag" }
574
+ characters: { height_mm: 65, font: "FE Engschrift" }
575
+ rear_differs: false
576
+ note: "physically identical to br-mercosul-standard-2018 — the difference is the origin of the combination, and it is readable in the fifth character"
577
+ region_encoding: none
578
+ variants:
579
+ - class: taxi
580
+ name: aluguel-aprendizagem
581
+ design: { foreground: "#C8102E", hex_basis: pantone-converted }
582
+ note: "the six colour categories of Tabela III apply to converted plates exactly as to native ones; enumerated in full on br-mercosul-standard-2018"
583
+ sources:
584
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao9692022anexos.pdf # Anexo I Tabela III"
585
+ sources:
586
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao9692022anexos.pdf # Anexo II items 1 and 2: the 0→A…9→J table, the ABC1234→ABC1C34 example, and the reservation of A-J to conversion"
587
+ - "https://www.in.gov.br/en/web/dou/-/resolucao-contran-n-969-de-20-de-junho-de-2022-410033795 # art. 2 § 4 (automatic substitution of the second numeral) and art. 57 § 1 (old combination kept in the record as 'placa anterior', both queryable)"
588
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7412018.pdf # Res. CONTRAN 741/2018 of 17-09-2018, Anexo III items 1, 3 and 4: LLLNLNN, the A-J rule and the 0→A…9→J conversion table with the worked example 'um veículo com a placa ABC1234 tem equivalência no Padrão Mercosul de ABC1C34' — the table's FIRST appearance, which is this series' period.start"
589
+ - "https://www.in.gov.br/en/web/dou/-/resolucao-n-780-de-26-de-junho-de-2019-179414765 # Res. 780/2019 art. 2 § 3 and Anexo II, which re-enact the same table"
590
+ notes: >-
591
+ Mercosul plates that REPLACED a PNU registration rather than being newly
592
+ allocated. THE SOURCED CLAIM IS ONE-WAY: every converted plate carries
593
+ A-J at position 5, because Anexo II's table produces nothing else, so
594
+ `regex_strict` here is the authority's own grammar. It does NOT follow
595
+ that an A-J plate is converted (file header, fact 2), so this series is a
596
+ PROPER SUBSET of br-mercosul-standard-2018 and not an alternative to it —
597
+ a string alone cannot decide between them, and only the letter block's
598
+ allocation history can. PASS-2 CORRECTION: an earlier draft dated this
599
+ series 2019 on the belief that the conversion table first appeared in
600
+ Res. 780/2019. It first appears in Res. CONTRAN 741/2018 Anexo III item 4
601
+ (17 September 2018), with the same ten rows and the same worked example,
602
+ so period.start is 2018 and the draft id `br-mercosul-converted-2018` is
603
+ retired in favour of `br-mercosul-converted-2018`. Conversion is compulsory
604
+ only on a category change, on plate theft/loss/damage, on a change of
605
+ municipality or state, or when a second rear plate must be fitted
606
+ (Res. 969/2022 art. 56 § 1); otherwise it is the owner's option, at any
607
+ time, for the life of the vehicle — so this series will keep receiving
608
+ new members for as long as pre-2018 vehicles survive.
609
+
610
+ - id: br-mercosul-motorcycle-2018
611
+ class: motorcycle
612
+ categories: [motorcycle, moped, tricycle, quadricycle]
613
+ period: { start: 2018 }
614
+ period_evidence: enabling-instrument
615
+ matching: strict
616
+ format:
617
+ pattern: "LLL9L99"
618
+ regex: '\A[A-Z]{3}\d[A-Z]\d{2}\z'
619
+ charset:
620
+ fifth_character: "no narrowing asserted — the same reasoning as br-mercosul-standard-2018; see the file header, fact 2"
621
+ progression: "random, allocated and controlled by SENATRAN (Anexo I 1.2)"
622
+ design:
623
+ plate: { w: 200, h: 170, unit: mm, tolerance_mm: 2 }
624
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: spec }
625
+ foreground: "#000000"
626
+ band: { side: top, color: "#0033A0", hex_basis: pantone-converted, h: 30, w: 196, unit: mm, content: "MERCOSUL emblem + BRASIL + Brazilian flag" }
627
+ characters: { height_mm: 53, font: "FE Engschrift" }
628
+ emblem: { present: true, rendered: placeholder, note: "on the motorcycle plate the MERCOSUL emblem's angle bisector coincides with the plate corner's bisector (Anexo I 3.1); flag 23x16 mm" }
629
+ layout: two-line
630
+ layout_basis: photographic-observed
631
+ layout_note: >-
632
+ The instrument fixes the plate at 200 x 170 mm and the characters at
633
+ 53 mm but does NOT spell the line arrangement, and Figura 2 is a
634
+ dimensioned drawing with an empty character field. Seven 53 mm
635
+ characters cannot fit on a 200 mm line, so the combination is printed
636
+ on two lines. UPGRADED (wave-1 render pass) from "observed, not
637
+ sourced" to photographically confirmed: an issued motorcycle plate
638
+ reads "RJJ" on the upper row and "2J41" on the lower — Commons
639
+ File:License plate of Brazil 04.jpg (CC BY 4.0, photographer
640
+ Dickelbers), serial RJJ2J41. The 3+4 split this note already named
641
+ now has a citable photograph.
642
+ rear_differs: false
643
+ note: "rear plate only — CTB art. 115 § 6 ('Os veículos de duas ou três rodas são dispensados da placa dianteira') and Res. 969/2022 art. 2 § 1"
644
+ region_encoding: none
645
+ variants:
646
+ - class: taxi
647
+ name: aluguel-aprendizagem
648
+ design: { foreground: "#C8102E", hex_basis: pantone-converted }
649
+ note: "moto-taxi and moto-boy hire registrations, and driving-school motorcycles, take the red characters of Tabela III; full colour table on br-mercosul-standard-2018"
650
+ sources:
651
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao9692022anexos.pdf # Anexo I Tabela III"
652
+ sources:
653
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao9692022anexos.pdf # Anexo I Tabela I (200x170), Tabela II (band 30x196), 2.4.1.2 (53 mm), 3.1-3.2, Figura 2"
654
+ - "https://www.in.gov.br/en/web/dou/-/resolucao-contran-n-969-de-20-de-junho-de-2022-410033795 # art. 2 § 1: motocicletas, motonetas, ciclomotores, cicloelétricos, triciclos and quadriciclos carry the rear plate only"
655
+ - "https://www.planalto.gov.br/ccivil_03/leis/l9503compilado.htm # CTB art. 115 § 6"
656
+ notes: >-
657
+ The Mercosul plate for two-, three- and four-wheeled light vehicles:
658
+ same seven-character combination and same colour rules as the car plate,
659
+ on a near-square 200 x 170 mm plate. Note the category breadth — the same
660
+ plate serves motorcycles, motonetas, ciclomotores, cicloelétricos,
661
+ triciclos and quadriciclos, so a Brazilian moped is NOT separately
662
+ formatted (contrast NL and IT, where moped plates are their own grammar).
663
+ period.start follows the same instrument chain as the car series; a
664
+ converted motorcycle plate carries the A-J fifth character exactly as
665
+ br-mercosul-converted-2018 does.
666
+
667
+ - id: br-mercosul-motorcycle-converted-2018
668
+ class: motorcycle
669
+ categories: [motorcycle, moped, tricycle, quadricycle]
670
+ period: { start: 2018 }
671
+ period_evidence: enabling-instrument
672
+ matching: strict
673
+ format:
674
+ pattern: "LLL9L99"
675
+ regex: '\A[A-Z]{3}\d[A-Z]\d{2}\z'
676
+ regex_strict: '\A[A-Z]{3}\d[A-J]\d{2}\z'
677
+ charset: { fifth_character: "A-J only — the encoded second numeral of the vehicle's PNU" }
678
+ decode:
679
+ map: { A: 0, B: 1, C: 2, D: 3, E: 4, F: 5, G: 6, H: 7, I: 8, J: 9 }
680
+ worked_example: "XYZ9H88 (PIV) ⇄ XYZ-9788 (PNU)"
681
+ design:
682
+ plate: { w: 200, h: 170, unit: mm, tolerance_mm: 2 }
683
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: spec }
684
+ foreground: "#000000"
685
+ band: { side: top, color: "#0033A0", hex_basis: pantone-converted, h: 30, w: 196, unit: mm }
686
+ characters: { height_mm: 53, font: "FE Engschrift" }
687
+ layout: two-line
688
+ layout_basis: observed
689
+ rear_differs: false
690
+ region_encoding: none
691
+ sources:
692
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao9692022anexos.pdf # Anexo II items 1-2 (conversion table and the A-J reservation) + Anexo I Tabela I for the two-wheeler dimensions"
693
+ - "https://www.in.gov.br/en/web/dou/-/resolucao-contran-n-969-de-20-de-junho-de-2022-410033795 # art. 2 § 4"
694
+ notes: >-
695
+ The motorcycle half of the PNU→PIV conversion, kept as its own series for
696
+ the same reason as br-mercosul-converted-2018: the fifth-character
697
+ alphabet is a sourced grammar for THIS subset. Same one-way reading as the
698
+ car conversion — a converted plate necessarily carries A-J, but an A-J
699
+ plate is not necessarily converted (file header, fact 2). Draft id
700
+ `br-mercosul-motorcycle-converted-2018` retired with its period, for the
701
+ same Res. 741/2018 reason. No
702
+ stronger inference is available: Brazilian motorcycles have been
703
+ registered throughout the PNU era, and Res. 231/2007 art. 6's 2008/2012
704
+ dates concern REFLECTIVE FILM, not registration (see
705
+ br-pnu-motorcycle-1990).
706
+
707
+ # -------------------------------------------------------------------------
708
+ # THE NINE-MONTH MERCOSUL PLATE. Pass-2 addition: the assignment brief asks
709
+ # for "state/municipality shown on plate pre-2018 (mechanism note)", and the
710
+ # research turned up the fact that the MERCOSUL plate ALSO showed them, for
711
+ # nine months, and lost them by a dated instrument. That is a design regime
712
+ # with an instrument at both ends, so PRD-PLATES § 2.3 makes it a series.
713
+ # -------------------------------------------------------------------------
714
+ - id: br-mercosul-uf-brasao-2018
715
+ class: standard
716
+ categories: [car, van, truck, bus]
717
+ period: { start: 2018, end: 2018 }
718
+ period_evidence: instrument-dated-both-ends
719
+ matching: strict
720
+ format:
721
+ pattern: "LLL9L99"
722
+ regex: '\A[A-Z]{3}\d[A-Z]\d{2}\z'
723
+ charset: { letters: "A-Z, no exclusions published", fifth_character: "as br-mercosul-standard-2018" }
724
+ design:
725
+ plate: { w: 400, h: 130, unit: mm, tolerance_mm: 2 }
726
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: spec }
727
+ foreground: "#000000"
728
+ band: { side: top, color: "#0033A0", hex_basis: pantone-converted, h: 30, w: 390, unit: mm, content: "MERCOSUL emblem + BRASIL + Brazilian flag" }
729
+ characters: { height_mm: 65, font: "FE Engschrift" }
730
+ uf_flag:
731
+ w: 26
732
+ h: 21
733
+ unit: mm
734
+ position: "right edge, below the blue band"
735
+ border_mm: 0.5
736
+ note: >-
737
+ Res. 729/2018 Anexo I item 1.7, verbatim: "Bandeira da Unidade da
738
+ Federação (Figuras I e II): deverá ser inserida nas cores originais e
739
+ aplicada por estampagem por calor com medidas de 26mm por 21mm e para
740
+ motocicletas, motonetas, triciclos, ciclo elétricos, quadriciclos e
741
+ ciclomotores, 21mm por 14mm, ao lado da borda direita da placa com uma
742
+ borda preta de 0,5mm (±0,1mm) de largura."
743
+ emblem:
744
+ present: true
745
+ rendered: placeholder
746
+ max_diameter_mm: 26
747
+ note: >-
748
+ Item 1.8: a coat of arms, Ø 26 mm maximum, in its original colours,
749
+ heat-applied, at the right edge below the UF flag. Item 1.7.1 assigns
750
+ it: federal fleets the Brasão de Armas Federal; state fleets the state
751
+ flag and state arms; municipal fleets the state flag and the MUNICIPAL
752
+ arms. PRD-PLATES § 3 placeholder rule applies.
753
+ municipality_legend:
754
+ font: "Gill Sans"
755
+ note: >-
756
+ Item 1.8.1, verbatim: "Brasão do Município: deverá medir no máximo
757
+ Ø 26mm e constar abaixo, o nome do Município (fonte Gill Sans),
758
+ identificando o domicílio do registro do veículo."
759
+ diplomatic_sigla:
760
+ note: >-
761
+ Item 1.7.1 d) also placed, on the plates of foreign-entity vehicles, a
762
+ VERTICAL GOLD SIGLA in Gill Sans at 15 mm — CMD, CD, CC, OI, ADM or
763
+ CI, the same six codes the PNU tarjeta carried. It died with the rest
764
+ of item 1.7.1, which is why a Brazilian diplomatic plate has carried
765
+ no textual marking of corps since December 2018.
766
+ rear_differs: false
767
+ region_encoding: inline
768
+ region_encoding_note: >-
769
+ THE ONLY BRAZILIAN PLATE SINCE 2018 THAT DECODES GEOGRAPHICALLY, and it
770
+ does so by printing the answer rather than by encoding it: the state flag
771
+ identified the Unidade da Federação and the legend under the arms named
772
+ the municipality of registration in words. There is no code table to ship.
773
+ sources:
774
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7292018_nova.pdf # Res. CONTRAN 729/2018 of 06-03-2018, Anexo I items 1.7 (UF flag 26x21 mm), 1.7.1 a)-d) (federal arms / state flag+arms / state flag+municipal arms / the gold CMD-CD-CC-OI-ADM-CI sigla), 1.8 (arms Ø 26 mm), 1.8.1 (municipality name in Gill Sans); accessed 2026-08-02"
775
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7482018.pdf # Res. CONTRAN 748/2018 of 30-11-2018 art. 4, verbatim: 'Revogar os itens 1.7, 1.7.1, 1.8 e 1.8.1 do Anexo I da Resolução CONTRAN nº 729, de 6 de março de 2018.' — the instrument that closes this series' period"
776
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao7482018.pdf # art. 2, the per-state December 2018 cronograma these plates were issued across, Rio de Janeiro first"
777
+ notes: >-
778
+ THE NINE-MONTH PLATE. Between Res. CONTRAN 729/2018 (6 March 2018) and
779
+ Res. CONTRAN 748/2018 (30 November 2018) the Brazilian Mercosul plate
780
+ carried, at its right edge below the blue band, the flag of the state of
781
+ registration, a coat of arms, and beneath the arms the NAME OF THE
782
+ MUNICIPALITY of registration. Rio de Janeiro — the first state to issue,
783
+ from September 2018 — issued these, and so did the states that started
784
+ before the 748/2018 timetable ran out. Res. 748/2018 art. 4 revoked all
785
+ four Anexo I items in a single line and Brazilian plates have shown no
786
+ geography at all since. THE PERIOD IS CLOSED BY INSTRUMENTS AT BOTH ENDS,
787
+ which is why this is the only entry in the file carrying
788
+ `instrument-dated-both-ends`; the calendar window inside 2018 is
789
+ 2018-03-06 to 2018-11-30, and neither boundary is inferred. Modelled as
790
+ its own series and not as a variant because the difference is structural
791
+ (three printed elements added and removed), not a colour swap, and because
792
+ a consumer dating a photograph needs it: a Mercosul plate with a state
793
+ flag on it is a 2018 artefact and nothing else. Distinct from
794
+ br-mercosul-standard-2018, which is the design as it has stood since
795
+ December 2018.
796
+
797
+ - id: br-mercosul-collection-national-2022
798
+ class: historic
799
+ categories: [car, van, truck, bus, motorcycle]
800
+ period: { start: 2022 }
801
+ period_evidence: enabling-instrument
802
+ matching: strict
803
+ format:
804
+ pattern: "LLL9L99"
805
+ regex: '\A[A-Z]{3}\d[A-Z]\d{2}\z'
806
+ charset: { fifth_character: "both ranges occur — a collector vehicle is by definition old, so most carry the A-J converted form, but the resolution imposes no restriction" }
807
+ design:
808
+ plate: { w: 400, h: 130, unit: mm, tolerance_mm: 2 }
809
+ plate_variants:
810
+ - { w: 200, h: 170, unit: mm, note: "motorcycles, motonetas, ciclomotores, cicloelétricos, triciclos and quadriciclos — Anexo I Figura 7" }
811
+ background: { color: "#000000", finish: non-retroreflective, hex_basis: spec }
812
+ foreground: "#FFFFFF"
813
+ band: { side: top, color: "#0033A0", hex_basis: pantone-converted, h: 30, unit: mm, content: "Brazilian flag (right) + BRASIL voided white (centre) — NO MERCOSUL emblem" }
814
+ emblem: { present: true, rendered: placeholder, note: "national flag only; Anexo I 3.1 expressly forbids the MERCOSUL emblem on this plate" }
815
+ distinguishing_sign: { text: "BR", color: "#FFFFFF", note: "white here, black on every other Brazilian plate (Anexo I 3.3)" }
816
+ characters: { height_mm: 65, font: "FE Engschrift", note: "WITHOUT the 'MERCOSUR BRASIL MERCOSUL' micro-inscriptions, which Anexo I 2.2.3 excludes for this plate" }
817
+ watermark: { present: false, note: "Anexo I 3.4 excludes the MERCOSUL watermark from this plate" }
818
+ qr_code: { side_mm: "17-23", note: "slightly larger than the standard 16-22 mm, permitted by Anexo I 3.5.3 for contrast on the black ground" }
819
+ rear_differs: false
820
+ region_encoding: none
821
+ sources:
822
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao9692022anexos.pdf # Anexo I 1.1.1 (black film, blue band, flag right, BRASIL centre), 2.2.3, 2.3.1, 2.3.3 Tabela III last row ('Coleção (uso restrito em território nacional)' — Branco), 3.1, 3.3, 3.4, 3.5.3, Figuras 7-8"
823
+ - "https://www.in.gov.br/en/web/dou/-/resolucao-contran-n-969-de-20-de-junho-de-2022-410033795 # art. 2 § 5: collector vehicles classified as ORIGINAL may take a plate 'para uso restrito ao território nacional'"
824
+ notes: >-
825
+ Brazil's black plate — white characters on a black ground, blue band, no
826
+ MERCOSUL emblem, no watermark, no micro-inscriptions, white BR — created
827
+ by Res. 969/2022 and NOT present in Res. 780/2019, which is why
828
+ period.start is 2022 and the evidence is the enabling instrument itself.
829
+ It is available only to collector vehicles "classificados como originais"
830
+ under separate CONTRAN collector rules, and the trade-off is explicit in
831
+ the plate: dropping the Mercosul identity means the vehicle may not use
832
+ it outside Brazil ("uso restrito ao território nacional"). Collector
833
+ vehicles that want Mercosul-wide circulation keep the white plate with
834
+ silver-grey characters (variant `colecao-mercosul` on
835
+ br-mercosul-standard-2018). NOTE for the render layer: this is the only
836
+ Brazilian plate whose background is non-retroreflective by specification.
837
+
838
+ # =========================================================================
839
+ # ONE SERIES BACK — PLACA NACIONAL ÚNICA (PNU), the 1990-generation plate.
840
+ # Grammar and design from Res. 231/2007 (consolidated) and Res. 45/98;
841
+ # still legally current on the road, no longer issued.
842
+ # =========================================================================
843
+ - id: br-pnu-standard-1990
844
+ class: standard
845
+ categories: [car, van, truck, bus, trailer, semitrailer]
846
+ period: { start: 1990, end: 2020 }
847
+ period_evidence: enabling-instrument
848
+ matching: strict
849
+ format:
850
+ pattern: "LLL-9999"
851
+ regex: '\A[A-Z]{3}[- ]?\d{4}\z'
852
+ charset:
853
+ letters: "A-Z, no exclusions — Res. 231/2007 art. 1 defines the first group as 'o arranjo, com repetição de 26 (vinte e seis) letras, tomadas três a três', i.e. all 17,576 triples are legal"
854
+ digits: "0-9, all 10,000 combinations — 'o arranjo, com repetição, de 10 (dez) algarismos, tomados quatro a quatro'"
855
+ separator_note: >-
856
+ Res. 231/2007 art. 1 prescribes two GROUPS and no separator glyph;
857
+ Res. 969/2022 art. 2 § 3, describing the same plate 15 years later,
858
+ writes it "AAA-1111". The regex therefore accepts hyphen, space or
859
+ nothing at the group boundary (PRD-PLATES § 2.8 separator-only class),
860
+ and `pattern` shows the canonical printed hyphen.
861
+ separator_printed_form: >-
862
+ SETTLED PHOTOGRAPHICALLY (wave-1 render pass): issued plates print a
863
+ small SQUARE DOT between the letter and digit groups — not a hyphen,
864
+ and not a bare gap. Close-up: Commons File:Placa de veículo Brasil
865
+ Pernambuco-Jaboatão dos Guararapes KLV-8465 atrás.jpg (public domain,
866
+ photographer Ralf1963) reads "KLV·8465" with the square dot clearly
867
+ resolved. The canonical hyphen above stays the PARSE form; this field
868
+ records the DEPICTION form, exactly as Portugal's square-dot
869
+ settlement did (pt.yml). Evidence: photographic-observed, single
870
+ close-up witness for the standard series; whether the official and
871
+ diplomatic PNU faces print the same glyph is unconfirmed.
872
+ progression: >-
873
+ Sequential inside a three-letter block allocated to each state.
874
+ Res. 231/2007 art. 4, verbatim: "O Órgão Maximo Executivo de Transito da
875
+ União estabelecerá normas técnicas para a distribuição e controle das
876
+ series alfanuméricas" — the allocation is delegated to DENATRAN and the
877
+ resulting UF→range table was NOT found published (recorded gap; see
878
+ `region_encoding` below and dossier-br.md § Gaps).
879
+ design:
880
+ plate: { w: 400, h: 130, unit: mm }
881
+ plate_variants:
882
+ - { note: "up to 15% length reduction where the plate does not fit the receptacle, DENATRAN-authorised (Anexo item 1 c), as amended by Res. 309/09)" }
883
+ background: { color: "#8F999F", finish: retroreflective, hex_basis: ral-converted, spec_note: "CINZA = RAL 7001 (Silbergrau), Res. 45/98 Anexo item 11" }
884
+ foreground: "#1C1C1C"
885
+ band: { side: none }
886
+ characters: { height_mm: 63, stroke_mm: 10, font: "Mandatory", relief: "alto relevo", note: "Res. 231/2007 Anexo item 2 also publishes a per-character advance-width table in mm (A=54, B=44, … I=10, … 1=18, 0=36) — a directly renderable metric set" }
887
+ tarjeta:
888
+ present: true
889
+ content: "sigla da Unidade da Federação + nome do Município de registro"
890
+ note: "removable strips riveted to both plates, sealed together with the rear plate; the ONLY geographic marking on a Brazilian plate, and it is in words, not in the serial. State DETRANs set municipality abbreviations (art. 5 § 4). Character heights 5.5-7.0 mm per Anexo item 6."
891
+ manufacturer_code: { note: "three digits + UF sigla + last two digits of the year of manufacture, stamped in the plate colour: 8 x 30 mm on the plate, 3 x 15 mm on the tarjeta (Anexo item 7)" }
892
+ seal: { note: "physical lacre (polyethylene or lead, min 15x15x4 mm) through braided galvanised wire, identifying the issuing DETRAN — the element the Mercosul QR Code replaced" }
893
+ rear_differs: false
894
+ hex_note: >-
895
+ PASS-2 UPGRADE, from `observed` to `ral-converted` on every PNU colour.
896
+ Res. 231/2007 Anexo item 11, as amended by Res. 372/2011, publishes RAL
897
+ codes for the CHARACTERS only (BRANCA = RAL 9010, PRETA = RAL 9011) and
898
+ specifies the grounds as CIE 1931 chromaticity boxes (Tabela 2) plus
899
+ retroreflectivity minima (Tabela 1) — which is what an earlier draft of
900
+ this file recorded. But its PREDECESSOR instrument, Res. CONTRAN 45/98,
901
+ publishes the FULL six-colour RAL table at Anexo item 11 — CINZA 7001,
902
+ VERMELHO 3000, VERDE 6016, BRANCA 9010, AZUL 5019, PRETA 9011 — and
903
+ Res. 231/2007 changed none of those colour NAMES, only the instrument
904
+ that carries them. Every PNU hex in this file is therefore a
905
+ conventional sRGB rendering of a NAMED RAL STANDARD, and the RAL number
906
+ is the citable fact (the sm.yml precedent: RAL publishes physical
907
+ standards, not sRGB values). The one colour with no RAL and no Pantone
908
+ anywhere in the chain is the Representação GOLD, which stays unsourced
909
+ and says so.
910
+ region_encoding:
911
+ mechanism: >-
912
+ NONE IN THE SERIAL, by instrument. Geography appeared on the tarjeta in
913
+ words (UF + municipality). Separately, DENATRAN allocated three-letter
914
+ blocks to each state under art. 4, so the letter group DOES correlate
915
+ with the state of first registration — but that allocation table is an
916
+ administrative act that was not found published, and it is not
917
+ reproduced here from secondary compilations.
918
+ table: null
919
+ gap: "UF → three-letter-range allocation table: sought, not found in primary or authority sources (see dossier)"
920
+ variants:
921
+ - class: taxi
922
+ name: aluguel
923
+ design: { background: { color: "#AF2B1E", hex_basis: ral-converted, spec_note: "VERMELHO = RAL 3000 (Feuerrot), Res. 45/98 Anexo item 11" }, foreground: "#F6F6F6" }
924
+ note: "'Aluguel' — hire vehicles (taxis, buses, rental): RED ground, WHITE characters. Colour-only variant of the same format and period per PRD-PLATES § 2.3."
925
+ sources:
926
+ - "https://web.archive.org/web/20140815083608/http://www.denatran.gov.br/download/Consolidadas/cons231.pdf # Anexo 5.1 colour table, row 'Aluguel'"
927
+ - class: dealer
928
+ name: aprendizagem
929
+ design: { background: { color: "#F6F6F6", hex_basis: ral-converted, spec_note: "BRANCA = RAL 9010" }, foreground: "#AF2B1E" }
930
+ note: "'Aprendizagem' — driving-school vehicles: WHITE ground, RED characters, i.e. the exact inverse of the hire plate. The Mercosul plate merged the two into one red-character category."
931
+ sources:
932
+ - "https://web.archive.org/web/20140815083608/http://www.denatran.gov.br/download/Consolidadas/cons231.pdf # Anexo 5.1, row 'Aprendizagem'"
933
+ - class: dealer
934
+ name: experiencia-fabricante
935
+ design: { background: { color: "#007243", hex_basis: ral-converted, spec_note: "VERDE = RAL 6016 (Tuerkisgruen) — a TURQUOISE green, not the grass green a renderer would guess; Res. 45/98 Anexo item 11" }, foreground: "#F6F6F6" }
936
+ note: "'Experiência/Fabricante' — trade and manufacturer test plates: GREEN ground, WHITE characters."
937
+ sources:
938
+ - "https://web.archive.org/web/20140815083608/http://www.denatran.gov.br/download/Consolidadas/cons231.pdf # Anexo 5.1, row 'Experiência/Fabricante'"
939
+ - class: historic
940
+ name: colecao
941
+ design: { background: { color: "#1C1C1C", hex_basis: ral-converted, spec_note: "PRETA = RAL 9011 (Graphitschwarz) ground, CINZA = RAL 7001 characters" }, foreground: "#8F999F" }
942
+ note: "'Coleção' — collector vehicles: BLACK ground, GREY characters. The direct ancestor of br-mercosul-collection-national-2022, which inverts the character colour to white and adds the blue band."
943
+ sources:
944
+ - "https://web.archive.org/web/20140815083608/http://www.denatran.gov.br/download/Consolidadas/cons231.pdf # Anexo 5.1, row 'Coleção'"
945
+ - class: government
946
+ name: representacao
947
+ design: { background: { color: "#1C1C1C", hex_basis: ral-converted, spec_note: "PRETA = RAL 9011 ground; NO RAL OR PANTONE is published anywhere in the chain for the gold characters — that hex stays unsourced" }, foreground: "#C9A227", foreground_hex_basis: unsourced }
948
+ note: "'Representação' — BLACK ground, GOLD characters, for representation vehicles carrying an ordinary alphanumeric combination (distinct from the bronze title plates of `special_plates`)."
949
+ sources:
950
+ - "https://web.archive.org/web/20140815083608/http://www.denatran.gov.br/download/Consolidadas/cons231.pdf # Anexo 5.1, row 'Representação'"
951
+ sources:
952
+ - "https://web.archive.org/web/20140815083608/http://www.denatran.gov.br/download/Consolidadas/cons231.pdf # Res. 231/2007 consolidated: art. 1 (3 letters + 4 digits), art. 1 § 1 (tarjeta), art. 3 (colour follows category, combination does not change), art. 4 (series allocation delegated), Anexo items 1, 2, 4, 5.1, 6, 7, 8, 10, 11"
953
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao045_98.zip # Res. 45/98 art. 1: the same grammar, seven years earlier, in the first CTB-era plate resolution"
954
+ - "https://www.in.gov.br/en/web/dou/-/resolucao-contran-n-969-de-20-de-junho-de-2022-410033795 # art. 2 § 3 names it the 'Placa Nacional Única (PNU)' and gives the printed form 'AAA-1111'; art. 57: PNU plates run to scrapping"
955
+ - "https://www.in.gov.br/en/web/dou/-/resolucao-n-780-de-26-de-junho-de-2019-179414765 # art. 21: PIV required for first registration from 31 January 2020 — the period.end evidence"
956
+ notes: >-
957
+ The PNU — three letters, four digits, grey plate, black characters, a
958
+ tarjeta naming the state and municipality — is the plate Brazil issued
959
+ for a generation, and it is still lawfully on the road in quantity — no
960
+ fleet share is claimed here because none was sourced. TWO PERIOD
961
+ CAVEATS, both material. (1) period.end 2020 is an ISSUANCE end, not a
962
+ validity end: Res. 969/2022 art. 57 lets these plates run "até o seu
963
+ sucateamento", so a 2026 PNU sighting is entirely lawful; the end year is
964
+ Res. 780/2019 art. 21's 31 January 2020 deadline, by which every DETRAN
965
+ had to demand the Mercosul plate at first registration. (2) period.start
966
+ 1990 is the SOFTEST claim in this file and is flagged as such: the
967
+ enabling instrument is Resolução CONTRAN nº 742, de 31 de outubro de 1989
968
+ ("Dispõe sobre sistema de placas de identificação de veículos", revoked by
969
+ Res. 754/91), whose existence, date and official title come from
970
+ DENATRAN's own catalogue *100 anos de Legislação de Trânsito no Brasil*
971
+ (2010) — its TEXT was not retrieved, so the file cannot show that 742/89
972
+ is where LLL-9999 was written down. What IS held verbatim is Res. 45/98
973
+ art. 1 (1998) and Res. 231/2007 art. 1 (2007), both prescribing exactly
974
+ this grammar, plus Res. 45/98 art. 8 and Res. 99/99 art. 1, which ordered
975
+ the national plate SUBSTITUTION completed by 31 December 1999 — evidence
976
+ that the rollout ran through the whole decade rather than landing in one
977
+ year. A verifier who pins the text of Res. 742/1989 (or of Res. 754/91)
978
+ closes the single largest evidence gap in this jurisdiction.
979
+
980
+ - id: br-pnu-official-1990
981
+ class: government
982
+ categories: [car, van, truck, bus]
983
+ period: { start: 1990, end: 2020 }
984
+ period_evidence: enabling-instrument
985
+ matching: strict
986
+ format:
987
+ pattern: "LLL-9999"
988
+ regex: '\A[A-Z]{3}[- ]?\d{4}\z'
989
+ charset: { note: "same grammar as the private series — the category is carried by colour and by tarjeta content, never by the combination" }
990
+ design:
991
+ plate: { w: 400, h: 130, unit: mm }
992
+ background: { color: "#F6F6F6", finish: retroreflective, hex_basis: ral-converted, spec_note: "BRANCA = RAL 9010 (Reinweiss), Res. 45/98 Anexo item 11 and Res. 231/2007 Anexo item 11" }
993
+ foreground: "#1C1C1C"
994
+ band: { side: none }
995
+ characters: { height_mm: 63, stroke_mm: 10, font: "Mandatory" }
996
+ tarjeta:
997
+ present: true
998
+ content_rule: "federal fleet: the word BRASIL; state fleet: the name of the Unidade da Federação; municipal fleet: the UF sigla + the municipality name"
999
+ note: "Res. 231/2007 art. 1 § 2, I-III. Official vehicles are the § 1 exception: they do NOT carry the ordinary UF+município tarjeta."
1000
+ rear_differs: false
1001
+ region_encoding:
1002
+ mechanism: "the tarjeta names the level of government and, for state and municipal fleets, the state or municipality — in words"
1003
+ sources:
1004
+ - "https://web.archive.org/web/20140815083608/http://www.denatran.gov.br/download/Consolidadas/cons231.pdf # art. 1 § 1 (official plates excepted from the ordinary tarjeta), art. 1 § 2 I-III (BRASIL / state name / UF + municipality), Anexo 5.1 row 'Oficial' (white ground, black characters)"
1005
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao045_98.zip # Res. 45/98 art. 1 § 1-§ 2: the identical rule a decade earlier"
1006
+ notes: >-
1007
+ Government fleets under the PNU: a WHITE plate with black characters —
1008
+ visually the same colour pair as a private plate but on white rather than
1009
+ grey — distinguished in the field by the tarjeta, which read BRASIL for
1010
+ federal vehicles, the state's name for state vehicles, and UF + municipality
1011
+ for municipal ones. Modelled as its own series rather than a colour variant
1012
+ of br-pnu-standard-1990 because the DESIGN differs beyond colour: the
1013
+ tarjeta carries different content by instrument. CTB art. 116 separately
1014
+ allows police and public-security vehicles in reserved service to wear
1015
+ ordinary private plates, which is why an official-looking Brazilian
1016
+ vehicle may lawfully carry a grey plate. Same period caveats as
1017
+ br-pnu-standard-1990: issuance ended by 31 January 2020, validity did not.
1018
+
1019
+ - id: br-pnu-diplomatic-2008
1020
+ class: diplomatic
1021
+ categories: [car, van]
1022
+ period: { start: 2008, end: 2020 }
1023
+ period_evidence: enabling-instrument # Res. 231/2007 art. 1 § 2 IV, in force 01-01-2008
1024
+ matching: strict
1025
+ format:
1026
+ pattern: "LLL-9999"
1027
+ regex: '\A[A-Z]{3}[- ]?\d{4}\z'
1028
+ charset: { note: "the ordinary grammar; the corps is encoded on the tarjeta, not in the combination" }
1029
+ design:
1030
+ plate: { w: 400, h: 130, unit: mm }
1031
+ background: { color: "#1D5B8C", finish: retroreflective, hex_basis: ral-converted, spec_note: "AZUL = RAL 5019 (Capriblau), Res. 45/98 Anexo item 11" }
1032
+ foreground: "#FFFFFF"
1033
+ band: { side: none }
1034
+ characters: { height_mm: 63, stroke_mm: 10, font: "Mandatory" }
1035
+ tarjeta:
1036
+ present: true
1037
+ content_rule: "a corps code stamped in the upper-central part of the plate (tarjeta), REPLACING the municipality"
1038
+ codes:
1039
+ CMD: "veículos de uso dos Chefes de Missão Diplomática"
1040
+ CD: "veículos pertencentes ao Corpo Diplomático"
1041
+ CC: "veículos pertencentes ao Corpo Consular"
1042
+ OI: "veículos pertencentes a Organismos Internacionais"
1043
+ ADM: "funcionários administrativos de carreira estrangeiros de Missões Diplomáticas, Repartições Consulares e Representações de Organismos Internacionais"
1044
+ CI: "peritos estrangeiros sem residência permanente, no âmbito de Acordo de Cooperação Internacional"
1045
+ note: "closed, small, primary list — inlined per PRD-PLATES § 2.4 rather than given a _decode file"
1046
+ rear_differs: false
1047
+ region_encoding:
1048
+ mechanism: "no geography; the tarjeta encodes the CORPS instead of the municipality"
1049
+ sources:
1050
+ - "https://web.archive.org/web/20140815083608/http://www.denatran.gov.br/download/Consolidadas/cons231.pdf # art. 1 § 2 IV a)-f): the CMD/CD/CC/OI/ADM/CI codes verbatim; Anexo 5.1 rows 'Missão Diplomática', 'Corpo Consular', 'Organismo Internacional', 'Corpo Diplomático', 'Organismo Consular/Internacional', 'Acordo Cooperação Internacional' — all blue ground, white characters; art. 11 (in force 01-01-2008)"
1051
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/cons286.pdf # Res. CONTRAN 286/2008 of 29-07-2008 (consolidated with 342/10) art. 1 § 2, verbatim: 'As placas de identificação dos veículos de que trata esta Resolução são as previstas na Resolução do CONTRAN nº 231/07, alterada pela Resolução nº 241/07, terão o fundo na cor azul e os caracteres na cor branca e as combinações alfanuméricas obedecerão a faixas específicas do RENAVAM distribuídas para cada unidade de federação' — the instrument that put foreign missions onto the ordinary three-letter numbering; accessed 2026-08-02"
1052
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao045_98.zip # Res. 45/98 Anexo item 5: the 1998 colour table has FIVE rows (Particular, Aluguel, Experiência, Aprendizagem, Fabricante) and NO diplomatic row — the negative evidence for period.start 2008"
1053
+ notes: >-
1054
+ PASS-2 CORRECTION TO period.start, and it is the one period this file
1055
+ moved. An earlier draft carried this series from 1990 on the assumption
1056
+ that diplomatic vehicles entered the three-letter system with everyone
1057
+ else. They did not: Res. 45/98's colour table (Anexo item 5) has five rows
1058
+ and no diplomatic row at all, and the six blue rows plus the
1059
+ CMD/CD/CC/OI/ADM/CI tarjeta codes appear for the first time in
1060
+ Res. 231/2007 art. 1 § 2 IV, in force 1 January 2008, with Res. 286/2008
1061
+ giving foreign missions their own procedural instrument six months later.
1062
+ Before that these vehicles carried a SEPARATE format — the corps letters
1063
+ CC, CD or CMD followed by four digits — which this file does NOT model
1064
+ because no instrument for it was secured; that is a recorded gap and an
1065
+ L4 target, and the secondary account (pt.wikipedia) dates the completion
1066
+ of the migration to December 2009. The blue diplomatic plate of the PNU
1067
+ era: six colour-table rows in
1068
+ Res. 231/2007 (Missão Diplomática, Corpo Consular, Organismo
1069
+ Internacional, Corpo Diplomático, Organismo Consular/Internacional, Acordo
1070
+ Cooperação Internacional) share one design — blue ground, white characters
1071
+ — and are distinguished by the tarjeta code, which is why they are one
1072
+ series here and not six. Its own series rather than a variant of
1073
+ br-pnu-standard-1990 for the same reason as the official series: the
1074
+ tarjeta content is prescribed differently. The Mercosul plate abolished
1075
+ the tarjeta, so from 2018 the corps is no longer readable off the plate —
1076
+ the single largest decode LOSS in the Brazilian transition, recorded again
1077
+ on the `diplomatico-consular` variant of br-mercosul-standard-2018.
1078
+
1079
+ - id: br-pnu-motorcycle-1990
1080
+ class: motorcycle
1081
+ categories: [motorcycle, moped, tricycle]
1082
+ period: { start: 1990, end: 2012 }
1083
+ period_evidence: instrument-in-force-upper-bound
1084
+ matching: strict
1085
+ format:
1086
+ pattern: "LLL-9999"
1087
+ regex: '\A[A-Z]{3}[- ]?\d{4}\z'
1088
+ design:
1089
+ plate: { w: 187, h: 136, unit: mm }
1090
+ background: { color: "#8F999F", finish: retroreflective, hex_basis: ral-converted, spec_note: "CINZA = RAL 7001 (Silbergrau), Res. 45/98 Anexo item 11" }
1091
+ foreground: "#1C1C1C"
1092
+ band: { side: none }
1093
+ characters: { height_mm: 42, stroke_mm: 6, font: "Mandatory", note: "Anexo item 3 b) also publishes the reduced per-character width table (A=36, B=30, … I=6, … 1=12, 0=24)" }
1094
+ layout: two-line
1095
+ layout_basis: observed
1096
+ rear_differs: false
1097
+ note: "rear plate only (CTB art. 115 § 6)"
1098
+ region_encoding:
1099
+ mechanism: "tarjeta with UF + municipality, as on the four-wheeled plate"
1100
+ sources:
1101
+ - "https://web.archive.org/web/20140815083608/http://www.denatran.gov.br/download/Consolidadas/cons231.pdf # Anexo item 3: 'motocicleta, motoneta, ciclomotor e triciclos motorizados ... a) dimensões da placa em milímetros: h = 136; c= 187; b) dimensões dos caracteres da placa em milímetros: h = 42; d = 6'"
1102
+ - "https://www.gov.br/transportes/pt-br/assuntos/transito/conteudo-contran/resolucoes/resolucao045_98.zip # Res. 45/98 Anexo item 3: the same 187 x 136 mm plate for 'biciclos, triciclos e similares motorizados' in 1998"
1103
+ notes: >-
1104
+ The small pre-2012 Brazilian motorcycle plate, 187 x 136 mm with 42 mm
1105
+ characters — a size unique to this era; every later Brazilian two-wheeler
1106
+ plate is 200 x 170 mm. period.end 2012 is an instrument boundary, not an
1107
+ observation: Res. 372/2011 inserted Anexo item 3.1 requiring motorcycles
1108
+ "fabricados ou quando da mudança de município, a partir de 1º de janeiro de
1109
+ 2012" to use the larger plate, so the small plate stopped being fitted to
1110
+ new machines at that date while remaining lawful on those already carrying
1111
+ it. Reflective film became compulsory for motorcycle plates in stages —
1112
+ hire category from 1 January 2008, other categories for machines registered
1113
+ or transferred from 1 January 2008, all remaining vehicles built from
1114
+ 1 January 2012 (art. 6 and its parágrafo único, as amended by Res. 241/07
1115
+ and 372/11) — so motorcycle plates fitted before those dates were under no
1116
+ reflective-film obligation at all.
1117
+
1118
+ - id: br-pnu-motorcycle-2012
1119
+ class: motorcycle
1120
+ categories: [motorcycle, moped, tricycle]
1121
+ period: { start: 2012, end: 2020 }
1122
+ period_evidence: instrument-dated-both-ends
1123
+ matching: strict
1124
+ format:
1125
+ pattern: "LLL-9999"
1126
+ regex: '\A[A-Z]{3}[- ]?\d{4}\z'
1127
+ design:
1128
+ plate: { w: 200, h: 170, unit: mm }
1129
+ background: { color: "#8F999F", finish: retroreflective, hex_basis: ral-converted, spec_note: "CINZA = RAL 7001 (Silbergrau), Res. 45/98 Anexo item 11" }
1130
+ foreground: "#1C1C1C"
1131
+ band: { side: none }
1132
+ characters: { height_mm: 53, font: "Mandatory" }
1133
+ layout: two-line
1134
+ layout_basis: observed
1135
+ rear_differs: false
1136
+ note: "rear plate only; this is the plate SIZE the Mercosul two-wheeler plate inherited unchanged"
1137
+ region_encoding:
1138
+ mechanism: "tarjeta with UF + municipality"
1139
+ sources:
1140
+ - "https://web.archive.org/web/20140815083608/http://www.denatran.gov.br/download/Consolidadas/cons231.pdf # Anexo item 3.1 (acrescentado pela Resolução nº 372/11): 'a partir de 1º de janeiro de 2012 ... a) dimensões da placa em milímetros: h = 170; c = 200; b) Altura do corpo dos caracteres da placa em milímetros: h = 53'"
1141
+ - "https://www.in.gov.br/en/web/dou/-/resolucao-n-780-de-26-de-junho-de-2019-179414765 # art. 21: PIV required at first registration from 31 January 2020 — the period.end evidence"
1142
+ notes: >-
1143
+ The larger PNU motorcycle plate, mandatory for machines built (or moved to
1144
+ another municipality) from 1 January 2012 under Res. 372/2011. Both ends of
1145
+ this period are instrument dates: 1 January 2012 in Res. 231/2007 Anexo 3.1
1146
+ as amended, and 31 January 2020 in Res. 780/2019 art. 21. Its dimensions —
1147
+ 200 x 170 mm, 53 mm characters — are exactly those the Mercosul two-wheeler
1148
+ plate then adopted, so the Brazilian motorcycle plate changed its colours,
1149
+ band and grammar in 2018-2020 without changing its size. Overlaps
1150
+ br-pnu-motorcycle-1990 at 2012 and br-mercosul-motorcycle-2018 from 2018,
1151
+ both deliberately: old stock and slow state rollouts kept all three in
1152
+ simultaneous issue.