Natureza de Operação - Item de Terceiro (Ordem de Compra)
📋 Visão Geral
Este documento explica qual é a Natureza de Operação utilizada na tela de adição de itens em Ordens de Compra e por que ela é importante para o cálculo correto dos tributos.
URL da tela: http://localhost:8000/comercial/adicionar-item-estoque/{pedidoId}?tipoPedidoItem=OrdemCompra
🎯 Natureza de Operação Utilizada
TipoNaturezaOperacaoEnum.Compra
A Ordem de Compra utiliza a natureza de operação COMPRA, que representa uma operação de entrada de mercadorias.
📍 Onde é Definida
1. Inicialização no Controller
Arquivo: src/Nelmetais.SGE.WebApp/Areas/Comercial/Controllers/PedidoItemController.cs
// Linha 106-125
[Route("adicionar-item-estoque/{pedidoId:int}")]
[AuthorizeCustom(PermissaoTypeEnum.Pedido, PermissaoValueEnum.Adicionar)]
public async Task<IActionResult> Create(int pedidoId, TipoPedidoItemEnum tipoPedidoItem)
{
var pedidoItemViewModel = new PedidoItemViewModel
{
PedidoId = pedidoId,
Pedido = await ObterPedido(pedidoId),
TipoPedidoItem = (int)tipoPedidoItem
};
// ← AQUI: Define Natureza de Operação como COMPRA
if (tipoPedidoItem == TipoPedidoItemEnum.OrdemCompra)
pedidoItemViewModel.OrdemCompraItem = new() {
OrdemCompra = new() {
NaturezaOperacaoId = (int)TipoNaturezaOperacaoEnum.Compra // ← COMPRA
}
};
if (pedidoItemViewModel.Pedido is null)
return NotFound();
pedidoItemViewModel = await PopularListasDropDown(pedidoItemViewModel);
return View(pedidoItemViewModel);
}
2. Carregamento Completo dos Dados
// PedidoItemController.cs:267-304
private async Task<PedidoItemViewModel> PopularListasDropDown(PedidoItemViewModel viewModel)
{
// ... outras populações de listas ...
if (viewModel.TipoPedidoItem == (int)TipoPedidoItemEnum.OrdemCompra)
{
// ... configurações específicas de Ordem de Compra ...
// ← Carrega dados completos da Natureza de Operação do banco
if (viewModel.OrdemCompraItem?.OrdemCompra!.NaturezaOperacao is null)
viewModel.OrdemCompraItem!.OrdemCompra!.NaturezaOperacao =
await _naturezaOperacaoRepository.ObterNaturezaOperacao(
viewModel.OrdemCompraItem!.OrdemCompra!.NaturezaOperacaoId
);
// ... continua ...
}
viewModel = await PopularTributos(viewModel);
return viewModel;
}
📊 Enum de Natureza de Operação
Arquivo: src/Nelmetais.SGE.Business/Enums/Cadastros/TipoNaturezaOperacaoEnum.cs
public enum TipoNaturezaOperacaoEnum
{
Venda = 1,
Compra = 2,
Transferencia = 3,
Devolucao = 4,
Remessa = 5,
Retorno = 6,
Importacao = 7,
Exportacao = 8
}
🔄 Diferença entre Tipos de Item
📦 Ordem de Compra (Item de Terceiro)
Características: - Operação de ENTRADA de mercadorias - Compra de fornecedores - CFOPs começam com 1 (entrada estadual) ou 2 (entrada interestadual) - Impostos calculados como crédito fiscal (na maioria dos casos)
📤 Pedido de Venda (Item Próprio)
Características: - Operação de SAÍDA de mercadorias - Venda para clientes - CFOPs começam com 5 (saída estadual) ou 6 (saída interestadual) - Impostos calculados como débito fiscal
⚙️ Por que a Natureza de Operação é Importante?
A Natureza de Operação é fundamental para o cálculo correto dos tributos porque ela determina:
1️⃣ CFOP Correto
| Natureza | Direção | Exemplos de CFOP | Descrição |
|---|---|---|---|
| Compra | Entrada | 1101, 1102, 1111 | Entrada no estado |
| Compra | Entrada | 2101, 2102, 2111 | Entrada de outro estado |
| Venda | Saída | 5101, 5102, 5111 | Saída no estado |
| Venda | Saída | 6101, 6102, 6111 | Saída para outro estado |
2️⃣ Alíquotas de ICMS
┌─────────────────────────────────────────────────────────┐
│ OPERAÇÃO DE COMPRA (Entrada) │
├─────────────────────────────────────────────────────────┤
│ - ICMS Normal: Crédito fiscal │
│ - Alíquota interestadual: 4%, 7% ou 12% │
│ - Diferencial de alíquota (DIFAL) pode ser aplicado │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ OPERAÇÃO DE VENDA (Saída) │
├─────────────────────────────────────────────────────────┤
│ - ICMS Normal: Débito fiscal │
│ - Alíquota interna: geralmente 18% │
│ - ICMS ST pode ser aplicado │
└─────────────────────────────────────────────────────────┘
3️⃣ CST/CSOSN (Código de Situação Tributária)
| Natureza | CST Típico | Descrição |
|---|---|---|
| Compra | 00 | Tributada integralmente |
| Compra | 10 | Tributada com cobrança de ICMS por ST |
| Compra | 20 | Com redução de base de cálculo |
| Venda | 00 | Tributada integralmente |
| Venda | 10 | Tributada com cobrança de ICMS por ST |
| Venda | 60 | ICMS cobrado anteriormente por ST |
4️⃣ IPI, PIS e COFINS
| Natureza | IPI | PIS | COFINS | Crédito/Débito |
|---|---|---|---|---|
| Compra | Gera crédito | Gera crédito | Gera crédito | Crédito |
| Venda | Gera débito | Gera débito | Gera débito | Débito |
5️⃣ Configurações Fiscais Corretas
O sistema busca as configurações fiscais (CfopConfig, IcmsConfig, IpiConfig, PisCofinsConfig) adequadas para a Natureza de Operação:
// A natureza de operação é usada como filtro nas consultas
var cfopConfiguracoes = await _pedidoItemService.ObterCfopConfiguracoes(
pedidoId, // ← Pedido contém a Natureza de Operação
mercadoriaId,
tipoOrigemMercadoriaId
);
🔍 Fluxo de Uso da Natureza de Operação
┌─────────────────────────────────────────────────────────┐
│ 1. Usuário acessa tela de Ordem de Compra │
└────────────────────┬────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 2. Controller define: │
│ NaturezaOperacaoId = TipoNaturezaOperacaoEnum.Compra│
└────────────────────┬────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 3. Sistema carrega dados completos da Natureza │
│ do banco via _naturezaOperacaoRepository │
└────────────────────┬────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 4. Natureza de Operação é usada para: │
│ ✓ Filtrar CFOPs corretos (entrada) │
│ ✓ Buscar alíquotas de ICMS apropriadas │
│ ✓ Determinar CST/CSOSN │
│ ✓ Calcular IPI, PIS, COFINS corretamente │
└────────────────────┬────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 5. Tributos são calculados corretamente │
│ considerando a operação de ENTRADA │
└─────────────────────────────────────────────────────────┘
📦 Modelo de Dados
Tabela NaturezaOperacao
CREATE TABLE "NaturezaOperacao" (
"Id" INTEGER PRIMARY KEY,
"Nome" TEXT NOT NULL,
"Tipo" INTEGER NOT NULL, -- 1=Venda, 2=Compra, 3=Transferência, etc.
"GerarFinanceiro" BOOLEAN,
"GerarEstoque" BOOLEAN,
"Ativo" BOOLEAN
);
Exemplos de Registros
| Id | Nome | Tipo | Descrição |
|---|---|---|---|
| 1 | Venda | 1 | Venda de mercadorias |
| 2 | Compra | 2 | Compra de fornecedores ← USADO |
| 3 | Transferência | 3 | Transferência entre filiais |
| 4 | Devolução | 4 | Devolução de mercadorias |
| 5 | Remessa | 5 | Remessa para beneficiamento |
| 6 | Retorno | 6 | Retorno de beneficiamento |
🔗 Relacionamento com OrdemCompra
public class OrdemCompra
{
public int Id { get; set; }
// ← Relacionamento com Natureza de Operação
public int NaturezaOperacaoId { get; set; }
public NaturezaOperacao? NaturezaOperacao { get; set; }
// Outros campos...
public int FornecedorId { get; set; }
public Pessoa? Fornecedor { get; set; }
public decimal ValorTotal { get; set; }
public decimal ValorLiquido { get; set; }
// Relacionamento com itens
public ICollection<OrdemCompraItem>? OrdemCompraItens { get; set; }
}
📝 Exemplo de CFOP por Natureza de Operação
COMPRA (Entrada)
| CFOP | Descrição | Quando Usar |
|---|---|---|
| 1101 | Compra para industrialização | Mercadoria será transformada |
| 1102 | Compra para comercialização | Mercadoria será revendida |
| 1111 | Compra para industrialização de mercadoria recebida anteriormente em consignação industrial | Casos específicos |
| 2101 | Compra para industrialização originada de outra UF | Fornecedor de outro estado |
| 2102 | Compra para comercialização originada de outra UF | Revenda, fornecedor de outro estado |
VENDA (Saída)
| CFOP | Descrição | Quando Usar |
|---|---|---|
| 5101 | Venda de produção do estabelecimento | Produto fabricado pela empresa |
| 5102 | Venda de mercadoria adquirida ou recebida de terceiros | Revenda |
| 5405 | Venda de mercadoria adquirida ou recebida de terceiros em operação com mercadoria sujeita ao regime de ST | Com ST |
| 6101 | Venda de produção do estabelecimento para outro estado | Fabricado, outro estado |
| 6102 | Venda de mercadoria adquirida ou recebida de terceiros para outro estado | Revenda, outro estado |
🔍 Como Verificar no Sistema
1. Via Controller
// No método Create do PedidoItemController
var naturezaOperacaoId = pedidoItemViewModel.OrdemCompraItem?.OrdemCompra?.NaturezaOperacaoId;
// Para Ordem de Compra: naturezaOperacaoId = 2 (Compra)
2. Via Repository
var naturezaOperacao = await _naturezaOperacaoRepository.ObterNaturezaOperacao(2);
// Retorna: { Id: 2, Nome: "Compra", Tipo: 2, ... }
3. Via JavaScript (Frontend)
// Não é diretamente acessível no frontend
// A natureza de operação é usada no backend para filtrar configurações
🎯 Impacto na Busca de Configurações Tributárias
Service Layer - PedidoItemService
public async Task<List<CfopConfig>> ObterCfopConfiguracoes(
int? pedidoId,
int? mercadoriaId,
int? tipoOrigemMercadoriaId)
{
// 1. Busca o Pedido (que contém a Natureza de Operação)
var pedido = await _pedidoRepository.ObterPedido(pedidoId);
// 2. Obtém a Natureza de Operação
var naturezaOperacao = pedido?.OrdemCompra?.NaturezaOperacao;
// 3. Filtra CFOPs compatíveis com a Natureza de Operação
var cfops = await _cfopConfigRepository.ObterPorNaturezaOperacao(
naturezaOperacao.Id,
mercadoriaId,
tipoOrigemMercadoriaId
);
return cfops;
}
📊 Resumo
| Aspecto | Ordem de Compra (Item de Terceiro) |
|---|---|
| Natureza de Operação | TipoNaturezaOperacaoEnum.Compra (Id = 2) |
| Direção do Fluxo | ENTRADA de mercadorias |
| CFOP Inicial | 1xxx (estadual) ou 2xxx (interestadual) |
| Efeito Fiscal | Gera créditos fiscais (ICMS, IPI, PIS, COFINS) |
| Finalidade | Compra de mercadorias de fornecedores |
| Registro Contábil | Débito: Estoque / Crédito: Fornecedores |
🔗 Arquivos Relacionados
Backend
| Arquivo | Localização | Responsabilidade |
|---|---|---|
TipoNaturezaOperacaoEnum.cs |
Business/Enums/Cadastros/ |
Define tipos de natureza de operação |
NaturezaOperacao.cs |
Business/Models/Cadastros/ |
Entidade de natureza de operação |
INaturezaOperacaoRepository.cs |
Business/Interfaces/Cadastros/ |
Interface do repositório |
NaturezaOperacaoRepository.cs |
Data/Repositories/Cadastros/ |
Implementação do repositório |
PedidoItemController.cs |
WebApp/Areas/Comercial/Controllers/ |
Define natureza ao criar item |
Database
-- Tabela principal
SELECT * FROM "NaturezaOperacao" WHERE "Id" = 2;
-- Tabelas relacionadas
SELECT * FROM "OrdemCompra" WHERE "NaturezaOperacaoId" = 2;
SELECT * FROM "CfopConfig" WHERE "NaturezaOperacaoId" = 2;
💡 Observações Importantes
- Imutabilidade: A Natureza de Operação é definida no momento da criação da Ordem de Compra e não deve ser alterada
- Validação: O sistema valida se as configurações tributárias são compatíveis com a Natureza de Operação
- Auditoria: Todas as operações com Natureza de Operação são registradas para fins fiscais e auditoria
- Performance: A Natureza de Operação é carregada uma única vez no carregamento da página
- Cache: Configurações tributárias por Natureza de Operação podem ser cacheadas para melhor performance
🚀 Exemplo Prático
Cenário: Compra de Aço de um Fornecedor de SP
┌─────────────────────────────────────────────────────┐
│ Dados da Operação │
├─────────────────────────────────────────────────────┤
│ Natureza: COMPRA (Id: 2) │
│ Fornecedor: Fornecedor XYZ (SP) │
│ Empresa Compradora: Nelmetais (SP) │
│ Mercadoria: Chapa de Aço 1020 │
│ Valor: R$ 10.000,00 │
└─────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ Sistema determina: │
├─────────────────────────────────────────────────────┤
│ CFOP: 1101 (Compra para industrialização - SP) │
│ ICMS: 18% = R$ 1.800,00 (CRÉDITO) │
│ IPI: 5% = R$ 500,00 (CRÉDITO) │
│ PIS: 1,65% = R$ 165,00 (CRÉDITO) │
│ COFINS: 7,6% = R$ 760,00 (CRÉDITO) │
└─────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ Resultado: Tributos corretos para ENTRADA │
└─────────────────────────────────────────────────────┘
Última atualização: 2025-11-10
Relacionado: Ver também PREENCHIMENTO-AUTOMATICO-TRIBUTOS.md