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.
Release files for siscomex-ncm 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| siscomex_ncm-1.0.2.tar.gz | 5.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| siscomex_ncm-1.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size:12.9 kB
Release files / siscomex_ncm-1.0.2.tar.gz
| Download URL | siscomex_ncm-1.0.2.tar.gz |
|---|---|
| Size | 5.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ef4c9a09ded052d3a1d38cbb0a9214969c2978c01060bcc2d68330098fef653e
|
|
BLAKE2b-256 checksum How to use checksums |
fa53533be3d1d0d57a2428b0039f8596dc4f5869ea963608f649eee0ac5ed8ad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 7, 2025.
Transparency logRelease files / siscomex_ncm-1.0.2-py3-none-any.whl
| Download URL | siscomex_ncm-1.0.2-py3-none-any.whl |
|---|---|
| Size | 7.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
995feb5150027fcf95e44984a5dfac937d98c5e69aa68dbd70767c66947d3e88
|
|
BLAKE2b-256 checksum How to use checksums |
0317fbb17008ed2d94455154afc7b937341881ef879bf020a86054408786e464
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 7, 2025.
Transparency log