Quickstart
This quickstart shows a minimal usage of the engine based on the public interfaces (Interfaces/) and the flows implemented in Models/ImpostoMotor.cs, Models/NotaFiscal.cs, and Models/Produto.cs.
Requirements
- .NET 8
Example: single product
using MCIBr.Enums;
using MCIBr.Interfaces;
using MCIBr.Models;
var motor = new ImpostoMotor
{
TipoOperacao = OperacaoDestino.Interna,
CalcParam = new CalcParams
{
CalcType = CalcType.Round,
CalcDecimal = 2
}
};
var nf = motor.NotaFiscal;
nf.ModeloDFe = ModeloDFe.NFe;
nf.TotalProdutosNF = 100;
nf.FreteEmbutidoNF = 0;
nf.SeguroNF = 0;
nf.DespesasAcessoriasNF = 0;
nf.AcrescimoNF = 0;
nf.DescontoNF = 0;
var emit = nf.Emitente;
emit.UFSigla = "SP";
emit.RegimeTributario = RegimeTributario.LucroPresumido;
emit.ContribuinteIpi = ContribuinteIpi.Contribuinte;
var dest = nf.Destinatario;
dest.UFSigla = "SP";
dest.ContribuinteIcms = ContribuinteIcms.Contribuinte;
dest.ConsumidorFinal = false;
var item = nf.Produto;
item.Item = "Produto A";
item.Cfop = 5102;
item.Quantidade = 1;
item.PrecoUnitario = 100;
item.TipoVenda = TipoVenda.Revenda;
motor.Processar();
var mensagens = nf.ValidationPipes().ListMessages();
var valorIcms = item.ICMS.AsValor();
Example: multiple products (allocation + diff adjustment)
When you use AddProduto(), NotaFiscal processes all items and selects the highest-total product to execute ProcessarDiffRateio(), adjusting differences generated by allocation rounding/truncation.
using MCIBr.Enums;
using MCIBr.Models;
var motor = new ImpostoMotor();
motor.TipoOperacao = OperacaoDestino.Interna;
var nf = motor.NotaFiscal;
nf.TotalProdutosNF = 300;
nf.FreteEmbutidoNF = 30;
nf.Emitente.UFSigla = "SP";
nf.Emitente.RegimeTributario = RegimeTributario.SimplesNacional;
nf.Destinatario.UFSigla = "RJ";
nf.Destinatario.ContribuinteIcms = ContribuinteIcms.NaoContribuinte;
nf.Destinatario.ConsumidorFinal = true;
var p1 = nf.AddProduto();
p1.Item = "P1";
p1.Cfop = 6102;
p1.Quantidade = 1;
p1.PrecoUnitario = 200;
var p2 = nf.AddProduto();
p2.Item = "P2";
p2.Cfop = 6102;
p2.Quantidade = 1;
p2.PrecoUnitario = 100;
motor.Processar();
Common Errors
- If
Emitente.RegimeTributariois not set,NotaFiscal.Processar()throwsInvalidOperationException. - If
Destinatario.ContribuinteIcmsis not set,NotaFiscal.Processar()throwsInvalidOperationException. - If
TotalProdutosNFis<= 0,NotaFiscal.Processar()throwsInvalidOperationException. - If a product
PrecoUnitario,Quantidade, orCfopis invalid,Produto.Processar()throwsInvalidOperationException.
See details in: Troubleshooting.