API access to the NCM (Nomenclatura Comum do Mercosul) by Siscomex
Project description
Siscomex-NCM
Uma biblioteca Python para acessar e consultar dados da Nomenclatura Comum do Mercosul (NCM) a partir da API do Siscomex.
Sobre a NCM
A Nomenclatura Comum do Mercosul (NCM) é o sistema padronizado de códigos utilizado para classificar mercadorias e produtos em operações comerciais no Mercosul. Toda mercadoria que circula no Brasil deve ter um código NCM associado, que deve ser informado nas notas fiscais e documentos de comércio exterior.
O sistema foi adotado pelos países do Mercosul desde janeiro de 1995 e baseia-se no Sistema Harmonizado de Designação e de Codificação de Mercadorias (SH). No mercado interno brasileiro, seu uso é obrigatório desde 2013.
Estrutura do código NCM
O código NCM segue a estrutura 0000.00.00, um código de oito dígitos em que:
| Posição | Componente | Descrição |
|---|---|---|
| 1º e 2º | Capítulo | Caracterização básica do produto |
| 3º e 4º | Posição | Características gerais do produto |
| 5º e 6º | Subposição | Subcategoria do produto |
| 7º | Item | Classificação específica |
| 8º | Subitem | Descrição detalhada da mercadoria |
Exemplo:
Código NCM: 4820.20.00 - Cadernos
- Capítulo 48: Papel e cartão; obras de pasta de celulose, de papel ou de cartão.
- Posição 48.20: Livros de registro, blocos de notas, cadernos, etc.
- Subposição 4820.20: Cadernos
Instalação
Via PyPI (recomendado)
pip install siscomex-ncm
A partir do código-fonte
# 1. Clone o repositório
git clone https://github.com/leogregianin/siscomex-ncm.git
cd siscomex-ncm
# 2. Instale o poetry (se ainda não estiver instalado)
# https://python-poetry.org/docs/#installation
# 3. Instale as dependências
poetry install
Uso Básico
Importar a biblioteca
from ncm.client import FetchNcm
from ncm.entities import Ncm, NcmList
Consultar código NCM específico
# Inicializa o cliente (carrega automaticamente os dados do cache ou da API)
fetch_ncm = FetchNcm()
# Consulta um código NCM específico
ncm = fetch_ncm.get_codigo_ncm('01031000')
print(ncm.codigo_ncm) # '01031000'
print(ncm.descricao_ncm) # '- Reprodutores de raça pura'
print(ncm.data_inicio) # datetime object
print(ncm.tipo_ato) # Tipo do ato normativo
Consultar lista de NCMs
# Obter todos os códigos NCM
ncm_list = fetch_ncm.get_all()
print(len(ncm_list.ncm_list)) # Quantidade de códigos
# Obter apenas códigos NCM com 8 dígitos
ncm_list_8_digits = fetch_ncm.get_all(only_ncm_8_digits=True)
# Iterar sobre os resultados
for ncm in ncm_list_8_digits.ncm_list:
print(f"{ncm.codigo_ncm}: {ncm.descricao_ncm}")
Gerenciar o cache de dados
# Atualizar os dados forçadamente (ignorando o cache)
fetch_ncm = FetchNcm()
fetch_ncm.refresh_data()
# A classe FetchNcm gerencia automaticamente o cache:
# - Armazena os dados em um arquivo local (ncm.json)
# - Valida a data do cache (expira após 7 dias)
# - Verifica a integridade do arquivo
Funcionalidades Avançadas
Tratamento de erros
from ncm.exceptions import NcmDownloadException
try:
fetch_ncm = FetchNcm()
ncm = fetch_ncm.get_codigo_ncm('01031000')
except NcmDownloadException as e:
print(f"Erro ao baixar dados da API: {e}")
Performance otimizada
A biblioteca implementa diversas otimizações:
- Índice interno para busca rápida por código NCM
- Cache de consultas com
lru_cachepara operações repetidas - Expiração automática do cache (7 dias por padrão)
- Tratamento de conexão com timeout e retentativas
Desenvolvimento
Executar os testes
make test
Contribuir
- Faça um fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/nova-funcionalidade) - Implemente suas mudanças e adicione testes
- Commite suas alterações (
git commit -m 'Adiciona nova funcionalidade') - Envie para o GitHub (
git push origin feature/nova-funcionalidade) - Abra um Pull Request
Licença
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para mais detalhes.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file siscomex_ncm-1.0.2.tar.gz.
File metadata
- Download URL: siscomex_ncm-1.0.2.tar.gz
- Upload date:
- Size: 5.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef4c9a09ded052d3a1d38cbb0a9214969c2978c01060bcc2d68330098fef653e
|
|
| MD5 |
39dd08b37d017a36376bcb6b13963df9
|
|
| BLAKE2b-256 |
fa53533be3d1d0d57a2428b0039f8596dc4f5869ea963608f649eee0ac5ed8ad
|
Provenance
The following attestation bundles were made for siscomex_ncm-1.0.2.tar.gz:
Publisher:
release.yml on leogregianin/siscomex-ncm
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
siscomex_ncm-1.0.2.tar.gz -
Subject digest:
ef4c9a09ded052d3a1d38cbb0a9214969c2978c01060bcc2d68330098fef653e - Sigstore transparency entry: 232175237
- Sigstore integration time:
-
Permalink:
leogregianin/siscomex-ncm@cacd1cda19acf22e34a82e30c9b31cc508ee73e9 -
Branch / Tag:
refs/tags/1.0.2 - Owner: https://github.com/leogregianin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cacd1cda19acf22e34a82e30c9b31cc508ee73e9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file siscomex_ncm-1.0.2-py3-none-any.whl.
File metadata
- Download URL: siscomex_ncm-1.0.2-py3-none-any.whl
- Upload date:
- Size: 7.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
995feb5150027fcf95e44984a5dfac937d98c5e69aa68dbd70767c66947d3e88
|
|
| MD5 |
25b111aa071c2916ea92fb14ccbfd20d
|
|
| BLAKE2b-256 |
0317fbb17008ed2d94455154afc7b937341881ef879bf020a86054408786e464
|
Provenance
The following attestation bundles were made for siscomex_ncm-1.0.2-py3-none-any.whl:
Publisher:
release.yml on leogregianin/siscomex-ncm
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
siscomex_ncm-1.0.2-py3-none-any.whl -
Subject digest:
995feb5150027fcf95e44984a5dfac937d98c5e69aa68dbd70767c66947d3e88 - Sigstore transparency entry: 232175238
- Sigstore integration time:
-
Permalink:
leogregianin/siscomex-ncm@cacd1cda19acf22e34a82e30c9b31cc508ee73e9 -
Branch / Tag:
refs/tags/1.0.2 - Owner: https://github.com/leogregianin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cacd1cda19acf22e34a82e30c9b31cc508ee73e9 -
Trigger Event:
push
-
Statement type: