feat: add stripCpfCnpj (alphanumeric-safe CPF/CNPJ sanitizer)#39
Merged
Conversation
Expõe um export público `stripCpfCnpj` que remove os separadores da máscara e normaliza para upper-case PRESERVANDO as letras do CNPJ alfanumérico (RFB NT 49/2024). Delega ao `stripAlphanumeric` interno (já usado/testado por maskValue, normalizeCpfOrCnpj e formatCnpj), evitando duplicar a regra. Motivação: hoje os MFEs usam `stripNumbers`/`value.replace(/\D/g,'')` para limpar CNPJ, o que descarta as letras A–Z e quebra CNPJ alfanumérico a partir de 2026. Como não havia um *strip* alfanumérico-safe público (stripNumbers é destrutivo; normalizeCpfOrCnpj aplica máscara, o inverso), cada MFE criou um helper local. Este export centraliza a regra em um único ponto de atualização, conforme stack/alphanumeric-cnpj-stripping.md (§2), e permite remover os helpers duplicados nos MFEs. stripCpfCnpj é o inverso de normalizeCpfOrCnpj. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
leonardodouradol
approved these changes
Jun 18, 2026
danimuller20
approved these changes
Jun 18, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adiciona um export público
stripCpfCnpj— o sanitizador de CPF/CNPJ que estava faltando para o ecossistema lidar com CNPJ alfanumérico (Receita Federal — NT 49/2024, vigente a partir de 2026).Remove só os separadores da máscara (qualquer não-alfanumérico) e normaliza para upper-case, preservando as letras do CNPJ alfanumérico. É o inverso de
normalizeCpfOrCnpj(que aplica a máscara).Por quê
Hoje os MFEs limpam CNPJ com
stripNumbersouvalue.replace(/\D/g, '')— ambos descartam as letras A–Z e transformam um CNPJ alfanumérico válido em inválido (AB.345.678/XY01-74→3456780174). O bug aparece como "CNPJ inválido"/"cliente não encontrado" para novos clientes a partir de 2026.Não havia um strip alfanumérico-safe público na lib:
stripNumbers→ destrutivo (/\D/g)normalizeCpfOrCnpj→ aplica máscara (o inverso de um strip)Por isso vários MFEs criaram helpers locais
stripCnpj/stripCpfCnpjduplicados (mfe-signup, mfe-bill, mfe-charge-management, mfe-payment-transfer, mfe-suppliers-lighthouse, mfe-pix, mfe-home). Este export centraliza a regra num único ponto de atualização, conformestack/alphanumeric-cnpj-stripping.md(§2 — helper central), e permite remover os helpers locais.Implementação
src/utils/stripCpfCnpj.ts— delega aostripAlphanumericinterno (src/masks/strip.ts), que já é usado e testado pormaskValue,maskComplete,normalizeCpfOrCnpjeformatCnpj. Zero lógica nova/duplicada.src/index.ts— novo export na seção// utils.tests/stripCpfCnpj.spec.ts— CPF, CNPJ numérico, alfanumérico (maiúsc./minúsc.), idempotência eundefined/vazio.Test plan
yarn test→ 24 suites / 153 testes (inclui os 6 novos), tudo verdeyarn build(tsc --declaration) → compila; export confirmado emlib/(stripCpfCnpj('AB.345.678/XY01-74')→AB345678XY0174)Próximos passos (follow-up)
@useblu/utils+ trocar o helper local porimport { stripCpfCnpj } from 'core/blu-utils'+ deletar o arquivo local. (Depende de 1 estar publicado — caso contrário recriaríamos o errois not a functionem CI.)Referências
stack/alphanumeric-cnpj-stripping.md🤖 Generated with Claude Code