Skip to content

Add getProcessoJuridicoInfo and getVoterIdInfo - #619

Merged
hyanmandian merged 2 commits into
claude/perf-hot-pathsfrom
claude/processo-voter-info
Sep 29, 2026
Merged

hyanmandian merged 2 commits into
claude/perf-hot-pathsfrom
claude/processo-voter-info

Conversation

@hyanmandian

Copy link
Copy Markdown
Member

Fourth PR of the stack (base: #617). Two new readers the maintainer asked for, completing the get*Info family.

getProcessoJuridicoInfo(value)

Reads a Número Único de Processo (Resolução CNJ nº 65/2008, NNNNNNN-DD.AAAA.J.TR.OOOO). null exactly when isValidProcessoJuridico(value) is false; otherwise a fresh ProcessoJuridicoInfo:

getProcessoJuridicoInfo('0002080-25.2012.5.15.0049');
// { sequentialNumber: '0002080', checkDigits: '25', year: 2012,
//   segment: 'labor', segmentCode: '5', tribunalCode: '15', originUnit: '0049' }

segment is the new ProcessoJuridicoSegment type (supreme-federal-court, national-council-of-justice, superior-court-of-justice, federal, labor, electoral, military, state, state-military). The J and TR tables of isValidProcessoJuridico are reused; the package has no table of tribunal names, so only tribunalCode is returned and the docs explain 00 and 90.

getVoterIdInfo(value)

Reads a título de eleitor. null exactly when isValidVoterId(value) is false; otherwise a fresh VoterIdInfo:

getVoterIdInfo('1023 8501 06 71');
// { sequentialNumber: '10238501', federativeUnion: '06', stateCode: 'PR', checkDigits: '71' }

stateCode is null for the code 28 (ZZ, voters abroad), and the state comes from the existing UF_TO_VOTER_ID_CODE table read backwards (no second table). Shorter values are read the way isValidVoterId reads them, so sequentialNumber always has 8 digits.

Size and gates

getProcessoJuridicoInfo 1,117 B / 623 B gzip and getVoterIdInfo 1,301 B / 750 B as single imports. vp check, 8,520 tests with 100% coverage (also under TZ=America/Sao_Paulo), Bun, Deno, build, jscpd, knip, check:api, Stryker 100% on both new files, commitlint. Docs in EN and PT.

Reads a Número Único de Processo (Resolução CNJ nº 65/2008) into its layout fields: the
sequential number, the check digits, the year of filing, the segment of the Judiciary (as a
name and as the raw J digit), the tribunal code (TR) and the unit of origin (OOOO). It takes the
same input as isValidProcessoJuridico and returns null exactly when that function returns false,
so the J and TR pair always comes from the tables the validator already reads.

The tribunal is exposed as its code only: the repository has no table of tribunal names, and the
resolution leaves the unit of origin to each tribunal.
Reads a título de eleitor into its fields: the 8 digit sequential number, the federative union
code (01 to 28), the state it stands for and the 2 check digits. It takes the same input as
isValidVoterId and returns null exactly when that function returns false.

A voter id issued without the leading zeros of its sequential number is left padded to 12 digits
the way isValidVoterId reads it, so the sequential number always has 8 digits. The code 28 (ZZ,
voters abroad) has no state, so its state is null. The state is found by reading the existing
UF_TO_VOTER_ID_CODE table backwards, so no second table is kept.
@hyanmandian
hyanmandian added this pull request to stack #618 September 29, 2026 12:57
@vercel

vercel Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
brazilian-utils Ready Ready Preview Sep 29, 2026 12:57pm UTC

@coderabbitai

coderabbitai Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: c9652905-cb27-44dc-9c79-40937e330b03

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

@pkg-pr-new

pkg-pr-new Bot commented Sep 29, 2026

Copy link
Copy Markdown

Open in StackBlitz

npm i https://pkg.pr.new/@brazilian-utils/brazilian-utils@619

commit: 16d51e8

@github-actions

Copy link
Copy Markdown
Contributor

Tree-shaking report

✅ No size regression. 2 new out of 200 exports.

Base Head Δ
Pre-existing exports, all imported 1387.2 KB 1387.3 KB (gzip 293.1 KB) +8 B (+0.0%)
Full import 1387.2 KB 1387.9 KB (gzip 293.3 KB) +632 B (+0.0%)
Exports 198 200 +2

What changed (2)

Export Base Head Δ gzip
🆕 getVoterIdInfo — 1.3 KB new 752 B
🆕 getProcessoJuridicoInfo — 1.1 KB new 623 B
All exports (200)
Export Base Head Δ gzip
⚪ GetAddressInfoByCepError 112 B 112 B 0 B 124 B
⚪ GetAddressInfoByCepNotFoundError 205 B 205 B 0 B 145 B
⚪ GetAddressInfoByCepServiceError 204 B 204 B 0 B 143 B
⚪ GetAddressInfoByCepValidationError 203 B 203 B 0 B 144 B
⚪ GetCepInfoByAddressError 112 B 112 B 0 B 124 B
⚪ GetCepInfoByAddressNotFoundError 205 B 205 B 0 B 145 B
⚪ GetCepInfoByAddressValidationError 203 B 203 B 0 B 144 B
⚪ addBusinessDays 9.2 KB 9.2 KB 0 B 3.2 KB
⚪ capitalize 2.5 KB 2.5 KB 0 B 1.3 KB
⚪ convertCurrencyToWords 2.0 KB 2.0 KB 0 B 1.0 KB
⚪ convertDateToWords 2.4 KB 2.4 KB 0 B 1.2 KB
⚪ convertLicensePlateToMercosul 632 B 632 B 0 B 425 B
⚪ convertNumberToWords 1.6 KB 1.6 KB 0 B 817 B
⚪ differenceInBusinessDays 9.1 KB 9.1 KB 0 B 3.2 KB
⚪ formatBoleto 668 B 668 B 0 B 407 B
⚪ formatCEP 489 B 489 B 0 B 348 B
⚪ formatCNPJ 639 B 639 B 0 B 430 B
⚪ formatCPF 540 B 540 B 0 B 376 B
⚪ formatCaepf 506 B 506 B 0 B 358 B
⚪ formatCbo 491 B 491 B 0 B 350 B
⚪ formatCei 503 B 503 B 0 B 356 B
⚪ formatCep 489 B 489 B 0 B 348 B
⚪ formatCertidao 532 B 532 B 0 B 361 B
⚪ formatCest 493 B 493 B 0 B 350 B
⚪ formatCfop 489 B 489 B 0 B 349 B
⚪ formatCid10 478 B 478 B 0 B 339 B
⚪ formatCnae 493 B 493 B 0 B 352 B
⚪ formatCnh 536 B 536 B 0 B 374 B
⚪ formatCno 507 B 507 B 0 B 357 B
⚪ formatCnpj 639 B 639 B 0 B 430 B
⚪ formatCns 506 B 506 B 0 B 352 B
⚪ formatCpf 540 B 540 B 0 B 376 B
⚪ formatCurrency 1023 B 1023 B 0 B 613 B
⚪ formatIban 267 B 267 B 0 B 228 B
⚪ formatIsbn 15.3 KB 15.3 KB 0 B 5.5 KB
⚪ formatLegalNature 489 B 489 B 0 B 349 B
⚪ formatLicensePlate 361 B 361 B 0 B 270 B
⚪ formatNbs 496 B 496 B 0 B 353 B
⚪ formatNcm 494 B 494 B 0 B 352 B
⚪ formatNfeKey 724 B 724 B 0 B 461 B
⚪ formatPassport 187 B 187 B 0 B 174 B
⚪ formatPhone 2.6 KB 2.6 KB 0 B 1.2 KB
⚪ formatPis 540 B 540 B 0 B 377 B
⚪ formatProcessoJuridico 509 B 509 B 0 B 357 B
⚪ formatSuframa 499 B 499 B 0 B 354 B
⚪ formatVoterId 542 B 542 B 0 B 377 B
⚪ generateBoleto 1.4 KB 1.4 KB 0 B 779 B
⚪ generateCNPJ 843 B 843 B 0 B 524 B
⚪ generateCPF 694 B 694 B 0 B 456 B
⚪ generateCep 1.3 KB 1.3 KB 0 B 471 B
⚪ generateCnh 565 B 565 B 0 B 343 B
⚪ generateCnpj 843 B 843 B 0 B 524 B
⚪ generateCpf 694 B 694 B 0 B 456 B
⚪ generateLegalNature 5.0 KB 5.0 KB 0 B 1.6 KB
⚪ generateLicensePlate 308 B 308 B 0 B 243 B
⚪ generatePassport 226 B 226 B 0 B 191 B
⚪ generatePhone 670 B 670 B 0 B 419 B
⚪ generatePis 357 B 357 B 0 B 273 B
⚪ generatePixPayload 5.0 KB 5.0 KB 0 B 2.2 KB
⚪ generateProcessoJuridico 821 B 821 B 0 B 523 B
⚪ generateRenavam 378 B 378 B 0 B 284 B
⚪ generateSuframa 451 B 451 B 0 B 335 B
⚪ generateVoterId 922 B 922 B 0 B 587 B
⚪ getAddressInfoByCep 5.3 KB 5.3 KB 0 B 2.1 KB
⚪ getAreaCodeByMunicipalityCode 23.6 KB 23.6 KB 0 B 5.6 KB
⚪ getAreaCodeInfo 3.1 KB 3.1 KB 0 B 989 B
⚪ getAreaCodesByState 814 B 814 B 0 B 463 B
⚪ getBankByCode 26.6 KB 26.6 KB 0 B 7.9 KB
⚪ getBankByIspb 26.5 KB 26.5 KB 0 B 7.8 KB
⚪ getBanks 26.2 KB 26.2 KB 0 B 7.6 KB
⚪ getBoletoInfo 2.7 KB 2.7 KB 0 B 1.4 KB
⚪ getCbo 80.6 KB 80.6 KB 0 B 24.1 KB
⚪ getCepInfoByAddress 2.2 KB 2.2 KB 0 B 1.1 KB
⚪ getCertidaoInfo 1.0 KB 1.0 KB 0 B 594 B
⚪ getCest 102.3 KB 102.3 KB 0 B 24.1 KB
⚪ getCfop 56.9 KB 56.9 KB 0 B 5.1 KB
⚪ getCid10 721.6 KB 721.6 KB 0 B 113.5 KB
⚪ getCities 64.2 KB 64.2 KB 0 B 26.4 KB
⚪ getClassTrib 50.0 KB 50.0 KB 0 B 9.0 KB
⚪ getCnae 66.8 KB 66.8 KB 0 B 17.7 KB
⚪ getCnpjInfo 964 B 964 B 0 B 542 B
⚪ getCodeByMunicipalityName 76.3 KB 76.3 KB 0 B 29.6 KB
⚪ getCpfInfo 1.1 KB 1.1 KB 0 B 683 B
⚪ getCstIbsCbs 963 B 963 B 0 B 534 B
⚪ getFormatLicensePlate 420 B 420 B 0 B 301 B
⚪ getGtinInfo 821 B 821 B 0 B 559 B
⚪ getHolidays 8.4 KB 8.4 KB 0 B 2.9 KB
⚪ getIbanInfo 752 B 752 B 0 B 492 B
⚪ getIsbnInfo 15.1 KB 15.1 KB 0 B 5.4 KB
⚪ getLegalNature 5.7 KB 5.7 KB 0 B 1.9 KB
⚪ getLegalNatures 5.1 KB 5.1 KB 0 B 1.6 KB
⚪ getLegalNaturesByCategory 5.6 KB 5.6 KB 0 B 1.9 KB
⚪ getMunicipalities 76.3 KB 76.3 KB 0 B 29.5 KB
⚪ getMunicipalitiesByAreaCode 90.4 KB 90.4 KB 0 B 33.0 KB
⚪ getMunicipality 77.2 KB 77.2 KB 0 B 30.1 KB
⚪ getMunicipalityByCode 76.3 KB 76.3 KB 0 B 29.6 KB
⚪ getNbs 51.1 KB 51.1 KB 0 B 11.3 KB
⚪ getNfeKeyInfo 2.2 KB 2.2 KB 0 B 1.2 KB
⚪ getNfseKeyInfo 2.6 KB 2.6 KB 0 B 1.2 KB
⚪ getPixKeyInfo 2.7 KB 2.7 KB 0 B 1.3 KB
⚪ getPixPayloadInfo 5.1 KB 5.1 KB 0 B 2.3 KB
🆕 getProcessoJuridicoInfo — 1.1 KB new 623 B
⚪ getRegions 255 B 255 B 0 B 165 B
⚪ getServiceItem 25.5 KB 25.5 KB 0 B 8.2 KB
⚪ getStateByCep 3.6 KB 3.6 KB 0 B 1.0 KB
⚪ getStateByIbgeCode 2.4 KB 2.4 KB 0 B 700 B
⚪ getStateCapital 955 B 955 B 0 B 638 B
⚪ getStateCodeByName 2.4 KB 2.4 KB 0 B 691 B
⚪ getStateNameByCode 2.2 KB 2.2 KB 0 B 594 B
⚪ getStates 2.2 KB 2.2 KB 0 B 539 B
⚪ getStatesByRegion 2.3 KB 2.3 KB 0 B 602 B
⚪ getTimezoneByState 755 B 755 B 0 B 342 B
🆕 getVoterIdInfo — 1.3 KB new 752 B
⚪ isBusinessDay 8.6 KB 8.6 KB 0 B 3.0 KB
⚪ isHoliday 8.4 KB 8.4 KB 0 B 2.9 KB
⚪ isValidBankAccount 5.1 KB 5.1 KB 0 B 1.9 KB
⚪ isValidBoleto 1.8 KB 1.8 KB 0 B 970 B
⚪ isValidCEP 165 B 165 B 0 B 165 B
⚪ isValidCNPJ 796 B 796 B 0 B 447 B
⚪ isValidCPF 500 B 500 B 0 B 334 B
⚪ isValidCaepf 782 B 782 B 0 B 479 B
⚪ isValidCbo 6.7 KB 6.7 KB 0 B 1.7 KB
⚪ isValidCei 714 B 714 B 0 B 472 B
⚪ isValidCep 165 B 165 B 0 B 165 B
⚪ isValidCertidao 758 B 758 B 0 B 462 B
⚪ isValidCest 3.6 KB 3.6 KB 0 B 856 B
⚪ isValidCfop 2.0 KB 2.0 KB 0 B 700 B
⚪ isValidCid10 6.7 KB 6.7 KB 0 B 2.4 KB
⚪ isValidClassTrib 1.8 KB 1.8 KB 0 B 610 B
⚪ isValidCnae 4.6 KB 4.6 KB 0 B 1.9 KB
⚪ isValidCnh 612 B 612 B 0 B 372 B
⚪ isValidCno 718 B 718 B 0 B 474 B
⚪ isValidCnpj 796 B 796 B 0 B 447 B
⚪ isValidCns 746 B 746 B 0 B 475 B
⚪ isValidCpf 500 B 500 B 0 B 334 B
⚪ isValidCreditCard 555 B 555 B 0 B 389 B
⚪ isValidCsosn 330 B 330 B 0 B 262 B
⚪ isValidCst 978 B 978 B 0 B 549 B
⚪ isValidCstIbsCbs 890 B 890 B 0 B 504 B
⚪ isValidEmail 244 B 244 B 0 B 198 B
⚪ isValidGtin 432 B 432 B 0 B 315 B
⚪ isValidIE 5.2 KB 5.2 KB 0 B 1.8 KB
⚪ isValidIban 531 B 531 B 0 B 376 B
⚪ isValidIe 5.2 KB 5.2 KB 0 B 1.8 KB
⚪ isValidIsbn 422 B 422 B 0 B 328 B
⚪ isValidLandlinePhone 890 B 890 B 0 B 561 B
⚪ isValidLegalNature 918 B 918 B 0 B 554 B
⚪ isValidLicensePlate 372 B 372 B 0 B 280 B
⚪ isValidMobilePhone 923 B 923 B 0 B 590 B
⚪ isValidNbs 3.5 KB 3.5 KB 0 B 1.3 KB
⚪ isValidNcm 29.6 KB 29.6 KB 0 B 9.0 KB
⚪ isValidNfeKey 1.6 KB 1.6 KB 0 B 956 B
⚪ isValidNfseKey 2.2 KB 2.2 KB 0 B 1.1 KB
⚪ isValidPIS 418 B 418 B 0 B 315 B
⚪ isValidPassport 197 B 197 B 0 B 186 B
⚪ isValidPhone 1.9 KB 1.9 KB 0 B 963 B
⚪ isValidPis 418 B 418 B 0 B 315 B
⚪ isValidPixKey 2.5 KB 2.5 KB 0 B 1.2 KB
⚪ isValidPixPayload 4.7 KB 4.7 KB 0 B 2.1 KB
⚪ isValidProcessoJuridico 711 B 711 B 0 B 432 B
⚪ isValidRegistroProfissional 1.3 KB 1.3 KB 0 B 787 B
⚪ isValidRenavam 518 B 518 B 0 B 358 B
⚪ isValidServiceItem 1.1 KB 1.1 KB 0 B 570 B
⚪ isValidServicePhone 1.0 KB 1.0 KB 0 B 573 B
⚪ isValidSuframa 611 B 611 B 0 B 418 B
⚪ isValidVin 898 B 898 B 0 B 600 B
⚪ isValidVoterId 728 B 728 B 0 B 433 B
⚪ parseBoleto 247 B 247 B 0 B 215 B
⚪ parseCaepf 199 B 199 B 0 B 183 B
⚪ parseCbo 198 B 198 B 0 B 182 B
⚪ parseCei 199 B 199 B 0 B 183 B
⚪ parseCep 198 B 198 B 0 B 182 B
⚪ parseCertidao 199 B 199 B 0 B 183 B
⚪ parseCest 198 B 198 B 0 B 182 B
⚪ parseCfop 198 B 198 B 0 B 182 B
⚪ parseCid10 177 B 177 B 0 B 170 B
⚪ parseCnae 198 B 198 B 0 B 182 B
⚪ parseCnh 199 B 199 B 0 B 183 B
⚪ parseCno 199 B 199 B 0 B 183 B
⚪ parseCnpj 298 B 298 B 0 B 240 B
⚪ parseCns 199 B 199 B 0 B 184 B
⚪ parseCpf 199 B 199 B 0 B 183 B
⚪ parseCurrency 610 B 610 B 0 B 409 B
⚪ parseIban 227 B 227 B 0 B 202 B
⚪ parseIsbn 150 B 150 B 0 B 150 B
⚪ parseLegalNature 198 B 198 B 0 B 182 B
⚪ parseLicensePlate 177 B 177 B 0 B 169 B
⚪ parseNbs 198 B 198 B 0 B 181 B
⚪ parseNcm 198 B 198 B 0 B 182 B
⚪ parseNfeKey 412 B 412 B 0 B 312 B
⚪ parseNfseKey 253 B 253 B 0 B 219 B
⚪ parsePassport 177 B 177 B 0 B 169 B
⚪ parsePhone 497 B 497 B 0 B 341 B
⚪ parsePis 199 B 199 B 0 B 183 B
⚪ parseProcessoJuridico 199 B 199 B 0 B 182 B
⚪ parseSuframa 198 B 198 B 0 B 181 B
⚪ parseVoterId 199 B 199 B 0 B 183 B
⚪ removeAccents 99 B 99 B 0 B 119 B
⚪ subBusinessDays 9.3 KB 9.3 KB 0 B 3.3 KB
⚪ toStandardSchema 324 B 324 B 0 B 254 B
How this is measured

Every export is imported alone into an esbuild consumer bundle (minified, tree-shaken) built from the head and from the base of this pull request; the sizes are the resulting bundles, gzip is their gzipped size. 🔴 marks a regression: a pre-existing export that grew more than 20% and more than 256 B, or the bundle importing every pre-existing export growing more than 5%. 🟡 is growth under the threshold, 🟢 a decrease, ⚪ no change, 🆕 an export that does not exist on the base (never a regression), 🗑️ an export that was removed. An intentional increase is accepted with the tree-shaking: accepted label.

@codecov

codecov Bot commented Sep 29, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (2b562e0) to head (16d51e8).

Additional details and impacted files
@@                   Coverage Diff                   @@
##           claude/perf-hot-paths      #619   +/-   ##
=======================================================
  Coverage                 100.00%   100.00%           
=======================================================
  Files                        261       263    +2     
  Lines                       2640      2656   +16     
  Branches                     752       754    +2     
=======================================================
+ Hits                        2640      2656   +16     
Flag Coverage Δ
node 100.00% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ 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.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@hyanmandian
hyanmandian merged commit d294baa into main Sep 29, 2026
30 checks passed

This branch was successfully deployed

1 active deployment
Preview — 16d51e83 Deployed Sep 29, 2026 by vercel[bot]
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.

1 participant