linguagem-simples-br 1.6.1__tar.gz

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 (33) hide show
  1. linguagem_simples_br-1.6.1/LICENSE +21 -0
  2. linguagem_simples_br-1.6.1/PKG-INFO +427 -0
  3. linguagem_simples_br-1.6.1/README.md +412 -0
  4. linguagem_simples_br-1.6.1/linguagem_simples/__init__.py +7 -0
  5. linguagem_simples_br-1.6.1/linguagem_simples/__main__.py +82 -0
  6. linguagem_simples_br-1.6.1/linguagem_simples/detectores.py +632 -0
  7. linguagem_simples_br-1.6.1/linguagem_simples/incisos.py +80 -0
  8. linguagem_simples_br-1.6.1/linguagem_simples/lexicos/cores.txt +18 -0
  9. linguagem_simples_br-1.6.1/linguagem_simples/lexicos/documentos.txt +24 -0
  10. linguagem_simples_br-1.6.1/linguagem_simples/lexicos/estrangeirismos.txt +61 -0
  11. linguagem_simples_br-1.6.1/linguagem_simples/lexicos/jargoes.txt +51 -0
  12. linguagem_simples_br-1.6.1/linguagem_simples/lexicos/links-vagos.txt +65 -0
  13. linguagem_simples_br-1.6.1/linguagem_simples/lexicos/nominalizacoes.txt +15 -0
  14. linguagem_simples_br-1.6.1/linguagem_simples/lexicos/palavras-complexas.txt +111 -0
  15. linguagem_simples_br-1.6.1/linguagem_simples/lexicos/redundancias.txt +39 -0
  16. linguagem_simples_br-1.6.1/linguagem_simples/limiares.py +55 -0
  17. linguagem_simples_br-1.6.1/linguagem_simples/pagina.py +229 -0
  18. linguagem_simples_br-1.6.1/linguagem_simples/relatorio.py +170 -0
  19. linguagem_simples_br-1.6.1/linguagem_simples/texto.py +139 -0
  20. linguagem_simples_br-1.6.1/linguagem_simples_br.egg-info/PKG-INFO +427 -0
  21. linguagem_simples_br-1.6.1/linguagem_simples_br.egg-info/SOURCES.txt +31 -0
  22. linguagem_simples_br-1.6.1/linguagem_simples_br.egg-info/dependency_links.txt +1 -0
  23. linguagem_simples_br-1.6.1/linguagem_simples_br.egg-info/top_level.txt +1 -0
  24. linguagem_simples_br-1.6.1/pyproject.toml +33 -0
  25. linguagem_simples_br-1.6.1/setup.cfg +4 -0
  26. linguagem_simples_br-1.6.1/tests/test_detectores.py +881 -0
  27. linguagem_simples_br-1.6.1/tests/test_pacote.py +44 -0
  28. linguagem_simples_br-1.6.1/tests/test_pagina.py +204 -0
  29. linguagem_simples_br-1.6.1/tests/test_readme.py +33 -0
  30. linguagem_simples_br-1.6.1/tests/test_relatorio.py +215 -0
  31. linguagem_simples_br-1.6.1/tests/test_texto.py +52 -0
  32. linguagem_simples_br-1.6.1/tests/test_vitrine.py +245 -0
  33. linguagem_simples_br-1.6.1/tests/test_vitrine_html.py +49 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 peterwkdev-creator
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,427 @@
1
+ Metadata-Version: 2.4
2
+ Name: linguagem-simples-br
3
+ Version: 1.6.1
4
+ Summary: Verificador aberto da Lei 15.263/2025 (Política Nacional de Linguagem Simples): confere um texto contra as técnicas do art. 5º. Não é parecer jurídico.
5
+ Author: Peter
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/peterwkdev-creator/linguagem-simples-br
8
+ Project-URL: Issues, https://github.com/peterwkdev-creator/linguagem-simples-br/issues
9
+ Keywords: linguagem-simples,lei-15263,acessibilidade,plain-language,portugues,setor-publico
10
+ Classifier: Programming Language :: Python :: 3
11
+ Requires-Python: >=3.11
12
+ Description-Content-Type: text/markdown
13
+ License-File: LICENSE
14
+ Dynamic: license-file
15
+
16
+ # linguagem-simples-br
17
+
18
+ [![testes](https://github.com/peterwkdev-creator/linguagem-simples-br/actions/workflows/testes.yml/badge.svg)](https://github.com/peterwkdev-creator/linguagem-simples-br/actions/workflows/testes.yml)
19
+ [![versão](https://img.shields.io/github/v/release/peterwkdev-creator/linguagem-simples-br?label=vers%C3%A3o)](https://github.com/peterwkdev-creator/linguagem-simples-br/releases/latest)
20
+ [![licença: MIT](https://img.shields.io/badge/licen%C3%A7a-MIT-blue)](LICENSE)
21
+
22
+ Verificador aberto da **Lei 15.263/2025**, a Política Nacional de Linguagem
23
+ Simples. Confere um texto contra as 18 técnicas do art. 5º e diz, técnica por
24
+ técnica, o que achou, onde achou e o que não confere. Feito para servidor
25
+ público, órgão e quem escreve para o cidadão.
26
+
27
+ ![Um texto de órgão colado na página; um clique marca a frase longa, a voz passiva e a oração intercalada, e lista os 18 incisos](docs/vitrine.gif)
28
+
29
+ **[Experimente no navegador](https://peterwkdev-creator.github.io/linguagem-simples-br/)**:
30
+ cole o texto, ou o HTML de uma página, e clique. A página roda esta mesma biblioteca no seu
31
+ navegador (Pyodide); o texto não sai do seu computador. Na primeira visita
32
+ ela baixa cerca de 6 MB e fica pronta em 1,7 s (medido em 10/10/2026, numa
33
+ conexão rápida). Depois disso, conferir o texto do exemplo leva uns 5 ms.
34
+
35
+ **Precisão medida** em páginas de serviço do gov.br, por inciso: XII 100%,
36
+ XV 98%, XVII 98%, VI 96%, II 95%, XIV 88%, VIII 78%; o XIII acerta 31% e por isso
37
+ só aponta trechos para quem lê decidir. Intervalos em
38
+ [Precisão medida](#precisão-medida).
39
+
40
+ > O resultado aponta trechos para revisão. **Não é parecer jurídico** e não
41
+ > certifica que um texto cumpre a lei.
42
+
43
+ ## Instalar
44
+
45
+ Python 3.11 ou mais novo; só a biblioteca padrão, sem outra dependência.
46
+
47
+ ```bash
48
+ pip install linguagem-simples-br
49
+ ```
50
+
51
+ Ou direto da tag no GitHub:
52
+
53
+ ```bash
54
+ pip install "git+https://github.com/peterwkdev-creator/linguagem-simples-br@v1.6.1"
55
+ ```
56
+
57
+ Também roda sem instalar, de dentro da pasta do repositório.
58
+
59
+ ## Uso
60
+
61
+ Na linha de comando:
62
+
63
+ ```bash
64
+ python -m linguagem_simples texto.txt
65
+ ```
66
+
67
+ Em Python:
68
+
69
+ ```python
70
+ from linguagem_simples.relatorio import conferir
71
+
72
+ texto = "Procure o INSS para pedir o benefício."
73
+ for resultado in conferir(texto):
74
+ for o in resultado.ocorrencias:
75
+ print(resultado.inciso.numero, o.trecho, o.mensagem)
76
+ # VIII INSS INSS: primeira ocorrência sem o nome completo antes
77
+ ```
78
+
79
+ O arquivo é texto, Markdown ou HTML; `-` lê da entrada padrão. O relatório
80
+ lista os 18 incisos, na ordem da lei, cada um com a classe e o que
81
+ aconteceu. Mais exemplos [abaixo](#mais-exemplos).
82
+
83
+ ## Por quê
84
+
85
+ A Lei 15.263/2025 vale desde 17/11/2025 para a administração direta e
86
+ indireta de todos os Poderes e entes (art. 1º), inclusive os municípios. O
87
+ art. 5º lista 18 técnicas de escrita. Algumas se contam no texto (frase
88
+ longa, sigla sem o nome antes, voz passiva, link "clique aqui"); outras só
89
+ uma pessoa confere (o mais importante primeiro, o teste com o público).
90
+
91
+ Este verificador aponta o trecho de cada uma que se conta, diz quais não
92
+ confere e por quê, e publica quanto acerta, medido em páginas reais de
93
+ órgão. Cada limiar e cada palavra dos léxicos vem de um guia oficial, com
94
+ a página.
95
+
96
+ ## O que cobre
97
+
98
+ | Inciso | Texto da lei | O que o detector aponta | Padrão |
99
+ |---|---|---|---|
100
+ | II | redigir frases curtas | frase longa | mais de 20 palavras |
101
+ | III | desenvolver uma ideia por parágrafo | parágrafo longo, sinal de mais de uma ideia | mais de 8 frases |
102
+ | IV | usar palavras comuns, de fácil compreensão | palavra que um guia oficial manda trocar por outra mais conhecida ("o pedido foi deferido", "dez dias ininterruptos") e a forma que o guia sugere | léxico em `linguagem_simples/lexicos/palavras-complexas.txt`: 86 linhas do TJRS, da CAPES, da Anvisa e da SES-DF, com as formas do verbo |
103
+ | V | usar sinônimos de termos técnicos e de jargões ou explicá-los no próprio texto | termo técnico ou jargão que um guia manda trocar ou explicar ("exordial acusatória", "transitou em julgado"), quando o texto não o explica logo depois (entre parênteses, com "ou seja" ou "isto é") | léxico em `linguagem_simples/lexicos/jargoes.txt`: 32 entradas do TJRS, da SES-DF e da Anvisa |
104
+ | VI | evitar palavras estrangeiras que não sejam de uso corrente | palavra estrangeira que um guia oficial manda trocar ("faça o login", "um checklist") e a forma que o guia sugere | léxico em `linguagem_simples/lexicos/estrangeirismos.txt`: 36 entradas da CAPES, da Anvisa, do TJGO, do TJRS e do Manual de Comunicação do Senado |
105
+ | VIII | redigir o nome completo antes das siglas | primeira vez que a sigla aparece sem o nome antes | léxico de cores em `linguagem_simples/lexicos/`, com a fonte de cada palavra |
106
+ | IX | organizar o texto de forma esquemática, quando couber, com o uso de listas, tabelas e recursos gráficos | frase de parágrafo que anuncia uma série depois dos dois-pontos, com os itens separados por vírgula ou ponto e vírgula ("leve ao atendimento os documentos: RG, CPF e comprovante") | 3 itens ou mais |
107
+ | XII | redigir frases preferencialmente na voz ativa | verbo "ser" com particípio ("foi entregue pela empresa"), com ou sem quem faz a ação | — |
108
+ | XIII | evitar frases intercaladas | trecho entre vírgulas no meio da frase que começa por pronome relativo (", que deve ser apresentado pelo requerente,") | — |
109
+ | XIV | evitar o uso de substantivos no lugar de verbos | verbo de apoio com substantivo ("faça a identificação") e substantivo do léxico com complemento ("prevenção da Covid-19") | léxico em `linguagem_simples/lexicos/`, com a fonte de cada palavra |
110
+ | XV | evitar redundâncias e palavras desnecessárias | expressão do léxico com palavras sobrando ("compareça pessoalmente", "a fim de", "de acordo com") e a forma que o guia sugere | léxico em `linguagem_simples/lexicos/redundancias.txt`: 29 entradas do TRE-AL, do CJF e da CAPES, com a página |
111
+ | XVII | usar linguagem acessível à pessoa com deficiência (Lei 13.146/2015) | no HTML, link de texto vago ("clique aqui", "saiba mais"), imagem sem `alt` e tabela sem célula de cabeçalho (`th`); no texto e no Markdown, só o link vago | eMAG 3.1, recomendações 3.5, 3.6 e 3.10; léxico em `linguagem_simples/lexicos/links-vagos.txt`: 46 entradas |
112
+
113
+ O IV, o V, o VI, o IX, o XIII e o XVII são **sinal**, não automáticos: o
114
+ IV, o V e o VI só conhecem as palavras que um guia manda trocar; a palavra
115
+ difícil depende de quem lê (TJRS, p. 31), a lei aceita o termo técnico
116
+ explicado e a palavra estrangeira de uso corrente; o IX acerta 73% das
117
+ vezes, e a lei diz "quando couber"; o XIII acerta 31%; o XVII confere só
118
+ três pontos do que a Lei 13.146/2015 pede. Os seis apontam trechos para
119
+ quem lê decidir. Os outros seis são automáticos.
120
+
121
+ Os outros 6 incisos aparecem no relatório com a classe de cada um:
122
+ **automático** (dá para contar; detector ainda não escrito), **sinal** (dá
123
+ para apontar, quem lê decide) ou **fora do alcance** (X e XVIII: só uma
124
+ pessoa confere). O inciso XI vem desligado por padrão.
125
+
126
+ A lei não fixa número. Cada limiar vem de um guia oficial, com a página, em
127
+ `linguagem_simples/limiares.py`, e quem usa pode trocar.
128
+
129
+ ## Como é testado
130
+
131
+ Para rodar os testes:
132
+
133
+ ```bash
134
+ python -m unittest -v
135
+ ```
136
+
137
+ Cada detector passa por duas provas: pega o defeito plantado e não dispara
138
+ no texto que um guia oficial dá como bom. Onde o guia traz um par "antes e
139
+ depois", o "antes" tem de dar mais ocorrências que o "depois". Os trechos
140
+ estão em `tests/guias.py`, com a página e o hash do PDF. Os exemplos em
141
+ Python deste README rodam nos testes, como estão.
142
+
143
+ ### Precisão medida
144
+
145
+ Dos trechos que cada detector aponta, quantos uma pessoa, lendo o trecho na
146
+ página, confirma. Páginas de serviço do gov.br sorteadas, padrões de
147
+ fábrica, critério escrito antes de anotar e duas passagens, a segunda às
148
+ cegas:
149
+
150
+ | Inciso | Precisão | Acertos / anotados | Intervalo de 95% (Wilson) | Amostra |
151
+ |---|---|---|---|---|
152
+ | XII | 100% | 59 / 59 | 94% a 100% | 30 páginas, 09/10/2026 |
153
+ | XV | 98% | 59 / 60 | 91% a 100% | 150 páginas, 10/10/2026 |
154
+ | XVII | 98% | 49 / 50 | 90% a 100% | 150 páginas, 10/10/2026 |
155
+ | IV | 98% | 40 / 41 | 87% a 100% | 490 páginas, 11/10/2026 |
156
+ | VI | 96% | 25 / 26 | 81% a 99% | 120 páginas novas, 10/10/2026 |
157
+ | II | 95% | 57 / 60 | 86% a 98% | 30 páginas, 09/10/2026 |
158
+ | XIV | 88% | 21 / 24 | 69% a 96% | 30 páginas, 09/10/2026 |
159
+ | VIII | 78% | 38 / 49 | 64% a 87% | 30 páginas, 09/10/2026 |
160
+ | IX | 73% | 22 / 30 | 56% a 86% | 220 páginas novas, 10/10/2026 |
161
+ | XIII | 31% | 13 / 42 | 19% a 46% | 150 páginas, 09/10/2026 |
162
+
163
+ III não apontou nada nas 30 páginas da primeira amostra: sem número.
164
+ Precisão não é cobertura: o que o detector deixa passar não entra nesta
165
+ conta. Do XVII, a cobertura também foi medida: em 30 páginas novas, dos
166
+ 18 nomes de link vagos, ele aponta 5 (**28%**, de 12% a 51%), sem apontar
167
+ nenhum nome que diz o destino. O léxico dele é uma lista fechada (46
168
+ expressões na 1.2.0): "Acesse o serviço", "Protocolar" ou as abas "O que
169
+ é?" do modelo do gov.br passam sem marca. O IX foi medido duas vezes: a
170
+ 1ª versão acertou 43% nas 180 páginas das outras amostras, quase sempre
171
+ errando no dois-pontos de rótulo ("Atenção:", "Endereço:"); a 1.3.0 não
172
+ conta esse dois-pontos, e o número acima é dela, em páginas que nenhuma
173
+ versão tinha visto. A cobertura do IX é baixa por desenho: das 59
174
+ enumerações dentro de parágrafo numa amostra de 150 frases com série
175
+ ("Pix, cartão de crédito ou boleto"), ele aponta 4 (**7%**, de 3% a 16%),
176
+ porque 52 delas não têm dois-pontos. Sem marca do IX não quer dizer sem
177
+ enumeração. O VI erra pouco e deixa passar muito: o único erro foi "login
178
+ único", nome de serviço; mas, das 20 palavras estrangeiras que duas
179
+ passagens às cegas mandariam trocar em 30 páginas novas ("courier",
180
+ "upload", "in loco", "vide"), ele aponta 2 (**10%**, de 3% a 30%), porque
181
+ só conhece as que um guia lista. E quase tudo o que ele aponta é "login"
182
+ (96 de 103 nas 120 páginas), que a CAPES manda trocar por "acesso", mas
183
+ que as mesmas passagens deram como de uso corrente: quem lê decide. Cada
184
+ O IV é a palavra que um guia manda trocar ("protocolar",
185
+ "requerer", "deferimento"): o único erro foi o nome de uma opção da tela
186
+ entre aspas; em 5 dos 40 acertos, a forma do guia não cabe ("a licença
187
+ será expedida": cabe "emitida", não "enviada"), e a mensagem diz o que o
188
+ guia sugere, não o que serve no trecho. O V acerta onde aponta (8 de 8
189
+ em páginas de serviço, **amostra pequena**), mas a lista dos guias é
190
+ estreita: em 120 notícias do CNJ ele apontou uma vez, e dos 77 termos
191
+ técnicos que duas passagens às cegas listaram em 30 delas ("autos",
192
+ "liminar", "mérito", "precatórios"), não apontou nenhum (**0%**, de 0% a
193
+ 5%). Sem marca do V não quer dizer sem jargão. Cada
194
+ amostra, o método e o que os erros mostram estão em
195
+ [docs/precisao.md](docs/precisao.md).
196
+
197
+ ## Mais exemplos
198
+
199
+ O relatório em texto, com a linha e a coluna de cada trecho:
200
+
201
+ ```text
202
+ II. redigir frases curtas
203
+ automático; limiar 20, fonte: TJGO p. 9, TRE-AL p. 13, CJF p. 6 e outros dois guias: até 20 palavras por frase (CAPES dá 25); 1 ocorrência
204
+ - linha 1, coluna 1: frase com 27 palavras (limiar: 20): “Certifico e dou fé que, dando cumprimento ao mandado subscrito extraí…”
205
+
206
+ VIII. redigir o nome completo antes das siglas
207
+ automático; 1 ocorrência
208
+ - linha 3, coluna 21: INSS: primeira ocorrência sem o nome completo antes: “INSS”
209
+
210
+ X. organizar o texto a fim de que as informações mais importantes apareçam primeiramente
211
+ fora do alcance; não conferido: só uma pessoa confere
212
+ ```
213
+
214
+ HTML é reconhecido pela extensão (`.html`, `.htm`), pelo começo do arquivo
215
+ (`<!doctype html>` ou `<html>`) ou pela opção `--html`. Texto e Markdown em
216
+ UTF-8; HTML em UTF-8 ou no charset que a página declara.
217
+
218
+ | Opção | O que faz |
219
+ |---|---|
220
+ | `--json` | relatório em JSON, com início, fim, linha e coluna de cada trecho no arquivo lido |
221
+ | `--html` | lê como HTML um arquivo que não tem extensão `.html` |
222
+ | `--max-palavras N` | inciso II: palavras por frase (padrão 20) |
223
+ | `--max-frases N` | inciso III: frases por parágrafo (padrão 8) |
224
+ | `--ignorar-sigla SIGLA` | inciso VIII: sigla que o público já conhece (repetível) |
225
+ | `--ligar INCISO` | liga um inciso desligado por padrão, como o XI |
226
+ | `--desligar INCISO` | desliga um inciso |
227
+ | `--versao` | mostra a versão |
228
+
229
+ Código de saída: 0 sem ocorrências, 1 com ocorrências, 2 erro de uso ou de
230
+ leitura.
231
+
232
+ Também dá para usar como biblioteca, com a posição de cada trecho:
233
+
234
+ ```python
235
+ from linguagem_simples.relatorio import conferir, como_dict
236
+
237
+ texto = "Procure o INSS. O atendimento é feito de segunda a sexta-feira."
238
+ for resultado in conferir(texto):
239
+ for ocorrencia in resultado.ocorrencias:
240
+ print(ocorrencia.inciso, ocorrencia.inicio, ocorrencia.mensagem)
241
+ # VIII 10 INSS: primeira ocorrência sem o nome completo antes
242
+ # XII 30 voz passiva sem agente: a frase não diz quem faz a ação
243
+ ```
244
+
245
+ Para HTML, `ler_html` tira o texto e guarda onde cada trecho e cada link,
246
+ imagem e tabela estão na página; o relatório recebe a página no lugar do
247
+ texto, confere também o XVII e dá linha e coluna no HTML:
248
+
249
+ ```python
250
+ from linguagem_simples.pagina import ler_html
251
+ from linguagem_simples.relatorio import conferir, como_texto
252
+
253
+ pagina = ler_html('<main><p>Para pedir, <a href="/pedir">clique aqui</a>.</p></main>')
254
+ for resultado in conferir(pagina):
255
+ for o in resultado.ocorrencias:
256
+ print(o.inciso, o.trecho, o.mensagem)
257
+ # XVII clique aqui link com texto que não diz o destino (eMAG 3.5)
258
+ print(como_texto(conferir(pagina), pagina))
259
+ ```
260
+
261
+ Os detectores também se chamam um a um, em `linguagem_simples/detectores.py`.
262
+
263
+ ## Fontes e limites
264
+
265
+ ### Guias usados
266
+
267
+ Consultados em 09/10/2026:
268
+
269
+ - TJGO, Guia de Linguagem Simples do TJGO
270
+ - CAPES, O uso da Linguagem Simples na CAPES (2026)
271
+ - Anvisa, Guia de Linguagem Simples, 1ª edição
272
+ - TRE-AL, Linguagem Simples – Cartilha (2024)
273
+ - CJF, Guia de Linguagem Simples (2024)
274
+ - SES-DF, Guia para simplificar documentos (2024)
275
+ - 10 dicas para escrever um documento em Linguagem Simples (repositório da
276
+ Enap)
277
+
278
+ Consultado em 10/10/2026: eMAG, Modelo de Acessibilidade em Governo
279
+ Eletrônico, versão 3.1 (obrigatório no governo federal pela Portaria SLTI
280
+ nº 3, de 07/05/2007), recomendações 3.5, 3.6 e 3.10. Também em 10/10/2026:
281
+ Senado Federal, Manual de Comunicação, verbete "Estrangeirismo" (pares do
282
+ VI e a lista de palavras de uso amplo, que o VI não aponta) e a lista
283
+ "Estrangeirismos grafados sem itálico ou aspas"; TJRS, Guia de Linguagem
284
+ Simples (2022), quadro de palavras complexas (p. 31 e 32, IV), exemplos de
285
+ jargões e termos técnicos (p. 34) e quadro "Expressões que devem ser
286
+ evitadas" (p. 107, V), quadro de expressões estrangeiras (p. 36); TRF3, Escola de
287
+ Magistrados, "Expressões latinas em textos jurídicos" (2021).
288
+
289
+ Texto da lei: publicação original no portal da Câmara dos Deputados, DOU de
290
+ 17/11/2025.
291
+
292
+ Outras fontes: Dicionário Priberam da Língua Portuguesa (um verbete por
293
+ palavra do léxico de cores) e Lei Complementar 95/1998, art. 4º, no portal
294
+ do Planalto (epígrafe de ato normativo em maiúsculas).
295
+
296
+ ### Limites conhecidos
297
+
298
+ - Sigla escrita como nome próprio ("Lacen", "Anvisa") não é reconhecida.
299
+ - Com o padrão de 20 palavras, o "depois" da CAPES e o da Anvisa ainda
300
+ têm uma frase acima de 20 (de 21 a 23 palavras); os dois guias aceitam até
301
+ 25. Com `--max-palavras 25`, nada aparece.
302
+ - VI é uma lista fechada de 36 entradas, cada uma com a fonte: palavra
303
+ estrangeira fora dela passa (10% de cobertura, acima). "Upload",
304
+ "courier", "desktop", "packing list" e "in loco", que as passagens
305
+ mandariam trocar, passam porque nenhum guia oficial lido dá a forma a
306
+ usar no lugar. As 12 entradas do TJRS (1.5.0: "performance",
307
+ "expertise", "in casu", "in natura"…) ficaram fora da medida de 96%:
308
+ nas 520 páginas do gov.br já lidas, aparecem em 2, e acertam nas 2.
309
+ Não aponta as que os guias dão como de uso corrente (e-mail, site,
310
+ mouse, download, on-line; "vide", "status" e "data venia", para o
311
+ Senado e o TRF3), nem "menu", que o Senado troca por "cardápio" mas que nas
312
+ páginas de serviço é sempre o menu da tela. Não aponta a palavra dentro
313
+ de endereço ("gov.br/login"). A sugestão é a do guia e nem sempre cabe:
314
+ em "login e senha", cabe "usuário", não "acesso" (11 dos 25 acertos).
315
+ Numa página do gov.br lida inteira, aponta o título "Login Integrado"
316
+ do rodapé do portal.
317
+ - IX não aponta série de dois itens ("RG e CPF"): com dois, o "e" não
318
+ separa a enumeração de uma frase comum. Os pares da DICAS (p. 2) e da
319
+ SES-DF (p. 6), que põem dois itens em tópicos, passam sem marca. Também
320
+ não conta o dois-pontos com menos de 5 palavras antes ("Atenção: leve o
321
+ RG, o CPF e o título"), que nas páginas do gov.br é quase sempre rótulo
322
+ de campo, nem a série que a página já põe em lista ou tabela. A série
323
+ sem dois-pontos ("pague por Pix, cartão ou boleto") também passa: é a
324
+ maioria das enumerações dentro de parágrafo (52 de 59 na medida).
325
+ - XII aponta toda voz passiva com "ser", e a lei diz "preferencialmente":
326
+ o texto que os guias dão como bom também tem passiva sem agente ("podem
327
+ ser utilizadas", TRE-AL; "pode ser punido", Anvisa). A mensagem diz se a
328
+ frase tem ou não quem faz a ação; quem lê decide.
329
+ - XII não pega a passiva com "-se" ("recomenda-se"). O par da CAPES
330
+ ("é responsabilidade da CAPES") fica de fora: não tem verbo na passiva.
331
+ - XIII só pega o trecho entre vírgulas com pronome relativo; entre
332
+ travessões, não. Não sabe onde a oração termina: aponta a oração no fim
333
+ da frase quando ela tem vírgula por dentro (31% de precisão, acima).
334
+ - XIV conhece só as palavras que os guias trazem (12, com o plural); fora
335
+ delas, só aponta "fazer" ou "promover" com substantivo em -ção ou -mento.
336
+ - XV conhece só as expressões que os guias trazem. Nas páginas do gov.br,
337
+ quase tudo o que ele aponta é "de acordo com" (TRE-AL p. 17: prefira
338
+ "segundo, conforme, como"); os pleonasmos da lista ("subir para cima")
339
+ não apareceram. "No Estado de Pernambuco" (CJF) fica de fora: pede a
340
+ lista dos estados.
341
+ Não aponta a palavra depois de nome de documento com "de" ("Guia de
342
+ Recolhimento"): o nome do documento não se troca por verbo.
343
+ - XVI sem detector, e com a classe **sinal**: nenhum guia
344
+ oficial dá lista de palavras imprecisas. O Manual de Redação da
345
+ Presidência (2018, p. 17) e o TJMG (p. 6) só dão a regra; a CAPES
346
+ (p. 11), um exemplo ("por descumprimento da norma"); o TJRS (p. 58),
347
+ comandos de despacho ("cumpra-se", "intime-se"). E o mesmo Manual usa
348
+ "oportunamente" num exemplo certo (p. 62), que o TJGO (p. 15) reescreve.
349
+ Se a palavra é imprecisa depende do contexto: quem lê decide.
350
+ - XVII lê só a marcação: não vê a imagem, não segue o link e não aplica o
351
+ CSS. Confere três recomendações do eMAG; as outras exigências da Lei
352
+ 13.146/2015 que o inciso cita ficam com quem lê. No texto e no Markdown,
353
+ só aponta o link vago ("[clique aqui](url)").
354
+ - XVII conta como nome do link o texto, o `alt` da imagem dentro dele, o
355
+ `aria-label` e o `aria-labelledby`; o `title` não conta (eMAG 3.5). Link
356
+ sem nome nenhum fica de fora. Imagem com `alt=""`, `aria-hidden="true"`
357
+ ou `role="presentation"` é enfeite e fica de fora; tabela com
358
+ `role="presentation"` também. Tabela de leiaute sem esse `role` é
359
+ apontada: quem lê decide.
360
+ - XVII nas páginas do gov.br: o "Saiba mais" do quadro "Login Integrado"
361
+ do portal fica dentro do `<main>` e aparece em quase toda página. Já as
362
+ abas do modelo de página de serviço ("O que é?", "Quem pode utilizar
363
+ este serviço?", "Etapas para a realização deste serviço", "Outras
364
+ Informações") também são vagas pelo eMAG 3.5, mas o XVII não as aponta:
365
+ vêm do portal, não do texto do órgão. Sem marca nelas não quer dizer
366
+ que estão certas.
367
+ - HTML: se a página tem `<main>`, só o que está dentro dele conta; sem
368
+ `<main>`, a página inteira, menos menu (`<nav>`), código, formulário e o
369
+ que tem o atributo `hidden`. O CSS não é aplicado: texto escondido por
370
+ CSS entra. Elementos lado a lado sem espaço no HTML colam as palavras
371
+ ("22:24Modificado").
372
+ - VIII deixa de fora a palavra em caixa alta que aparece em minúscula no
373
+ mesmo texto (de cinco letras em diante), o nome de cor ("VERMELHO -
374
+ Emergência"), endereço ("GOV.BR") e o "DE" e o mês da data na epígrafe
375
+ de ato normativo ("RDC Nº 513, DE 27 DE MAIO DE 2021", que a LC 95/1998,
376
+ art. 4º, manda grafar em maiúsculas). Fora disso, palavra comum em caixa
377
+ alta ainda é apontada ("SENHA", "BUSCAR").
378
+ - VIII reconhece o nome antes da sigla ligado a ela ("Nome (SIGLA)",
379
+ "Nome - SIGLA" ou o nome próprio colado, "Nome SIGLA", com uma ou mais
380
+ letras de cada palavra e até duas palavras puladas) ou, em qualquer
381
+ ponto antes, como nome próprio cujas iniciais são a sigla: o nome
382
+ inteiro ou, se a sigla tem três letras ou mais, o fim dele depois de um
383
+ conectivo ("Secretaria Especial da Receita Federal do Brasil" serve a
384
+ RFB). Com duas letras, o fim do nome coincide demais ("Cadastro de
385
+ Pessoa Física" e a PF de Polícia Federal). Fora disso aponta:
386
+ "Coordenação-Geral de Autorização para Transferência Fusão, Cisão,
387
+ Incorporação e Retirada - CGTR" pula quatro palavras do nome. Abreviatura de mês ("31 DEZ")
388
+ também é apontada, e a sigla cujas letras não saem das iniciais do nome
389
+ que vem antes: a sigla em inglês ("Serviços de Tráfego Aéreo (ATS)") e a
390
+ que pega sílabas ("Cadastro de Imóveis Rurais (CAFIR)").
391
+
392
+ ## O que há em cada pasta
393
+
394
+ - `linguagem_simples/`: a biblioteca. `incisos.py` tem os 18 incisos, com
395
+ o texto da lei e a classe de cada um; `texto.py` divide o texto em
396
+ blocos e frases; `pagina.py` lê o HTML; `detectores.py`, um detector por
397
+ inciso; `limiares.py`, os limiares com a fonte; `relatorio.py`, o
398
+ relatório em texto e JSON; `__main__.py`, a linha de comando.
399
+ - `linguagem_simples/lexicos/`: os léxicos, uma entrada por linha, com a
400
+ fonte.
401
+ - `tests/`: os testes; `tests/guias.py` traz os trechos dos guias, com a
402
+ página e o hash, e `tests/test_readme.py` roda os exemplos deste README.
403
+ - `vitrine/`: a página do "Experimente no navegador". O GitHub Actions a
404
+ monta e publica a cada push que muda a biblioteca, a página ou os testes
405
+ (`.github/workflows/pages.yml`).
406
+ - `docs/`: o GIF do começo deste README e o
407
+ [histórico da precisão](docs/precisao.md).
408
+ - [`CHANGELOG.md`](CHANGELOG.md): o que mudou em cada versão.
409
+
410
+ ## Compatibilidade
411
+
412
+ Versão semântica: o formato do relatório (texto e JSON) e as opções da
413
+ linha de comando só mudam numa versão 2; detector novo sai numa 1.x. O que
414
+ mudou em cada versão está no [CHANGELOG.md](CHANGELOG.md).
415
+
416
+ ## Contribuir
417
+
418
+ Resultado diferente do esperado ou caso que falta?
419
+ [Abra uma issue](https://github.com/peterwkdev-creator/linguagem-simples-br/issues/new/choose)
420
+ pelo modelo "Resultado diferente do esperado", com texto inventado ou de
421
+ página pública, sem dado de pessoa. Para mandar código, veja o
422
+ [CONTRIBUTING.md](CONTRIBUTING.md); a conversa segue o
423
+ [código de conduta](CODE_OF_CONDUCT.md).
424
+
425
+ ## Licença
426
+
427
+ [MIT](LICENSE).