Produtos
Objetivo
Documentar os campos fiscais obrigatórios para o cadastro de produtos no contexto da localização brasileira, incluindo classificação fiscal (NCM, CEST), configurações de impostos por produto, integração com o Siscomex DUIMP/CATP, e as tabelas auxiliares de NCM por UF para cálculo de ICMS/ICMS ST.
Implementação Técnica
- Model principal:
product.template (herança) — classe Product
- Model variante:
product.product (herança) — classe ProductProduct
- Arquivo:
l10n_br_ciel_it_account/models/product.py (linha 380)
Campos Fiscais do Produto (product.template)
Classificação Fiscal
| Campo |
Tipo |
Descrição |
Obrigatório |
l10n_br_tipo_produto |
Selection |
Tipo: Revenda, Matéria-prima, Acabado, Serviço, Consumível, Semi-acabado, Ativo Fixo |
Herda da categoria se vazio |
l10n_br_origem |
Selection |
Origem da mercadoria (0=Nacional, 1=Estrangeira direta, 2=Estrangeira mercado interno, etc.) |
✅ |
l10n_br_ncm_id |
Many2one |
NCM (Nomenclatura Comum do Mercosul) — tabela l10n_br_ciel_it_account.ncm |
✅ |
l10n_br_grupo_id |
Many2one |
Grupo de produto brasileiro (l10n_br_ciel_it_account.product.group) |
— |
l10n_br_indescala |
Boolean (padrão: True) |
Indica se o produto é de escala relevante |
— |
l10n_br_cnpj_fabricante |
Char |
CNPJ do fabricante (obrigatório se escala não relevante) |
— |
l10n_br_fci |
Char (company_dependent) |
Código FCI (Ficha de Conteúdo de Importação) |
Para importados |
l10n_br_fator_utrib |
Float (12,8) |
Fator de conversão para unidade tributável |
— |
Serviços
| Campo |
Tipo |
Descrição |
l10n_br_codigo_servico |
Char |
Código do serviço (LC 116) |
l10n_br_codigo_tributacao_servico |
Char |
Código de tributação do serviço |
l10n_br_codigo_nbs |
Char |
Código NBS (Nomenclatura Brasileira de Serviços) |
l10n_br_exigibilidade_iss |
Selection |
Exigibilidade do ISS |
l10n_br_natureza_iss |
Selection |
Natureza da tributação do serviço |
l10n_br_material_aplicado_servico |
Boolean |
Material aplicado no serviço com dedução de ISS |
l10n_br_infendobraimovel |
Selection |
Informar endereço da obra/imóvel: obra, imovel, ambos (obra+imóvel), nao (padrão). Com 'ambos', gera os dois blocos TX2 simultaneamente. Ver NFS-e TX2 |
| Campo |
Tipo |
Descrição |
l10n_br_codigo_operacao |
Char |
Indicador de operação IBS/CBS |
l10n_br_classtrib_ibs_cbs |
Char |
Classificação Tributária IBS/CBS |
ANVISA (Medicamentos)
| Campo |
Tipo |
Descrição |
l10n_br_farmaceutico |
Boolean |
Produto farmacêutico/medicamento |
l10n_br_registro_anvisa |
Char |
Número de registro ANVISA |
l10n_br_validade_processo_anvisa |
Date |
Validade do registro |
l10n_br_preco_maximo_anvisa |
Float |
Preço Máximo ao Consumidor (PMC) |
l10n_br_processo_anvisa |
Char |
Número do processo |
ANP (Combustíveis)
| Campo |
Tipo |
Descrição |
l10n_br_registro_anp |
Boolean |
Produto com registro ANP |
l10n_br_produto_anp |
Char |
Código de produto ANP |
Energia/Gás
| Campo |
Tipo |
Descrição |
l10n_br_consumo_energia_gas |
Selection |
Tipo de consumo (Comercial, Industrial, Rural, etc.) |
l10n_br_tipo_ligacao |
Selection |
Monofásico, Bifásico, Trifásico |
l10n_br_grupo_tensao |
Selection |
Grupo de tensão (A1 a B4b) |
ICMS ST Retido (Produto)
| Campo |
Tipo |
Descrição |
l10n_br_icmsst_retido_base |
Float |
Valor da base do ICMS ST retido |
l10n_br_icmsst_retido_aliquota |
Float |
Alíquota suportada pelo consumidor final |
l10n_br_icmsst_substituto_valor |
Float |
Valor do ICMS próprio do substituto |
l10n_br_icmsst_retido_valor |
Float |
Valor do ICMS ST retido |
REINF
| Campo |
Tipo |
Descrição |
l10n_br_reinf_01 |
Many2one |
Natureza do rendimento (Tabela REINF 01 — 280+ itens) |
l10n_br_reinf_06 |
Selection |
Tipo de serviço (Tabela REINF 06 — 31 itens) |
PIS/COFINS
| Campo |
Tipo |
Descrição |
l10n_br_nat_bc_cred |
Selection |
Natureza da base de crédito PIS/COFINS (18 opções: revenda, insumo, energia, etc.) |
Outros
| Campo |
Tipo |
Descrição |
l10n_br_informacao_adicional |
Text |
Informações adicionais para inserção na NF |
fiscal_tag_ids |
Many2many |
Marcadores fiscais do produto |
weight |
Float |
Peso líquido |
gross_weight |
Float (computed) |
Peso bruto (sincronizado com variante) |
company_ids |
Many2many |
Empresas onde o produto é utilizado |
invoices_count |
Float (computed) |
Quantidade faturada nos últimos 365 dias |
Integração DUIMP/CATP (Siscomex)
Campos DUIMP no Produto
| Campo |
Tipo |
Descrição |
l10n_br_duimp_denominacao |
Char (120) |
Denominação do produto para DUIMP |
l10n_br_duimp_descricao |
Text |
Detalhamento complementar |
l10n_br_duimp_modalidade |
Selection |
IMPORTACAO (padrão) ou EXPORTACAO |
duimp_attribute_value_ids |
One2many |
Atributos NCM para DUIMP |
duimp_fabricante_ids |
One2many |
Fabricantes estrangeiros |
duimp_catp_external_id |
Char (company_dependent) |
Código do produto no CATP |
duimp_catp_last_sync_at |
Datetime |
Data/hora da última sincronização |
duimp_catp_last_status |
Selection |
ok, failed, pending |
duimp_catp_last_error |
Text |
Mensagem do último erro |
Método: action_sync_catp()
- Arquivo:
product.py, linha 444
- Ação: Envia/atualiza o produto no Portal Único Siscomex (CATP)
- Fluxo: Instancia
DuimpCatpClient → chama push_product(record)
- Disponível em
product.template e product.product
Método: _update_duimp_attributes()
- Arquivo:
product.py, linha 452
- Ação: Pré-preenche os atributos DUIMP obrigatórios com base no NCM selecionado
- Trigger: Automático via
@api.onchange('l10n_br_ncm_id')
- Lógica: Filtra atributos com
modalidade == 'IMPORTACAO', cria linhas apenas para atributos que ainda não existem no produto
Models Auxiliares
ProductFiscalTag (l10n_br_ciel_it_account.product.fiscal.tag)
Tags fiscais para produtos. Constraint: nome único.
ProductCategory (herança product.category)
Campo adicional l10n_br_tipo_produto — define o tipo do produto na categoria (fallback quando o produto não define).
L10nBrProductGroup (l10n_br_ciel_it_account.product.group)
Agrupamento de produtos brasileiros. Constraint: nome único.
L10nBrIestUf (l10n_br_ciel_it_account.iest.uf)
Inscrição Estadual do Substituto Tributário por combinação UF Origem → UF Destino.
| Campo |
Descrição |
state_de_id |
UF de origem |
state_para_id |
UF de destino |
l10n_br_iest |
Inscrição Estadual ST |
L10nBrNcmUf (l10n_br_ciel_it_account.ncm.uf)
Tabela de exceção de ICMS/ICMS ST por NCM + UF Origem + UF Destino.
| Campo |
Descrição |
l10n_br_ncm_id |
NCM |
state_de_id / state_para_id |
UF origem / destino |
l10n_br_fcp_aliquota |
Alíquota FCP (%) |
l10n_br_icms_cst |
CST do ICMS |
l10n_br_icms_modalidade_base |
Modalidade da BC ICMS |
l10n_br_icms_reducao_base |
Redução da BC (%) |
l10n_br_icms_aliquota |
Alíquota ICMS (%) |
l10n_br_icmsst_* |
Todos os parâmetros de ICMS ST (MVA, alíquota, redução, modalidade, flags) |
l10n_br_mensagem_fiscal_id |
Observação fiscal vinculada |
L10nBrNcmOrigemUf (l10n_br_ciel_it_account.ncm.origem.uf)
Variante da tabela NCM/UF que também filtra por Origem da mercadoria (nacional/importada).
L10nBrNcmIeUf (l10n_br_ciel_it_account.ncm.ie.uf)
Variante da tabela NCM/UF que também filtra por Indicador de IE do parceiro + Origem.
L10nBrNcmClienteUf (l10n_br_ciel_it_account.ncm.cliente.uf)
Variante da tabela NCM/UF que filtra por clientes específicos (Many2many com res.partner).
Hierarquia de Determinação de ICMS
O motor de cálculo busca alíquotas de ICMS na seguinte ordem de prioridade:
1. NCM + Cliente + UF (ncm.cliente.uf)
↓ (não encontrou)
2. NCM + Indicador IE + Origem + UF (ncm.ie.uf)
↓ (não encontrou)
3. NCM + Origem + UF (ncm.origem.uf)
↓ (não encontrou)
4. NCM + UF (ncm.uf)
↓ (não encontrou)
5. Alíquota padrão da Operação Fiscal / Posição Fiscal
Regras de Negócio
1. Tipo do Produto
- Se
l10n_br_tipo_produto está vazio no produto, o sistema usa o l10n_br_tipo_produto da categoria do produto
- O tipo determina qual conta contábil de estoque, receita e despesa será utilizada (configurado na empresa)
2. Peso Bruto
- O campo
gross_weight é sincronizado entre product.template e product.product
- Para templates com uma única variante, o peso bruto da variante é usado
3. Contagem de Faturamento
invoices_count calcula o total faturado nos últimos 365 dias
- Considera apenas faturas de cliente (
out_invoice e out_refund) não canceladas/rascunho
Cenários de Uso / Troubleshooting
1. NCM não encontrado
- Causa: A tabela de NCMs pode não estar atualizada
- Solução: Importar dados atualizados via arquivos de dados ou sincronizar via CADA/Siscomex
2. ICMS ST incorreto
- Causa: Faltam registros na tabela
ncm.uf para a combinação NCM + UF
- Solução: Cadastrar as exceções por UF na tela de NCM por UF
3. Sincronização CATP falhou
- Verificar: Status em
duimp_catp_last_status e erro em duimp_catp_last_error
- Verificar: Configuração de autenticação Siscomex na empresa
- Verificar: Atributos NCM obrigatórios estão preenchidos
4. FCI ausente em produto importado
- Sintoma: Rejeição na NF-e para produtos importados
- Causa: Campo
l10n_br_fci não preenchido
- Solução: Gerar a FCI via módulo SPED (ver SPED)
Referências Cruzadas