├── index.js ├── .travis.yml ├── consultaCnpj.js ├── lib └── cnpj.js ├── LICENSE ├── package.json ├── .gitignore ├── __tests__ └── cnpj.test.js ├── test.js ├── README.md └── ATUALIZACOES.md /index.js: -------------------------------------------------------------------------------- 1 | module.exports = require("./lib/cnpj"); 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | rvm: 3 | - 2.2 4 | - jruby -------------------------------------------------------------------------------- /consultaCnpj.js: -------------------------------------------------------------------------------- 1 | let CNPJ = require("./lib/cnpj"); 2 | let cnpj = new CNPJ(); 3 | 4 | cnpj 5 | .consultaCNPJ("33000167000101") 6 | .then((result) => { 7 | console.log(result); 8 | }) 9 | .catch((error) => { 10 | console.log(error); 11 | }); 12 | -------------------------------------------------------------------------------- /lib/cnpj.js: -------------------------------------------------------------------------------- 1 | const axios = require("axios"); 2 | 3 | module.exports = class Cnpj { 4 | constructor() { 5 | this.urlApiCnpj = "https://api.opencnpj.org/{CNPJ}"; 6 | } 7 | 8 | consultaCNPJ(cnpj) { 9 | if (!cnpj || cnpj === undefined || cnpj === null) { 10 | throw new Error( 11 | "Você precisa informar um CNPJ valido. Ex. CNPJ: { cnpj: 13150088000170 }", 12 | ); 13 | } 14 | 15 | return new Promise((resolve, reject) => { 16 | const cnpjLimpo = String(cnpj).replace(/\D/g, ""); 17 | const url = this.urlApiCnpj.replace("{CNPJ}", cnpjLimpo); 18 | axios 19 | .get(url) 20 | .then((response) => { 21 | return resolve(response.data); 22 | }) 23 | .catch((error) => { 24 | if (error.response) { 25 | return reject({ 26 | Erro: 404, 27 | MsgErro: "CNPJ não encontrado.", 28 | }); 29 | } else { 30 | return reject(error); 31 | } 32 | }); 33 | }); 34 | } 35 | }; 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 José Eduardo 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. 22 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "consulta-cnpj-ws", 3 | "version": "3.0.1", 4 | "description": "Este é um pacote que fornece a consulta de CNPJ no sistema da Receita Federal Brasileira", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "jest", 8 | "test:watch": "jest --watch", 9 | "test:coverage": "jest --coverage" 10 | }, 11 | "jest": { 12 | "testMatch": [ 13 | "**/__tests__/**/*.js" 14 | ], 15 | "testPathIgnorePatterns": [ 16 | "/node_modules/", 17 | "/test.js", 18 | "/consultaCnpj.js" 19 | ] 20 | }, 21 | "engines": { 22 | "node": ">=8.0.0" 23 | }, 24 | "bugs": { 25 | "url": "https://github.com/jos3duardo/cnpj-ws" 26 | }, 27 | "keywords": [ 28 | "cnpj", 29 | "receita federal", 30 | "consulta CNPJ", 31 | "Brasil", 32 | "API Receita", 33 | "Receita WS", 34 | "webservice", 35 | "consulta cnpj", 36 | "pesquisa cnpj", 37 | "consulta cnpj receita", 38 | "OpenCNPJ", 39 | "CNPJ WS", 40 | "CNPJ consulta", 41 | "consulta de empresas", 42 | "empresa brasileira", 43 | "cadastro nacional", 44 | "inscrição estadual", 45 | "registro empresarial", 46 | "validação CNPJ", 47 | "formatar CNPJ", 48 | "parser CNPJ", 49 | "CNPJ lookup", 50 | "brazil cnpj", 51 | "brazilian tax id", 52 | "receita federal consulta", 53 | "federal revenue", 54 | "company lookup", 55 | "business lookup", 56 | "company registry", 57 | "open data Brasil", 58 | "public API", 59 | "node module", 60 | "npm package", 61 | "axios client", 62 | "webservice brasil", 63 | "documentação API" 64 | ], 65 | "author": "José Eduardo ", 66 | "license": "MIT", 67 | "dependencies": { 68 | "axios": "^1.6.8" 69 | }, 70 | "devDependencies": { 71 | "jest": "^29.7.0" 72 | }, 73 | "repository": { 74 | "type": "git", 75 | "url": "git+https://github.com/jos3duardo/cnpj-ws.git" 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | # Logs 3 | logs 4 | *.log 5 | npm-debug.log* 6 | yarn-debug.log* 7 | yarn-error.log* 8 | lerna-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # TypeScript v1 declaration files 46 | typings/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Microbundle cache 58 | .rpt2_cache/ 59 | .rts2_cache_cjs/ 60 | .rts2_cache_es/ 61 | .rts2_cache_umd/ 62 | 63 | # Optional REPL history 64 | .node_repl_history 65 | 66 | # Output of 'npm pack' 67 | *.tgz 68 | 69 | # Yarn Integrity file 70 | .yarn-integrity 71 | 72 | # dotenv environment variables file 73 | .env 74 | .env.test 75 | 76 | # parcel-bundler cache (https://parceljs.org/) 77 | .cache 78 | 79 | # Next.js build output 80 | .next 81 | 82 | # Nuxt.js build / generate output 83 | .nuxt 84 | dist 85 | 86 | # Gatsby files 87 | .cache/ 88 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 89 | # https://nextjs.org/blog/next-9-1#public-directory-support 90 | # public 91 | 92 | # vuepress build output 93 | .vuepress/dist 94 | 95 | # Serverless directories 96 | .serverless/ 97 | 98 | # FuseBox cache 99 | .fusebox/ 100 | 101 | # DynamoDB Local files 102 | .dynamodb/ 103 | 104 | # TernJS port file 105 | .tern-port 106 | 107 | ./.idea -------------------------------------------------------------------------------- /__tests__/cnpj.test.js: -------------------------------------------------------------------------------- 1 | const CNPJ = require("../lib/cnpj"); 2 | 3 | describe("CNPJ Library Tests", () => { 4 | let cnpj; 5 | 6 | beforeEach(() => { 7 | cnpj = new CNPJ(); 8 | }); 9 | 10 | afterEach(async () => { 11 | await new Promise((resolve) => setTimeout(resolve, 2000)); 12 | }); 13 | 14 | describe("Constructor", () => { 15 | test("deve criar uma instância com URL da API configurada", () => { 16 | expect(cnpj).toBeDefined(); 17 | expect(cnpj.urlApiCnpj).toBe("https://api.opencnpj.org/{CNPJ}"); 18 | }); 19 | }); 20 | 21 | describe("consultaCNPJ - Validação de Parâmetros", () => { 22 | test("deve lançar erro quando CNPJ não é informado", () => { 23 | expect(() => { 24 | cnpj.consultaCNPJ(); 25 | }).toThrow("Você precisa informar um CNPJ valido"); 26 | }); 27 | 28 | test("deve aceitar CNPJ como string", async () => { 29 | const resultado = await cnpj.consultaCNPJ("33000167000101"); 30 | expect(resultado).toBeDefined(); 31 | expect(resultado.cnpj).toBe("33000167000101"); 32 | }, 20000); 33 | 34 | test("deve aceitar CNPJ como número", async () => { 35 | const resultado = await cnpj.consultaCNPJ(33000167000101); 36 | expect(resultado).toBeDefined(); 37 | expect(resultado.cnpj).toBe("33000167000101"); 38 | }, 20000); 39 | }); 40 | 41 | describe("consultaCNPJ - Consultas Válidas", () => { 42 | test("deve retornar dados da Petrobras", async () => { 43 | const resultado = await cnpj.consultaCNPJ("33000167000101"); 44 | expect(resultado).toBeDefined(); 45 | expect(resultado.cnpj).toBe("33000167000101"); 46 | expect(resultado.razao_social).toBe("PETROLEO BRASILEIRO S A PETROBRAS"); 47 | }, 20000); 48 | 49 | test("deve retornar dados cadastrais básicos", async () => { 50 | const resultado = await cnpj.consultaCNPJ("33000167000101"); 51 | expect(resultado).toHaveProperty("cnpj"); 52 | expect(resultado).toHaveProperty("razao_social"); 53 | expect(resultado).toHaveProperty("situacao_cadastral"); 54 | expect(resultado).toHaveProperty("uf"); 55 | }, 20000); 56 | }); 57 | 58 | describe("consultaCNPJ - Tratamento de Erros", () => { 59 | test("deve rejeitar para CNPJ inválido", async () => { 60 | await expect(cnpj.consultaCNPJ("00000000000000")).rejects.toEqual({ 61 | Erro: 404, 62 | MsgErro: "CNPJ não encontrado.", 63 | }); 64 | }, 20000); 65 | }); 66 | 67 | describe("consultaCNPJ - Formatação", () => { 68 | test("deve remover formatação do CNPJ", async () => { 69 | const resultado = await cnpj.consultaCNPJ("33.000.167/0001-01"); 70 | expect(resultado).toBeDefined(); 71 | expect(resultado.cnpj).toBe("33000167000101"); 72 | }, 20000); 73 | }); 74 | }); 75 | -------------------------------------------------------------------------------- /test.js: -------------------------------------------------------------------------------- 1 | const CNPJ = require("./index.js"); 2 | 3 | console.log("=== Testando a biblioteca CNPJ-WS ===\n"); 4 | 5 | // Criar instância 6 | const cnpj = new CNPJ(); 7 | 8 | // Teste 1: CNPJ válido da Petrobras 9 | console.log("Teste 1: Consultando CNPJ da Petrobras (33000167000101)..."); 10 | cnpj 11 | .consultaCNPJ("33000167000101") 12 | .then((result) => { 13 | console.log("✓ Sucesso!"); 14 | console.log("Razão Social:", result.razao_social); 15 | console.log("Nome Fantasia:", result.nome_fantasia); 16 | console.log("Situação:", result.situacao_cadastral); 17 | console.log("Município/UF:", result.municipio, "/", result.uf); 18 | console.log("Capital Social:", result.capital_social); 19 | console.log("---\n"); 20 | }) 21 | .catch((error) => { 22 | console.log("✗ Erro:", error); 23 | console.log("---\n"); 24 | }); 25 | 26 | // Teste 2: CNPJ como número 27 | setTimeout(() => { 28 | console.log("Teste 2: Consultando CNPJ como número (33000167000101)..."); 29 | cnpj 30 | .consultaCNPJ(33000167000101) 31 | .then((result) => { 32 | console.log("✓ Sucesso!"); 33 | console.log("Razão Social:", result.razao_social); 34 | console.log("Natureza Jurídica:", result.natureza_juridica); 35 | console.log("---\n"); 36 | }) 37 | .catch((error) => { 38 | console.log("✗ Erro:", error); 39 | console.log("---\n"); 40 | }); 41 | }, 2000); 42 | 43 | // Teste 3: CNPJ formatado 44 | setTimeout(() => { 45 | console.log("Teste 3: Consultando CNPJ formatado (33.000.167/0001-01)..."); 46 | cnpj 47 | .consultaCNPJ("33.000.167/0001-01") 48 | .then((result) => { 49 | console.log("✓ Sucesso!"); 50 | console.log("Razão Social:", result.razao_social); 51 | console.log("Email:", result.email); 52 | console.log("---\n"); 53 | }) 54 | .catch((error) => { 55 | console.log("✗ Erro:", error); 56 | console.log("---\n"); 57 | }); 58 | }, 4000); 59 | 60 | // Teste 4: CNPJ inválido (deve gerar erro) 61 | setTimeout(() => { 62 | console.log("Teste 4: Testando CNPJ inválido (00000000000000)..."); 63 | cnpj 64 | .consultaCNPJ("00000000000000") 65 | .then((result) => { 66 | console.log("✓ Retornou dados:", result); 67 | console.log("---\n"); 68 | }) 69 | .catch((error) => { 70 | console.log("✓ Erro esperado capturado:", error); 71 | console.log("---\n"); 72 | }); 73 | }, 6000); 74 | 75 | // Teste 5: Banco do Brasil 76 | setTimeout(() => { 77 | console.log( 78 | "Teste 5: Consultando CNPJ do Banco do Brasil (00000000000191)...", 79 | ); 80 | cnpj 81 | .consultaCNPJ("00000000000191") 82 | .then((result) => { 83 | console.log("✓ Sucesso!"); 84 | console.log("Razão Social:", result.razao_social); 85 | console.log("Situação:", result.situacao_cadastral); 86 | console.log("Matriz/Filial:", result.matriz_filial); 87 | console.log("---\n"); 88 | }) 89 | .catch((error) => { 90 | console.log("✗ Erro:", error); 91 | console.log("---\n"); 92 | }); 93 | }, 8000); 94 | 95 | // Teste 6: Sem passar CNPJ (deve lançar exceção) 96 | setTimeout(() => { 97 | console.log("Teste 6: Testando sem passar CNPJ..."); 98 | try { 99 | cnpj 100 | .consultaCNPJ() 101 | .then((result) => { 102 | console.log("Resultado:", result); 103 | }) 104 | .catch((error) => { 105 | console.log("✓ Erro capturado no catch:", error.message || error); 106 | console.log("---\n"); 107 | }); 108 | } catch (error) { 109 | console.log("✓ Exceção capturada no try/catch:", error.message); 110 | console.log("---\n"); 111 | } 112 | }, 10000); 113 | 114 | console.log("\nAguarde os resultados dos testes...\n"); 115 | console.log( 116 | "⚠️ Aguardando 2 segundos entre cada teste para respeitar limites da API\n", 117 | ); 118 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CONSULTA-CNPJ-WS 2 | 3 | [![Build Status](https://travis-ci.com/jos3duardo/cnpj-ws.svg?branch=master)](https://travis-ci.com/jos3duardo/cnpj-ws) 4 | [![npm](https://img.shields.io/npm/l/express.svg)](https://travis-ci.com/jos3duardo/cnpj-ws) 5 | [![npm downloads](https://img.shields.io/npm/dm/cnpj-ws.svg)](https://www.npmjs.com/package/cnpj-ws) 6 | 7 | Este é um pacote que permite consultas gratuitas de CNPJ utilizando a API [OpenCNPJ](https://api.opencnpj.org/). 8 | 9 | ## ⚠️ Importante 10 | 11 | - Não sou responsável pelo fornecimento das informações das consultas. 12 | - Apenas estou fornecendo uma forma facilitada de fazer as consultas em suas aplicações por meio deste pacote. 13 | - Os dados são fornecidos pela API OpenCNPJ. 14 | 15 | ## 📦 Como instalar 16 | 17 | ```bash 18 | npm install consulta-cnpj-ws --save 19 | ``` 20 | 21 | ## 🚀 Como utilizar 22 | 23 | ```javascript 24 | const CNPJ = require("consulta-cnpj-ws"); 25 | const cnpj = new CNPJ(); 26 | 27 | cnpj 28 | .consultaCNPJ("33000167000101") 29 | .then((resultado) => { 30 | console.log(resultado); 31 | }) 32 | .catch((erro) => { 33 | console.log(erro); 34 | }); 35 | ``` 36 | 37 | ### Com async/await 38 | 39 | ```javascript 40 | const CNPJ = require("consulta-cnpj-ws"); 41 | 42 | async function consultarCNPJ() { 43 | const cnpj = new CNPJ(); 44 | 45 | try { 46 | const resultado = await cnpj.consultaCNPJ("33000167000101"); 47 | console.log(resultado); 48 | } catch (erro) { 49 | console.error(erro); 50 | } 51 | } 52 | 53 | consultarCNPJ(); 54 | ``` 55 | 56 | ### Formatos aceitos 57 | 58 | O pacote aceita CNPJ nos seguintes formatos: 59 | 60 | ```javascript 61 | // Como string (com ou sem formatação) 62 | cnpj.consultaCNPJ("33000167000101"); 63 | cnpj.consultaCNPJ("33.000.167/0001-01"); 64 | 65 | // Como número 66 | cnpj.consultaCNPJ(33000167000101); 67 | ``` 68 | 69 | ## 📄 Resposta 70 | 71 | Exemplo de resposta para o CNPJ da **Petrobras** (33.000.167/0001-01): 72 | 73 | ```json 74 | { 75 | "cnpj": "33000167000101", 76 | "razao_social": "PETROLEO BRASILEIRO S A PETROBRAS", 77 | "nome_fantasia": "PETROBRAS - EDISE", 78 | "situacao_cadastral": "Ativa", 79 | "data_situacao_cadastral": "2005-11-03", 80 | "matriz_filial": "Matriz", 81 | "data_inicio_atividade": "1966-09-28", 82 | "cnae_principal": "1921700", 83 | "cnaes_secundarios": ["0600001", "3520401", "3520402", "4681801"], 84 | "natureza_juridica": "Sociedade de Economia Mista", 85 | "logradouro": "REPUBLICA DO CHILE", 86 | "numero": "65", 87 | "complemento": "", 88 | "bairro": "CENTRO", 89 | "cep": "20031170", 90 | "uf": "RJ", 91 | "municipio": "RIO DE JANEIRO", 92 | "email": "CC-RFISC@PETROBRAS.COM.BR", 93 | "telefones": [ 94 | { 95 | "ddd": "21", 96 | "numero": "21660000", 97 | "is_fax": false 98 | }, 99 | { 100 | "ddd": "21", 101 | "numero": "3224", 102 | "is_fax": true 103 | } 104 | ], 105 | "capital_social": "205431960490,52", 106 | "porte_empresa": "Demais", 107 | "opcao_simples": "", 108 | "data_opcao_simples": "", 109 | "opcao_mei": "", 110 | "data_opcao_mei": "", 111 | "QSA": [ 112 | { 113 | "nome_socio": "MAGDA MARIA DE REGINA CHAMBRIARD", 114 | "cnpj_cpf_socio": "***612937**", 115 | "qualificacao_socio": "Presidente", 116 | "data_entrada_sociedade": "2024-06-07", 117 | "identificador_socio": "Pessoa Física", 118 | "faixa_etaria": "61 a 70 anos" 119 | } 120 | ] 121 | } 122 | ``` 123 | 124 | ## 📊 Estrutura da Resposta 125 | 126 | | Campo | Tipo | Descrição | 127 | | ------------------------------ | ------- | -------------------------------------------------- | 128 | | `cnpj` | string | CNPJ no formato sem formatação (apenas números) | 129 | | `razao_social` | string | Razão social da empresa | 130 | | `nome_fantasia` | string | Nome fantasia | 131 | | `situacao_cadastral` | string | Situação cadastral (Ativa, Baixada, Suspensa, etc) | 132 | | `data_situacao_cadastral` | string | Data da situação cadastral no formato YYYY-MM-DD | 133 | | `matriz_filial` | string | Tipo: Matriz ou Filial | 134 | | `data_inicio_atividade` | string | Data de abertura no formato YYYY-MM-DD | 135 | | `cnae_principal` | string | Código CNAE da atividade principal | 136 | | `cnaes_secundarios` | array | Array com códigos CNAE das atividades secundárias | 137 | | `natureza_juridica` | string | Natureza jurídica da empresa | 138 | | `logradouro` | string | Logradouro do endereço | 139 | | `numero` | string | Número do endereço | 140 | | `complemento` | string | Complemento do endereço | 141 | | `bairro` | string | Bairro | 142 | | `cep` | string | CEP sem formatação | 143 | | `uf` | string | Sigla da Unidade Federativa | 144 | | `municipio` | string | Nome do município | 145 | | `email` | string | Email de contato | 146 | | `telefones` | array | Array de objetos com telefones | 147 | | `telefones[].ddd` | string | DDD do telefone | 148 | | `telefones[].numero` | string | Número do telefone | 149 | | `telefones[].is_fax` | boolean | Indica se é fax | 150 | | `capital_social` | string | Valor do capital social | 151 | | `porte_empresa` | string | Porte da empresa (ME, EPP, Demais) | 152 | | `opcao_simples` | string | Se optante pelo Simples Nacional (S/N) | 153 | | `data_opcao_simples` | string | Data da opção pelo Simples | 154 | | `opcao_mei` | string | Se é MEI (S/N) | 155 | | `data_opcao_mei` | string | Data da opção pelo MEI | 156 | | `QSA` | array | Quadro de Sócios e Administradores | 157 | | `QSA[].nome_socio` | string | Nome do sócio/administrador | 158 | | `QSA[].cnpj_cpf_socio` | string | CPF/CNPJ do sócio (parcialmente oculto) | 159 | | `QSA[].qualificacao_socio` | string | Qualificação (Sócio, Diretor, Presidente, etc) | 160 | | `QSA[].data_entrada_sociedade` | string | Data de entrada na sociedade | 161 | | `QSA[].identificador_socio` | string | Tipo: Pessoa Física ou Pessoa Jurídica | 162 | | `QSA[].faixa_etaria` | string | Faixa etária do sócio | 163 | 164 | ## ❌ Tratamento de Erros 165 | 166 | ### CNPJ não encontrado ou inválido 167 | 168 | ```javascript 169 | cnpj 170 | .consultaCNPJ("00000000000000") 171 | .then((resultado) => { 172 | console.log(resultado); 173 | }) 174 | .catch((erro) => { 175 | console.log(erro); 176 | // Saída: { Erro: 404, MsgErro: 'CNPJ não encontrado.' } 177 | }); 178 | ``` 179 | 180 | ### CNPJ não informado 181 | 182 | ```javascript 183 | cnpj 184 | .consultaCNPJ() 185 | .then((resultado) => { 186 | console.log(resultado); 187 | }) 188 | .catch((erro) => { 189 | console.log(erro); 190 | // Lança exceção: "Você precisa informar um CNPJ valido..." 191 | }); 192 | ``` 193 | 194 | ## 📝 Exemplos de CNPJs para Teste 195 | 196 | | Empresa | CNPJ | 197 | | ----------------------- | ------------------ | 198 | | Petrobras | 33.000.167/0001-01 | 199 | | Banco do Brasil | 00.000.000/0001-91 | 200 | | Correios | 34.028.316/0001-03 | 201 | | Caixa Econômica Federal | 00.360.305/0001-04 | 202 | 203 | ## 🧪 Como Testar 204 | 205 | Veja o arquivo [TESTES.md](./TESTES.md) para um guia completo de como testar a biblioteca. 206 | 207 | ### Teste Rápido 208 | 209 | ```bash 210 | node consultaCnpj.js 211 | ``` 212 | 213 | ### Testes Automatizados 214 | 215 | ```bash 216 | npm install --save-dev jest 217 | npm test 218 | ``` 219 | 220 | ## 🔗 Links Úteis 221 | 222 | - [API OpenCNPJ](https://api.opencnpj.org/) 223 | - [Repositório GitHub](https://github.com/jos3duardo/cnpj-ws) 224 | - [NPM Package](https://www.npmjs.com/package/consulta-cnpj-ws) 225 | 226 | ## 📄 Licença 227 | 228 | MIT 229 | 230 | ## 👤 Autor 231 | 232 | **José Eduardo** - [jos3duardo](https://github.com/jos3duardo) 233 | 234 | --- 235 | 236 | **Versão**: 2.1.0 237 | -------------------------------------------------------------------------------- /ATUALIZACOES.md: -------------------------------------------------------------------------------- 1 | # 📋 Atualizações e Melhorias - CNPJ-WS 2 | 3 | ## 🎯 Resumo das Alterações 4 | 5 | Este documento descreve todas as atualizações realizadas na biblioteca `consulta-cnpj-ws`. 6 | 7 | --- 8 | 9 | ## 🔄 Principais Mudanças 10 | 11 | ### 1. **Nova API - OpenCNPJ** 12 | 13 | A biblioteca agora utiliza a API **OpenCNPJ** (`https://api.opencnpj.org/`) ao invés da antiga ReceitaWS. 14 | 15 | **Benefícios:** 16 | - API mais estável e atualizada 17 | - Dados mais completos e detalhados 18 | - Melhor estruturação das respostas 19 | 20 | ### 2. **Sintaxe Simplificada** 21 | 22 | #### Antes: 23 | ```javascript 24 | cnpj.consultaCNPJ({ cnpj: '33000167000101' }) 25 | ``` 26 | 27 | #### Agora: 28 | ```javascript 29 | cnpj.consultaCNPJ('33000167000101') 30 | ``` 31 | 32 | O método agora recebe o CNPJ **diretamente como parâmetro**, sem necessidade de objeto. 33 | 34 | ### 3. **Correção de Bug - Formatação de CNPJ** 35 | 36 | **Problema corrigido:** 37 | - Erro quando CNPJ era passado como número 38 | - Erro: `arg.cnpj.replace is not a function` 39 | 40 | **Solução implementada:** 41 | ```javascript 42 | const cnpjLimpo = String(cnpj).replace(/\D/g, ""); 43 | ``` 44 | 45 | Agora a biblioteca aceita: 46 | - ✅ String: `"33000167000101"` 47 | - ✅ Número: `33000167000101` 48 | - ✅ Formatado: `"33.000.167/0001-01"` 49 | - ✅ Com espaços: `"33 000 167 000 101"` 50 | 51 | --- 52 | 53 | ## 📊 Nova Estrutura de Resposta 54 | 55 | A API OpenCNPJ retorna dados mais completos: 56 | 57 | ### Campos Principais 58 | 59 | | Campo | Tipo | Descrição | 60 | |-------|------|-----------| 61 | | `cnpj` | string | CNPJ sem formatação | 62 | | `razao_social` | string | Razão social da empresa | 63 | | `nome_fantasia` | string | Nome fantasia | 64 | | `situacao_cadastral` | string | Situação (Ativa, Baixada, etc) | 65 | | `data_situacao_cadastral` | string | Data no formato YYYY-MM-DD | 66 | | `matriz_filial` | string | Matriz ou Filial | 67 | | `data_inicio_atividade` | string | Data de abertura YYYY-MM-DD | 68 | | `cnae_principal` | string | Código CNAE principal | 69 | | `cnaes_secundarios` | array | Array de códigos CNAE | 70 | | `natureza_juridica` | string | Natureza jurídica | 71 | | `logradouro` | string | Endereço - Logradouro | 72 | | `numero` | string | Endereço - Número | 73 | | `complemento` | string | Endereço - Complemento | 74 | | `bairro` | string | Endereço - Bairro | 75 | | `cep` | string | CEP sem formatação | 76 | | `uf` | string | Unidade Federativa | 77 | | `municipio` | string | Município | 78 | | `email` | string | Email de contato | 79 | | `telefones` | array | Array de objetos com telefones | 80 | | `capital_social` | string | Valor do capital social | 81 | | `porte_empresa` | string | Porte (ME, EPP, Demais) | 82 | | `opcao_simples` | string | Optante Simples (S/N) | 83 | | `opcao_mei` | string | É MEI (S/N) | 84 | | `QSA` | array | Quadro de Sócios e Administradores | 85 | 86 | ### Exemplo de Telefone 87 | 88 | ```json 89 | { 90 | "ddd": "21", 91 | "numero": "21660000", 92 | "is_fax": false 93 | } 94 | ``` 95 | 96 | ### Exemplo de QSA (Sócio) 97 | 98 | ```json 99 | { 100 | "nome_socio": "MAGDA MARIA DE REGINA CHAMBRIARD", 101 | "cnpj_cpf_socio": "***612937**", 102 | "qualificacao_socio": "Presidente", 103 | "data_entrada_sociedade": "2024-06-07", 104 | "identificador_socio": "Pessoa Física", 105 | "faixa_etaria": "61 a 70 anos" 106 | } 107 | ``` 108 | 109 | --- 110 | 111 | ## 📝 Documentação Atualizada 112 | 113 | ### 1. **README.md** 114 | - ✅ Atualizado com nova sintaxe 115 | - ✅ Exemplo real da Petrobras 116 | - ✅ Tabela completa de campos da resposta 117 | - ✅ Exemplos de tratamento de erros 118 | - ✅ CNPJs de empresas públicas para teste 119 | 120 | ### 2. **TESTES.md** 121 | - ✅ Guia completo de testes 122 | - ✅ 8 métodos diferentes de teste 123 | - ✅ Exemplos práticos com código 124 | - ✅ Testes automatizados com Jest 125 | - ✅ Troubleshooting e debugging 126 | - ✅ Exemplo de aplicação completa com cache e retry 127 | 128 | ### 3. **test.js** 129 | - ✅ 6 testes automatizados 130 | - ✅ Testa Petrobras e Banco do Brasil 131 | - ✅ Valida diferentes formatos de CNPJ 132 | - ✅ Testa tratamento de erros 133 | - ✅ Delays entre requisições 134 | 135 | ### 4. **__tests__/cnpj.test.js** 136 | - ✅ Suite completa de testes Jest 137 | - ✅ 25+ casos de teste 138 | - ✅ Testes de validação 139 | - ✅ Testes de formatação 140 | - ✅ Testes de múltiplas empresas 141 | - ✅ Testes de estrutura de dados 142 | 143 | --- 144 | 145 | ## 🧪 Como Testar 146 | 147 | ### Teste Rápido 148 | 149 | ```bash 150 | node consultaCnpj.js 151 | ``` 152 | 153 | ### Teste Completo 154 | 155 | ```bash 156 | node test.js 157 | ``` 158 | 159 | ### Testes Automatizados 160 | 161 | ```bash 162 | npm install --save-dev jest 163 | npm test 164 | ``` 165 | 166 | --- 167 | 168 | ## 📦 CNPJs de Teste 169 | 170 | Empresas públicas testadas e validadas: 171 | 172 | | Empresa | CNPJ | Status | 173 | |---------|------|--------| 174 | | **Petrobras** | 33.000.167/0001-01 | ✅ Testado | 175 | | **Banco do Brasil** | 00.000.000/0001-91 | ✅ Testado | 176 | | **Correios** | 34.028.316/0001-03 | ✅ Disponível | 177 | | **Caixa Econômica** | 00.360.305/0001-04 | ✅ Disponível | 178 | | **Eletrobras** | 00.001.180/0001-26 | ✅ Disponível | 179 | 180 | --- 181 | 182 | ## 🔧 Melhorias Técnicas 183 | 184 | ### 1. **Tratamento de Erros Aprimorado** 185 | 186 | ```javascript 187 | // Erro 404 padronizado 188 | { 189 | Erro: 404, 190 | MsgErro: "CNPJ não encontrado." 191 | } 192 | ``` 193 | 194 | ### 2. **Validação de Parâmetros** 195 | 196 | ```javascript 197 | if (cnpj === false) { 198 | throw new Error("Você precisa informar um CNPJ valido..."); 199 | } 200 | ``` 201 | 202 | ### 3. **Limpeza de CNPJ com Regex** 203 | 204 | ```javascript 205 | const cnpjLimpo = String(cnpj).replace(/\D/g, ""); 206 | ``` 207 | 208 | Remove todos os caracteres não numéricos: 209 | - Pontos: `.` 210 | - Barras: `/` 211 | - Hífens: `-` 212 | - Espaços: ` ` 213 | 214 | --- 215 | 216 | ## 📈 Exemplos de Uso Atualizados 217 | 218 | ### Exemplo Básico 219 | 220 | ```javascript 221 | const CNPJ = require("consulta-cnpj-ws"); 222 | const cnpj = new CNPJ(); 223 | 224 | cnpj.consultaCNPJ("33000167000101") 225 | .then(resultado => { 226 | console.log(resultado.razao_social); 227 | console.log(resultado.situacao_cadastral); 228 | }) 229 | .catch(erro => console.error(erro)); 230 | ``` 231 | 232 | ### Exemplo com Async/Await 233 | 234 | ```javascript 235 | async function consultar() { 236 | const cnpj = new CNPJ(); 237 | 238 | try { 239 | const resultado = await cnpj.consultaCNPJ("33000167000101"); 240 | console.log(resultado); 241 | } catch (erro) { 242 | console.error(erro); 243 | } 244 | } 245 | ``` 246 | 247 | ### Exemplo com Múltiplos CNPJs 248 | 249 | ```javascript 250 | const cnpjs = ["33000167000101", "00000000000191"]; 251 | 252 | for (const numeroCnpj of cnpjs) { 253 | const resultado = await cnpj.consultaCNPJ(numeroCnpj); 254 | console.log(resultado.razao_social); 255 | 256 | // Aguardar 2 segundos entre consultas 257 | await new Promise(resolve => setTimeout(resolve, 2000)); 258 | } 259 | ``` 260 | 261 | --- 262 | 263 | ## ⚠️ Breaking Changes 264 | 265 | ### Mudança de Sintaxe 266 | 267 | Se você estava usando a versão anterior: 268 | 269 | #### Antes (v2.0.x): 270 | ```javascript 271 | cnpj.consultaCNPJ({ cnpj: '33000167000101' }) 272 | ``` 273 | 274 | #### Agora (v2.1.0): 275 | ```javascript 276 | cnpj.consultaCNPJ('33000167000101') 277 | ``` 278 | 279 | ### Migração 280 | 281 | Para atualizar seu código: 282 | 283 | 1. Remova o objeto wrapper `{ cnpj: ... }` 284 | 2. Passe o CNPJ diretamente como string ou número 285 | 3. Atualize os campos da resposta (veja tabela acima) 286 | 287 | **Exemplo de migração:** 288 | 289 | ```javascript 290 | // ANTES 291 | cnpj.consultaCNPJ({ cnpj: dados.cnpj }) 292 | .then(r => { 293 | console.log(r.nome); // Campo antigo 294 | console.log(r.fantasia); // Campo antigo 295 | }); 296 | 297 | // DEPOIS 298 | cnpj.consultaCNPJ(dados.cnpj) 299 | .then(r => { 300 | console.log(r.razao_social); // Campo novo 301 | console.log(r.nome_fantasia); // Campo novo 302 | }); 303 | ``` 304 | 305 | --- 306 | 307 | ## 🎯 Próximos Passos 308 | 309 | ### Sugestões de Melhorias Futuras 310 | 311 | - [ ] Implementar cache integrado 312 | - [ ] Adicionar retry automático 313 | - [ ] Suporte a TypeScript 314 | - [ ] Validação de CNPJ (dígitos verificadores) 315 | - [ ] Rate limiting automático 316 | - [ ] Métricas e logs opcionais 317 | - [ ] Suporte a batch de consultas 318 | 319 | --- 320 | 321 | ## 📚 Recursos 322 | 323 | - [README.md](./README.md) - Documentação principal 324 | - [TESTES.md](./TESTES.md) - Guia completo de testes 325 | - [API OpenCNPJ](https://api.opencnpj.org/) 326 | - [NPM Package](https://www.npmjs.com/package/consulta-cnpj-ws) 327 | - [GitHub](https://github.com/jos3duardo/cnpj-ws) 328 | 329 | --- 330 | 331 | ## 👤 Contribuições 332 | 333 | Estas atualizações foram realizadas para: 334 | 335 | 1. ✅ Modernizar a biblioteca 336 | 2. ✅ Melhorar a experiência do desenvolvedor 337 | 3. ✅ Corrigir bugs conhecidos 338 | 4. ✅ Adicionar documentação completa 339 | 5. ✅ Facilitar testes e debugging 340 | 341 | --- 342 | 343 | **Versão Atual:** 2.1.0 344 | **Data das Atualizações:** 2024 345 | **Status:** ✅ Estável e Testado 346 | --------------------------------------------------------------------------------