Skip to content

fix: corrige is_valid_legal_process para retornar False em entradas malformadas - #794

Open
leopranzl wants to merge 3 commits into
brazilian-utils:mainfrom
leopranzl:793
Open

leopranzl wants to merge 3 commits into
brazilian-utils:mainfrom
leopranzl:793

Conversation

@leopranzl

@leopranzl leopranzl commented Oct 21, 2026 •

Copy link
Copy Markdown

Descrição

is_valid_legal_process levantava ValueError quando o número limpo não tinha 20 dígitos ou continha letras, e aceitava como válido um número com dígitos não ASCII (ex.: "٠"). Este PR faz a função retornar False nesses casos, como os outros validadores da biblioteca.

Mudanças Propostas

  • Nova função interna _is_twenty_digits, que verifica se a string tem exatamente 20 dígitos ASCII (re.fullmatch(r"\d{20}", ..., flags=re.ASCII)). str.isdigit não basta porque aceita caracteres como "²" e "٣".
  • is_valid_legal_process retorna False para entradas que não são string e para strings que, sem os símbolos, não têm 20 dígitos ASCII, antes de converter os campos com int().
  • format_legal_process usa a mesma verificação e retorna None para dígitos não ASCII.
  • Testes de regressão: números truncados (campos TR e OOOO vazios), letras, dígitos não ASCII e entradas que não são string. Os dois testes novos falham na main e passam com a correção.

Checklist de Revisão

  • Eu li o Contributing.md
  • Os testes foram adicionados ou atualizados para refletir as mudanças (se aplicável).
  • Foi adicionada uma entrada no changelog / Meu PR não necessita de uma nova entrada no changelog.
  • A documentação em português foi atualizada ou criada, se necessário. (Não necessário: o comportamento documentado não muda.)
  • Se feita a documentação, a atualização do arquivo em inglês. (Não necessário.)
  • Eu documentei as minhas mudanças no código, adicionando docstrings e comentários. Instruções
  • O código segue as diretrizes de estilo e padrões de codificação do projeto.
  • Todos os testes passam. Instruções
  • O Pull Request foi testado localmente. Instruções
  • Não há conflitos de mesclagem.

Declaração de Uso de IA (OBRIGATÓRIA)

  • Nenhuma ferramenta de IA foi utilizada na preparação deste PR.
  • Se ferramentas de IA foram utilizadas, eu informei quais foram e revisei e verifiquei completamente os resultados gerados.

Usei o Claude Code (Anthropic) para investigar o bug, escrever a correção e os testes. Revisei o diff e conferi os resultados: python -m unittest discover tests (178 testes passando), ruff format --check . e ruff check . com a versão do pyproject.toml.

Comentários Adicionais (opcional)

O PR #743 tratava parte disso, mas foi fechado sem issue associada; este segue o fluxo do CONTRIBUTING, com issue atribuída.

Issue Relacionada

Closes #793

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Bug Fixes
    • Legal-process validation now rejects malformed or incomplete numbers, non-string inputs, and non-ASCII digits.
    • Formatting returns no result for legal-process numbers containing non-ASCII digits.

leopranzl and others added 2 commits October 20, 2026 16:37
is_valid_legal_process levantava ValueError quando o número limpo não
tinha 20 dígitos ou continha letras, porque os campos TR e OOOO eram
convertidos com int() sem validação prévia. Também aceitava como válido
um número com dígitos não ASCII, como "٠", que str.isdigit e int aceitam.

Agora a função retorna False para qualquer entrada que não seja uma
string com exatamente 20 dígitos ASCII depois de remover os símbolos.
format_legal_process passa a usar a mesma verificação e retorna None
para dígitos não ASCII.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@leopranzl
leopranzl requested review from a team as code owners October 21, 2026 15:34
Copilot AI balanced review requested due to automatic review settings October 21, 2026 15:34

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.

@codecov

codecov Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.84%. Comparing base (a79982d) to head (1f96910).

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #794   +/-   ##
=======================================
  Coverage   98.83%   98.84%           
=======================================
  Files          26       26           
  Lines         775      781    +6     
=======================================
+ Hits          766      772    +6     
  Misses          9        9           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@coderabbitai

coderabbitai Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 35a9dbd5-4c81-4bc0-8287-c947c4f27d0e
Commits

Reviewing files that changed from the base of the PR and between a79982d and 1f96910.

Files selected for processing: 3
  • CHANGELOG.md
  • brutils/legal_process.py
  • tests/test_legal_process.py

Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 3 remain after this review.

Walkthrough

The legal-process validator now rejects non-string inputs and cleaned numbers that do not contain exactly 20 ASCII digits. The formatter also rejects non-ASCII digits. Tests and the changelog cover these behaviors.

Changes: Legal-process validation

Layer / File(s) Summary
Enforce ASCII-digit input
brutils/legal_process.py, tests/test_legal_process.py, CHANGELOG.md
A shared check requires exactly 20 ASCII digits. The formatter and validator use it to reject malformed input. Tests cover malformed values and valid ASCII-digit input. The changelog records the behavior.

Priority: Normal

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix · Severity of issue fixed: Medium

Suggested reviewers: marcelfox

Merge Risk: Minimal · up to 1f969

No actionable merge-blocking risk is established for the legal-process input changes. Merge after normal checks.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 6 functions across 2 files. (1 skipped: 1… Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Title check Passed O título descreve de forma clara e concisa a correção principal para entradas malformadas em is_valid_legal_process.
Description check Passed A descrição segue o template, explica o problema e as mudanças, registra testes, changelog, uso de IA e a issue relacionada.
Linked Issues check Passed A implementação atende à issue #793. is_valid retorna False para entradas que não são str e para valores que, após remove_symbols, não têm exatamente 20 dígitos ASCII. A validação ocorre antes…
Out of Scope Changes check Passed As mudanças permanecem no escopo da issue #793. O código altera somente a validação e a formatação de processos legais. Os testes de regressão e a entrada no CHANGELOG.md documentam o comportamento …
Full details: Linked Issues check

Explanation

A implementação atende à issue #793. is_valid retorna False para entradas que não são str e para valores que, após remove_symbols, não têm exatamente 20 dígitos ASCII. A validação ocorre antes das conversões com int(). format_legal_process usa _is_twenty_digits e retorna None para dígitos não ASCII. Os testes cobrem entradas truncadas, letras, dígitos não ASCII, int, None e um número ASCII válido.

Full details: Out of Scope Changes check

Explanation

As mudanças permanecem no escopo da issue #793. O código altera somente a validação e a formatação de processos legais. Os testes de regressão e a entrada no CHANGELOG.md documentam o comportamento corrigido. Não há mudança não relacionada demonstrada.

Full details: Docstring Coverage

Explanation

Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 6 functions across 2 files. (1 skipped: 1 unsupported.)

Resolution

Write docstrings for the functions missing them to satisfy the coverage threshold.

Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@leopranzl leopranzl changed the title Corrige is_valid_legal_process para retornar False em entradas malformadas fix: corrige is_valid_legal_process para retornar False em entradas malformadas Oct 21, 2026
@niltonpimentel02

Copy link
Copy Markdown
Member

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
✅ Action performed

Full review finished.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

is_valid_legal_process levanta ValueError para entradas malformadas e aceita dígitos não ASCII

3 participants