diff --git a/NFe.AppTeste/Schemas/DFeTiposBasicos_v1.00.xsd b/NFe.AppTeste/Schemas/DFeTiposBasicos_v1.00.xsd
index d204e406..a42c19a6 100644
--- a/NFe.AppTeste/Schemas/DFeTiposBasicos_v1.00.xsd
+++ b/NFe.AppTeste/Schemas/DFeTiposBasicos_v1.00.xsd
@@ -340,7 +340,7 @@
- Informar essa opção da Choice para Monofasia (CST 620)
+ Grupo de Informações do IBS e CBS em operações com imposto monofásico (CST 620)
@@ -732,157 +732,6 @@
-
-
- Tipo Monofasia
-
-
-
- Monofasia
-
-
-
- Grupo de informações da Tributação Monofásica padrão
-
-
-
-
-
- Quantidade tributada na monofasia
-
-
-
-
- Alíquota ad rem do IBS
-
-
-
-
- Alíquota ad rem da CBS
-
-
-
-
- Valor do IBS monofásico
-
-
-
-
- Valor da CBS monofásica
-
-
-
-
-
-
-
- Grupo de informações da Tributação Monofásica sujeita a retenção
-
-
-
-
-
- Quantidade tributada sujeita a retenção.
-
-
-
-
- Alíquota ad rem do IBS sujeito a retenção
-
-
-
-
- Valor do IBS monofásico sujeito a retenção
-
-
-
-
- Alíquota ad rem da CBS sujeita a retenção
-
-
-
-
- Valor da CBS monofásica sujeita a retenção
-
-
-
-
-
-
-
- Grupo de informações da Tributação Monofásica retida anteriormente
-
-
-
-
-
- Quantidade tributada retida anteriormente
-
-
-
-
- Alíquota ad rem do IBS retido anteriormente
-
-
-
-
- Valor do IBS retido anteriormente
-
-
-
-
- Alíquota ad rem da CBS retida anteriormente
-
-
-
-
- Valor da CBS retida anteriormente
-
-
-
-
-
-
-
- Grupo de informações do diferimento da Tributação Monofásica
-
-
-
-
-
- Percentual do diferimento do imposto monofásico
-
-
-
-
- Valor do IBS monofásico diferido
-
-
-
-
- Percentual do diferimento do imposto monofásico
-
-
-
-
- Valor da CBS monofásica diferida
-
-
-
-
-
-
-
- Total de IBS monofásico do item
-
-
-
-
- Total da CBS monofásica do item
-
-
-
-
Tipo CBS IBS Completo
@@ -1351,7 +1200,7 @@
4 – Recebimento do pagamento com fornecimento posterior;
-
+
Chave de acesso do documento fiscal anterior.
@@ -1395,7 +1244,7 @@ Obs: a chave de acesso deverá ser de um emitente com o mesmo CNPJ base
-
+
Chave de acesso do documento fiscal anterior.
@@ -1414,7 +1263,7 @@ Obs: a chave de acesso deverá ser de um emitente com o mesmo CNPJ baseInformado para abater as parcelas de antecipação de pagamento, conforme art. 10 §4
-
+
Chave de acesso do documento fiscal de antecipação de pagamento
@@ -1474,7 +1323,7 @@ Obs: esse DFe deverá ter o indAntecipacaoPgto marcado no grupo ide
-
+
@@ -1486,7 +1335,7 @@ comercializado.
-
+
@@ -1597,4 +1446,395 @@ OBS: Percentuais definidos no art. 450, § 1º, da LC 214/25 para o cálculo do
+
+
+ Grupo de Informações do IBS e CBS em operações com imposto monofásico (CST 620)
+
+
+
+
+
+
+
+
+ Grupo de informações da Tributação Monofásica Ad Rem do IBS
+
+
+
+
+
+ Grupo de informações da Tributação Monofásica Padrão
+
+
+
+
+
+ Quantidade tributada na monofasia
+
+
+
+
+ Alíquota ad rem do IBS
+
+
+
+
+ Valor do IBS monofásico
+
+
+
+
+
+
+
+ Grupo de informações da Tributação Monofásica Sujeita à Retenção
+
+
+
+
+
+ Quantidade tributada sujeita à retenção na monofasia
+
+
+
+
+ Alíquota ad rem do IBS sujeito à retenção
+
+
+
+
+ Valor do IBS monofásico sujeito à retenção
+
+
+
+
+
+
+
+ Grupo de informações da Tributação Monofásica Retida Anteriormente
+
+
+
+
+
+ Valor do IBS retido anteriormente
+
+
+
+
+
+
+
+ Grupo de informações sobre mistura de EAC com gasolina A em percentual inferior ou superior ao obrigatório
+
+
+
+
+
+ Quantidade de Biocombustível (EAC) a recolher ou a ressarcir
+
+
+
+
+ Valor do IBS correspondente a diferença em relação ao pBioObrigatorio
+
+
+
+
+
+
+
+
+
+
+
+ Grupo de informações da Tributação Monofásica Ad Valorem do IBS
+
+
+
+
+
+ Grupo de informações da Tributação Monofásica Padrão
+
+
+
+
+
+ Valor tributado na monofasia
+
+
+
+
+ Alíquota ad valorem do IBS Estadual
+
+
+
+
+ Valor do IBS monofásico Estadual
+
+
+
+
+ Alíquota ad valorem do IBS Municipal
+
+
+
+
+ Valor do IBS monofásico do Municipal
+
+
+
+
+ Valor do IBS monofásico
+
+
+
+
+
+
+
+ Grupo de informações da Tributação Monofásica Sujeita à Retenção
+
+
+
+
+
+ Valor tributado sujeito à retenção na monofasia
+
+
+
+
+ Alíquota ad valorem do IBS sujeito à retenção
+
+
+
+
+ Valor do IBS monofásico sujeito à retenção
+
+
+
+
+
+
+
+ Grupo de informações da Tributação Monofásica Retida Anteriormente
+
+
+
+
+
+ Valor do IBS retido anteriormente
+
+
+
+
+
+
+
+ Grupo de informações sobre mistura de EAC com gasolina A em percentual inferior ou superior ao obrigatório
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Grupo de informações da Tributação Monofásica Ad Rem da CBS
+
+
+
+
+
+ Grupo de informações da Tributação Monofásica Padrão
+
+
+
+
+
+ Quantidade tributada na monofasia
+
+
+
+
+ Alíquota ad rem da CBS
+
+
+
+
+ Valor da CBS monofásica
+
+
+
+
+
+
+
+ Grupo de informações da Tributação Monofásica Sujeita à Retenção
+
+
+
+
+
+ Quantidade tributada sujeita à retenção na monofasia
+
+
+
+
+ Alíquota ad rem da CBS sujeita à retenção
+
+
+
+
+ Valor da CBS monofásica sujeita à retenção
+
+
+
+
+
+
+
+ Grupo de informações da Tributação Monofásica Retida Anteriormente
+
+
+
+
+
+ Valor da CBS retida anteriormente
+
+
+
+
+
+
+
+ Grupo de informações sobre mistura de EAC com gasolina A em percentual inferior ou superior ao obrigatório
+
+
+
+
+
+ Quantidade de Biocombustível (EAC) a recolher ou a ressarcir
+
+
+
+
+ Valor da CBS correspondente a diferença em relação ao pBioObrigatorio
+
+
+
+
+
+
+
+
+
+
+
+ Grupo de informações da Tributação Monofásica Ad Valorem da CBS
+
+
+
+
+
+ Grupo de informações da Tributação Monofásica Padrão
+
+
+
+
+
+ Valor tributado na monofasia
+
+
+
+
+ Alíquota ad valorem da CBS
+
+
+
+
+ Valor da CBS monofásica
+
+
+
+
+
+
+
+ Grupo de informações da Tributação Monofásica Sujeita à Retenção
+
+
+
+
+
+ Valor tributado sujeito à retenção na monofasia
+
+
+
+
+ Alíquota ad valorem da CBS sujeita à retenção
+
+
+
+
+ Valor da CBS monofásica sujeita à retenção
+
+
+
+
+
+
+
+ Grupo de informações da Tributação Monofásica Retida Anteriormente
+
+
+
+
+
+ Valor da CBS retida anteriormente
+
+
+
+
+
+
+
+ Grupo de informações sobre mistura de EAC com gasolina A em percentual inferior ou superior ao obrigatório
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total de IBS Monofásico.
+
+
+
+
+ Total da CBS Monofásica.
+
+
+
+
\ No newline at end of file
diff --git a/NFe.AppTeste/Schemas/leiauteNFe_v4.00.xsd b/NFe.AppTeste/Schemas/leiauteNFe_v4.00.xsd
index 9e86de93..e7ce135a 100644
--- a/NFe.AppTeste/Schemas/leiauteNFe_v4.00.xsd
+++ b/NFe.AppTeste/Schemas/leiauteNFe_v4.00.xsd
@@ -561,7 +561,7 @@ Preencher com "2B", quando se tratar de Cupom Fiscal emitido por máqu
Endereço do emitente
-
+
Inscrição Estadual do Emitente
@@ -5624,7 +5624,7 @@ Substituição Tributaria;
Valores totais da NF com IBS / CBS
-
+
Valor Total da NF considerando os impostos por fora IBS, CBS e IS
diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/gCBSMonoAdRem.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/gCBSMonoAdRem.cs
new file mode 100644
index 00000000..f70158b7
--- /dev/null
+++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/gCBSMonoAdRem.cs
@@ -0,0 +1,26 @@
+using System.Xml.Serialization;
+
+namespace NFe.Classes.Informacoes.Detalhe.Tributacao
+{
+ ///
+ /// UB95a - Grupo de informações da Tributação Monofásica Ad Rem da CBS (NT 2025.002 v1.50)
+ ///
+ public class gCBSMonoAdRem
+ {
+ // UB96
+ [XmlElement(Order = 1)]
+ public gMonoPadraoCBSAdRem gMonoPadrao { get; set; }
+
+ // UB97
+ [XmlElement(Order = 2)]
+ public gMonoRetenCBSAdRem gMonoReten { get; set; }
+
+ // UB98
+ [XmlElement(Order = 3)]
+ public gMonoRetCBS gMonoRet { get; set; }
+
+ // UB99
+ [XmlElement(Order = 4)]
+ public gpBioDiferencaCBS gpBioDiferenca { get; set; }
+ }
+}
diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/gCBSMonoAdValorem.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/gCBSMonoAdValorem.cs
new file mode 100644
index 00000000..1790fd1a
--- /dev/null
+++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/gCBSMonoAdValorem.cs
@@ -0,0 +1,26 @@
+using System.Xml.Serialization;
+
+namespace NFe.Classes.Informacoes.Detalhe.Tributacao
+{
+ ///
+ /// UB100 - Grupo de informações da Tributação Monofásica Ad Valorem da CBS (NT 2025.002 v1.50)
+ ///
+ public class gCBSMonoAdValorem
+ {
+ // UB101
+ [XmlElement(Order = 1)]
+ public gMonoPadraoCBSAdValorem gMonoPadrao { get; set; }
+
+ // UB102
+ [XmlElement(Order = 2)]
+ public gMonoRetenCBSAdValorem gMonoReten { get; set; }
+
+ // UB103
+ [XmlElement(Order = 3)]
+ public gMonoRetCBS gMonoRet { get; set; }
+
+ // UB104
+ [XmlElement(Order = 4)]
+ public gpBioDiferencaCBS gpBioDiferenca { get; set; }
+ }
+}
diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/gIBSCBSMono.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/gIBSCBSMono.cs
index e0054990..6a1857fa 100644
--- a/NFe.Classes/Informacoes/Detalhe/Tributacao/gIBSCBSMono.cs
+++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/gIBSCBSMono.cs
@@ -2,37 +2,72 @@
namespace NFe.Classes.Informacoes.Detalhe.Tributacao
{
+ ///
+ /// UB84 - Grupo de Informações do IBS e CBS em operações com imposto monofásico (CST 620)
+ ///
+ /// Leiaute da NT 2025.002 v1.50 (PL_010f): o IBS vai em gIBSMonoAdRem ou gIBSMonoAdValorem
+ /// e a CBS em gCBSMonoAdRem ou gCBSMonoAdValorem.
+ ///
+ ///
+ /// gMonoPadrao, gMonoReten, gMonoRet e gMonoDif são do leiaute anterior, que deixa de ser aceito em 03/11/2026.
+ /// Ficam somente para a leitura de documentos já autorizados e não devem ser preenchidos em novas emissões.
+ ///
+ ///
public class gIBSCBSMono
{
private decimal _vTotIbsMonoItem;
private decimal _vTotCbsMonoItem;
- // UB84a
+ // UB84a (leiaute anterior à NT 2025.002 v1.50)
[XmlElement(Order = 1)]
public gMonoPadrao gMonoPadrao { get; set; }
- // UB90
+ // UB90 (leiaute anterior à NT 2025.002 v1.50)
[XmlElement(Order = 2)]
public gMonoReten gMonoReten { get; set; }
- // UB94
+ // UB94 (leiaute anterior à NT 2025.002 v1.50)
[XmlElement(Order = 3)]
public gMonoRet gMonoRet { get; set; }
- // UB99
+ // UB99 (leiaute anterior à NT 2025.002 v1.50)
[XmlElement(Order = 4)]
public gMonoDif gMonoDif { get; set; }
- // UB104
+ ///
+ /// UB85a - Tributação Monofásica Ad Rem do IBS. Informar este ou gIBSMonoAdValorem
+ ///
[XmlElement(Order = 5)]
+ public gIBSMonoAdRem gIBSMonoAdRem { get; set; }
+
+ ///
+ /// UB90 - Tributação Monofásica Ad Valorem do IBS. Informar este ou gIBSMonoAdRem
+ ///
+ [XmlElement(Order = 6)]
+ public gIBSMonoAdValorem gIBSMonoAdValorem { get; set; }
+
+ ///
+ /// UB95a - Tributação Monofásica Ad Rem da CBS. Informar este ou gCBSMonoAdValorem
+ ///
+ [XmlElement(Order = 7)]
+ public gCBSMonoAdRem gCBSMonoAdRem { get; set; }
+
+ ///
+ /// UB100 - Tributação Monofásica Ad Valorem da CBS. Informar este ou gCBSMonoAdRem
+ ///
+ [XmlElement(Order = 8)]
+ public gCBSMonoAdValorem gCBSMonoAdValorem { get; set; }
+
+ // UB105a
+ [XmlElement(Order = 9)]
public decimal vTotIBSMonoItem
{
get => _vTotIbsMonoItem.Arredondar(2);
set => _vTotIbsMonoItem = value.Arredondar(2);
}
- // UB105
- [XmlElement(Order = 6)]
+ // UB105b
+ [XmlElement(Order = 10)]
public decimal vTotCBSMonoItem
{
get => _vTotCbsMonoItem.Arredondar(2);
diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/gIBSMonoAdRem.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/gIBSMonoAdRem.cs
new file mode 100644
index 00000000..bed3db84
--- /dev/null
+++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/gIBSMonoAdRem.cs
@@ -0,0 +1,26 @@
+using System.Xml.Serialization;
+
+namespace NFe.Classes.Informacoes.Detalhe.Tributacao
+{
+ ///
+ /// UB85a - Grupo de informações da Tributação Monofásica Ad Rem do IBS (NT 2025.002 v1.50)
+ ///
+ public class gIBSMonoAdRem
+ {
+ // UB86
+ [XmlElement(Order = 1)]
+ public gMonoPadraoIBSAdRem gMonoPadrao { get; set; }
+
+ // UB87
+ [XmlElement(Order = 2)]
+ public gMonoRetenIBSAdRem gMonoReten { get; set; }
+
+ // UB88
+ [XmlElement(Order = 3)]
+ public gMonoRetIBS gMonoRet { get; set; }
+
+ // UB89
+ [XmlElement(Order = 4)]
+ public gpBioDiferencaIBS gpBioDiferenca { get; set; }
+ }
+}
diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/gIBSMonoAdValorem.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/gIBSMonoAdValorem.cs
new file mode 100644
index 00000000..626e3825
--- /dev/null
+++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/gIBSMonoAdValorem.cs
@@ -0,0 +1,26 @@
+using System.Xml.Serialization;
+
+namespace NFe.Classes.Informacoes.Detalhe.Tributacao
+{
+ ///
+ /// UB90 - Grupo de informações da Tributação Monofásica Ad Valorem do IBS (NT 2025.002 v1.50)
+ ///
+ public class gIBSMonoAdValorem
+ {
+ // UB91
+ [XmlElement(Order = 1)]
+ public gMonoPadraoIBSAdValorem gMonoPadrao { get; set; }
+
+ // UB92
+ [XmlElement(Order = 2)]
+ public gMonoRetenIBSAdValorem gMonoReten { get; set; }
+
+ // UB93
+ [XmlElement(Order = 3)]
+ public gMonoRetIBS gMonoRet { get; set; }
+
+ // UB94
+ [XmlElement(Order = 4)]
+ public gpBioDiferencaIBS gpBioDiferenca { get; set; }
+ }
+}
diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoPadraoCBSAdRem.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoPadraoCBSAdRem.cs
new file mode 100644
index 00000000..53f429d2
--- /dev/null
+++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoPadraoCBSAdRem.cs
@@ -0,0 +1,38 @@
+using System.Xml.Serialization;
+
+namespace NFe.Classes.Informacoes.Detalhe.Tributacao
+{
+ ///
+ /// UB96 - Grupo de informações da Tributação Monofásica Padrão da CBS Ad Rem (tag gMonoPadrao)
+ ///
+ public class gMonoPadraoCBSAdRem
+ {
+ private decimal _qBcMono;
+ private decimal _adRemCbs;
+ private decimal _vCbsMono;
+
+ // UB96a
+ [XmlElement(Order = 1)]
+ public decimal qBCMono
+ {
+ get => _qBcMono.Arredondar(4);
+ set => _qBcMono = value.Arredondar(4);
+ }
+
+ // UB96b
+ [XmlElement(Order = 2)]
+ public decimal adRemCBS
+ {
+ get => _adRemCbs.Arredondar(4);
+ set => _adRemCbs = value.Arredondar(4);
+ }
+
+ // UB96c
+ [XmlElement(Order = 3)]
+ public decimal vCBSMono
+ {
+ get => _vCbsMono.Arredondar(2);
+ set => _vCbsMono = value.Arredondar(2);
+ }
+ }
+}
diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoPadraoCBSAdValorem.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoPadraoCBSAdValorem.cs
new file mode 100644
index 00000000..1461e329
--- /dev/null
+++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoPadraoCBSAdValorem.cs
@@ -0,0 +1,38 @@
+using System.Xml.Serialization;
+
+namespace NFe.Classes.Informacoes.Detalhe.Tributacao
+{
+ ///
+ /// UB101 - Grupo de informações da Tributação Monofásica Padrão da CBS Ad Valorem (tag gMonoPadrao)
+ ///
+ public class gMonoPadraoCBSAdValorem
+ {
+ private decimal _vBcMono;
+ private decimal _pAliqMonoCbs;
+ private decimal _vCbsMono;
+
+ // UB101a
+ [XmlElement(Order = 1)]
+ public decimal vBCMono
+ {
+ get => _vBcMono.Arredondar(2);
+ set => _vBcMono = value.Arredondar(2);
+ }
+
+ // UB101b
+ [XmlElement(Order = 2)]
+ public decimal pAliqMonoCBS
+ {
+ get => _pAliqMonoCbs.Arredondar(4);
+ set => _pAliqMonoCbs = value.Arredondar(4);
+ }
+
+ // UB101c
+ [XmlElement(Order = 3)]
+ public decimal vCBSMono
+ {
+ get => _vCbsMono.Arredondar(2);
+ set => _vCbsMono = value.Arredondar(2);
+ }
+ }
+}
diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoPadraoIBSAdRem.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoPadraoIBSAdRem.cs
new file mode 100644
index 00000000..af9a0066
--- /dev/null
+++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoPadraoIBSAdRem.cs
@@ -0,0 +1,38 @@
+using System.Xml.Serialization;
+
+namespace NFe.Classes.Informacoes.Detalhe.Tributacao
+{
+ ///
+ /// UB86 - Grupo de informações da Tributação Monofásica Padrão do IBS Ad Rem (tag gMonoPadrao)
+ ///
+ public class gMonoPadraoIBSAdRem
+ {
+ private decimal _qBcMono;
+ private decimal _adRemIbs;
+ private decimal _vIbsMono;
+
+ // UB86a
+ [XmlElement(Order = 1)]
+ public decimal qBCMono
+ {
+ get => _qBcMono.Arredondar(4);
+ set => _qBcMono = value.Arredondar(4);
+ }
+
+ // UB86b
+ [XmlElement(Order = 2)]
+ public decimal adRemIBS
+ {
+ get => _adRemIbs.Arredondar(4);
+ set => _adRemIbs = value.Arredondar(4);
+ }
+
+ // UB86c
+ [XmlElement(Order = 3)]
+ public decimal vIBSMono
+ {
+ get => _vIbsMono.Arredondar(2);
+ set => _vIbsMono = value.Arredondar(2);
+ }
+ }
+}
diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoPadraoIBSAdValorem.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoPadraoIBSAdValorem.cs
new file mode 100644
index 00000000..b9118025
--- /dev/null
+++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoPadraoIBSAdValorem.cs
@@ -0,0 +1,67 @@
+using System.Xml.Serialization;
+
+namespace NFe.Classes.Informacoes.Detalhe.Tributacao
+{
+ ///
+ /// UB91 - Grupo de informações da Tributação Monofásica Padrão do IBS Ad Valorem (tag gMonoPadrao)
+ ///
+ public class gMonoPadraoIBSAdValorem
+ {
+ private decimal _vBcMono;
+ private decimal _pAliqMonoUf;
+ private decimal _vIbsMonoUf;
+ private decimal _pAliqMonoMun;
+ private decimal _vIbsMonoMun;
+ private decimal _vIbsMono;
+
+ // UB91a
+ [XmlElement(Order = 1)]
+ public decimal vBCMono
+ {
+ get => _vBcMono.Arredondar(2);
+ set => _vBcMono = value.Arredondar(2);
+ }
+
+ // UB91b
+ [XmlElement(Order = 2)]
+ public decimal pAliqMonoUF
+ {
+ get => _pAliqMonoUf.Arredondar(4);
+ set => _pAliqMonoUf = value.Arredondar(4);
+ }
+
+ // UB91c
+ [XmlElement(Order = 3)]
+ public decimal vIBSMonoUF
+ {
+ get => _vIbsMonoUf.Arredondar(2);
+ set => _vIbsMonoUf = value.Arredondar(2);
+ }
+
+ // UB91d
+ [XmlElement(Order = 4)]
+ public decimal pAliqMonoMun
+ {
+ get => _pAliqMonoMun.Arredondar(4);
+ set => _pAliqMonoMun = value.Arredondar(4);
+ }
+
+ // UB91e
+ [XmlElement(Order = 5)]
+ public decimal vIBSMonoMun
+ {
+ get => _vIbsMonoMun.Arredondar(2);
+ set => _vIbsMonoMun = value.Arredondar(2);
+ }
+
+ ///
+ /// UB91f - Valor do IBS monofásico (vIBSMonoUF + vIBSMonoMun)
+ ///
+ [XmlElement(Order = 6)]
+ public decimal vIBSMono
+ {
+ get => _vIbsMono.Arredondar(2);
+ set => _vIbsMono = value.Arredondar(2);
+ }
+ }
+}
diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoRetCBS.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoRetCBS.cs
new file mode 100644
index 00000000..62ced6ca
--- /dev/null
+++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoRetCBS.cs
@@ -0,0 +1,20 @@
+using System.Xml.Serialization;
+
+namespace NFe.Classes.Informacoes.Detalhe.Tributacao
+{
+ ///
+ /// UB98/UB103 - Grupo de informações da Tributação Monofásica Retida Anteriormente da CBS (tag gMonoRet)
+ ///
+ public class gMonoRetCBS
+ {
+ private decimal _vCbsMonoRet;
+
+ // UB98a/UB103a
+ [XmlElement(Order = 1)]
+ public decimal vCBSMonoRet
+ {
+ get => _vCbsMonoRet.Arredondar(2);
+ set => _vCbsMonoRet = value.Arredondar(2);
+ }
+ }
+}
diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoRetIBS.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoRetIBS.cs
new file mode 100644
index 00000000..3d5649b0
--- /dev/null
+++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoRetIBS.cs
@@ -0,0 +1,20 @@
+using System.Xml.Serialization;
+
+namespace NFe.Classes.Informacoes.Detalhe.Tributacao
+{
+ ///
+ /// UB88/UB93 - Grupo de informações da Tributação Monofásica Retida Anteriormente do IBS (tag gMonoRet)
+ ///
+ public class gMonoRetIBS
+ {
+ private decimal _vIbsMonoRet;
+
+ // UB88a/UB93a
+ [XmlElement(Order = 1)]
+ public decimal vIBSMonoRet
+ {
+ get => _vIbsMonoRet.Arredondar(2);
+ set => _vIbsMonoRet = value.Arredondar(2);
+ }
+ }
+}
diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoRetenCBSAdRem.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoRetenCBSAdRem.cs
new file mode 100644
index 00000000..42123be4
--- /dev/null
+++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoRetenCBSAdRem.cs
@@ -0,0 +1,38 @@
+using System.Xml.Serialization;
+
+namespace NFe.Classes.Informacoes.Detalhe.Tributacao
+{
+ ///
+ /// UB97 - Grupo de informações da Tributação Monofásica Sujeita à Retenção da CBS Ad Rem (tag gMonoReten)
+ ///
+ public class gMonoRetenCBSAdRem
+ {
+ private decimal _qBcMonoReten;
+ private decimal _adRemCbsReten;
+ private decimal _vCbsMonoReten;
+
+ // UB97a
+ [XmlElement(Order = 1)]
+ public decimal qBCMonoReten
+ {
+ get => _qBcMonoReten.Arredondar(4);
+ set => _qBcMonoReten = value.Arredondar(4);
+ }
+
+ // UB97b
+ [XmlElement(Order = 2)]
+ public decimal adRemCBSReten
+ {
+ get => _adRemCbsReten.Arredondar(4);
+ set => _adRemCbsReten = value.Arredondar(4);
+ }
+
+ // UB97c
+ [XmlElement(Order = 3)]
+ public decimal vCBSMonoReten
+ {
+ get => _vCbsMonoReten.Arredondar(2);
+ set => _vCbsMonoReten = value.Arredondar(2);
+ }
+ }
+}
diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoRetenCBSAdValorem.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoRetenCBSAdValorem.cs
new file mode 100644
index 00000000..adc1a8da
--- /dev/null
+++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoRetenCBSAdValorem.cs
@@ -0,0 +1,38 @@
+using System.Xml.Serialization;
+
+namespace NFe.Classes.Informacoes.Detalhe.Tributacao
+{
+ ///
+ /// UB102 - Grupo de informações da Tributação Monofásica Sujeita à Retenção da CBS Ad Valorem (tag gMonoReten)
+ ///
+ public class gMonoRetenCBSAdValorem
+ {
+ private decimal _vBcMonoReten;
+ private decimal _pAliqMonoReten;
+ private decimal _vCbsMonoReten;
+
+ // UB102a
+ [XmlElement(Order = 1)]
+ public decimal vBCMonoReten
+ {
+ get => _vBcMonoReten.Arredondar(2);
+ set => _vBcMonoReten = value.Arredondar(2);
+ }
+
+ // UB102b
+ [XmlElement(Order = 2)]
+ public decimal pAliqMonoReten
+ {
+ get => _pAliqMonoReten.Arredondar(4);
+ set => _pAliqMonoReten = value.Arredondar(4);
+ }
+
+ // UB102c
+ [XmlElement(Order = 3)]
+ public decimal vCBSMonoReten
+ {
+ get => _vCbsMonoReten.Arredondar(2);
+ set => _vCbsMonoReten = value.Arredondar(2);
+ }
+ }
+}
diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoRetenIBSAdRem.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoRetenIBSAdRem.cs
new file mode 100644
index 00000000..e8094535
--- /dev/null
+++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoRetenIBSAdRem.cs
@@ -0,0 +1,38 @@
+using System.Xml.Serialization;
+
+namespace NFe.Classes.Informacoes.Detalhe.Tributacao
+{
+ ///
+ /// UB87 - Grupo de informações da Tributação Monofásica Sujeita à Retenção do IBS Ad Rem (tag gMonoReten)
+ ///
+ public class gMonoRetenIBSAdRem
+ {
+ private decimal _qBcMonoReten;
+ private decimal _adRemIbsReten;
+ private decimal _vIbsMonoReten;
+
+ // UB87a
+ [XmlElement(Order = 1)]
+ public decimal qBCMonoReten
+ {
+ get => _qBcMonoReten.Arredondar(4);
+ set => _qBcMonoReten = value.Arredondar(4);
+ }
+
+ // UB87b
+ [XmlElement(Order = 2)]
+ public decimal adRemIBSReten
+ {
+ get => _adRemIbsReten.Arredondar(4);
+ set => _adRemIbsReten = value.Arredondar(4);
+ }
+
+ // UB87c
+ [XmlElement(Order = 3)]
+ public decimal vIBSMonoReten
+ {
+ get => _vIbsMonoReten.Arredondar(2);
+ set => _vIbsMonoReten = value.Arredondar(2);
+ }
+ }
+}
diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoRetenIBSAdValorem.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoRetenIBSAdValorem.cs
new file mode 100644
index 00000000..c4cc3bcb
--- /dev/null
+++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/gMonoRetenIBSAdValorem.cs
@@ -0,0 +1,38 @@
+using System.Xml.Serialization;
+
+namespace NFe.Classes.Informacoes.Detalhe.Tributacao
+{
+ ///
+ /// UB92 - Grupo de informações da Tributação Monofásica Sujeita à Retenção do IBS Ad Valorem (tag gMonoReten)
+ ///
+ public class gMonoRetenIBSAdValorem
+ {
+ private decimal _vBcMonoReten;
+ private decimal _pAliqMonoReten;
+ private decimal _vIbsMonoReten;
+
+ // UB92a
+ [XmlElement(Order = 1)]
+ public decimal vBCMonoReten
+ {
+ get => _vBcMonoReten.Arredondar(2);
+ set => _vBcMonoReten = value.Arredondar(2);
+ }
+
+ // UB92b
+ [XmlElement(Order = 2)]
+ public decimal pAliqMonoReten
+ {
+ get => _pAliqMonoReten.Arredondar(4);
+ set => _pAliqMonoReten = value.Arredondar(4);
+ }
+
+ // UB92c
+ [XmlElement(Order = 3)]
+ public decimal vIBSMonoReten
+ {
+ get => _vIbsMonoReten.Arredondar(2);
+ set => _vIbsMonoReten = value.Arredondar(2);
+ }
+ }
+}
diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/gpBioDiferencaCBS.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/gpBioDiferencaCBS.cs
new file mode 100644
index 00000000..cc6c8ddf
--- /dev/null
+++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/gpBioDiferencaCBS.cs
@@ -0,0 +1,29 @@
+using System.Xml.Serialization;
+
+namespace NFe.Classes.Informacoes.Detalhe.Tributacao
+{
+ ///
+ /// UB99/UB104 - Grupo de informações sobre mistura de EAC com gasolina A em percentual inferior ou superior ao obrigatório, para a CBS (tag gpBioDiferenca)
+ ///
+ public class gpBioDiferencaCBS
+ {
+ private decimal _qBcBioComb;
+ private decimal _vCbsDiferenca;
+
+ // UB99a/UB104a
+ [XmlElement(Order = 1)]
+ public decimal qBCBioComb
+ {
+ get => _qBcBioComb.Arredondar(4);
+ set => _qBcBioComb = value.Arredondar(4);
+ }
+
+ // UB99b/UB104b
+ [XmlElement(Order = 2)]
+ public decimal vCBSDiferenca
+ {
+ get => _vCbsDiferenca.Arredondar(2);
+ set => _vCbsDiferenca = value.Arredondar(2);
+ }
+ }
+}
diff --git a/NFe.Classes/Informacoes/Detalhe/Tributacao/gpBioDiferencaIBS.cs b/NFe.Classes/Informacoes/Detalhe/Tributacao/gpBioDiferencaIBS.cs
new file mode 100644
index 00000000..75bfe98f
--- /dev/null
+++ b/NFe.Classes/Informacoes/Detalhe/Tributacao/gpBioDiferencaIBS.cs
@@ -0,0 +1,29 @@
+using System.Xml.Serialization;
+
+namespace NFe.Classes.Informacoes.Detalhe.Tributacao
+{
+ ///
+ /// UB89/UB94 - Grupo de informações sobre mistura de EAC com gasolina A em percentual inferior ou superior ao obrigatório, para o IBS (tag gpBioDiferenca)
+ ///
+ public class gpBioDiferencaIBS
+ {
+ private decimal _qBcBioComb;
+ private decimal _vIbsDiferenca;
+
+ // UB89a/UB94a
+ [XmlElement(Order = 1)]
+ public decimal qBCBioComb
+ {
+ get => _qBcBioComb.Arredondar(4);
+ set => _qBcBioComb = value.Arredondar(4);
+ }
+
+ // UB89b/UB94b
+ [XmlElement(Order = 2)]
+ public decimal vIBSDiferenca
+ {
+ get => _vIbsDiferenca.Arredondar(2);
+ set => _vIbsDiferenca = value.Arredondar(2);
+ }
+ }
+}
diff --git a/NFe.Utils.Testes/IBSCBSMonoTestes.cs b/NFe.Utils.Testes/IBSCBSMonoTestes.cs
new file mode 100644
index 00000000..9a15cb2d
--- /dev/null
+++ b/NFe.Utils.Testes/IBSCBSMonoTestes.cs
@@ -0,0 +1,202 @@
+using System.Collections.Generic;
+using System.IO;
+using System.Xml;
+using System.Xml.Schema;
+using System.Xml.Serialization;
+using NFe.Classes.Informacoes.Detalhe.Tributacao;
+using Xunit;
+
+namespace NFe.Utils.Testes
+{
+ ///
+ /// Testes do grupo gIBSCBSMono no leiaute da NT 2025.002 v1.50 (PL_010f v1.04)
+ ///
+ public class IBSCBSMonoTestes
+ {
+ private const string NamespaceNfe = "http://www.portalfiscal.inf.br/nfe";
+
+ //o DFeTiposBasicos não tem targetNamespace; o envelope o inclui no namespace da NF-e e declara o IBSCBS como no leiauteNFe
+ private const string SchemaEnvelope =
+ "" +
+ "" +
+ "" +
+ "";
+
+ private static string SerializarComNamespaceNfe(IBSCBS ibscbs)
+ {
+ var serializador = new XmlSerializer(typeof(IBSCBS), NamespaceNfe);
+ using (var sw = new StringWriter())
+ {
+ serializador.Serialize(sw, ibscbs);
+ return sw.ToString();
+ }
+ }
+
+ private static List ValidarContraPl010f(string xml)
+ {
+ var erros = new List();
+ var schemas = new XmlSchemaSet { XmlResolver = new XmlUrlResolver() };
+ using (var reader = XmlReader.Create(new StringReader(SchemaEnvelope), new XmlReaderSettings(), Path.Combine(Directory.GetCurrentDirectory(), "Schemas", "envelope.xsd")))
+ schemas.Add(NamespaceNfe, reader);
+
+ var cfg = new XmlReaderSettings { ValidationType = ValidationType.Schema, Schemas = schemas };
+ cfg.ValidationEventHandler += (sender, e) => erros.Add(e.Message);
+
+ using (var reader = XmlReader.Create(new StringReader(xml), cfg))
+ while (reader.Read()) { }
+
+ return erros;
+ }
+
+ [Fact]
+ public void Serializar_RevendaCobradaAnteriormente620006_GeraXmlValidoNoPl010f()
+ {
+ // Arrange
+ var ibscbs = new IBSCBS
+ {
+ CST = CSTIBSCBS.cst620,
+ cClassTrib = "620006",
+ gIBSCBSMono = new gIBSCBSMono
+ {
+ gIBSMonoAdValorem = new gIBSMonoAdValorem { gMonoRet = new gMonoRetIBS { vIBSMonoRet = 0.06m } },
+ gCBSMonoAdValorem = new gCBSMonoAdValorem { gMonoRet = new gMonoRetCBS { vCBSMonoRet = 0.54m } },
+ vTotIBSMonoItem = 0m,
+ vTotCBSMonoItem = 0m
+ }
+ };
+
+ // Act
+ var xml = SerializarComNamespaceNfe(ibscbs);
+
+ // Assert
+ Assert.Empty(ValidarContraPl010f(xml));
+ Assert.Contains("0.06", xml.Replace("\r", "").Replace("\n", "").Replace(" ", ""));
+ Assert.DoesNotContain("gMonoDif", xml);
+ }
+
+ [Fact]
+ public void Serializar_MonofasiaAdRemComRetencaoEDiferencaDeBiocombustivel_GeraXmlValidoNoPl010f()
+ {
+ // Arrange
+ var ibscbs = new IBSCBS
+ {
+ CST = CSTIBSCBS.cst620,
+ cClassTrib = "620002",
+ gIBSCBSMono = new gIBSCBSMono
+ {
+ gIBSMonoAdRem = new gIBSMonoAdRem
+ {
+ gMonoPadrao = new gMonoPadraoIBSAdRem { qBCMono = 1000m, adRemIBS = 0.0123m, vIBSMono = 12.30m },
+ gMonoReten = new gMonoRetenIBSAdRem { qBCMonoReten = 500m, adRemIBSReten = 0.0123m, vIBSMonoReten = 6.15m },
+ gpBioDiferenca = new gpBioDiferencaIBS { qBCBioComb = 10.5m, vIBSDiferenca = 0.13m }
+ },
+ gCBSMonoAdRem = new gCBSMonoAdRem
+ {
+ gMonoPadrao = new gMonoPadraoCBSAdRem { qBCMono = 1000m, adRemCBS = 0.1107m, vCBSMono = 110.70m },
+ gMonoReten = new gMonoRetenCBSAdRem { qBCMonoReten = 500m, adRemCBSReten = 0.1107m, vCBSMonoReten = 55.35m }
+ },
+ vTotIBSMonoItem = 18.45m,
+ vTotCBSMonoItem = 166.05m
+ }
+ };
+
+ // Act
+ var xml = SerializarComNamespaceNfe(ibscbs);
+
+ // Assert
+ Assert.Empty(ValidarContraPl010f(xml));
+ }
+
+ [Fact]
+ public void Serializar_MonofasiaAdValoremPadrao_GeraXmlValidoNoPl010f()
+ {
+ // Arrange
+ var ibscbs = new IBSCBS
+ {
+ CST = CSTIBSCBS.cst620,
+ cClassTrib = "620001",
+ gIBSCBSMono = new gIBSCBSMono
+ {
+ gIBSMonoAdValorem = new gIBSMonoAdValorem
+ {
+ gMonoPadrao = new gMonoPadraoIBSAdValorem { vBCMono = 1000m, pAliqMonoUF = 0.1m, vIBSMonoUF = 1m, pAliqMonoMun = 0m, vIBSMonoMun = 0m, vIBSMono = 1m }
+ },
+ gCBSMonoAdValorem = new gCBSMonoAdValorem
+ {
+ gMonoPadrao = new gMonoPadraoCBSAdValorem { vBCMono = 1000m, pAliqMonoCBS = 0.9m, vCBSMono = 9m }
+ },
+ vTotIBSMonoItem = 1m,
+ vTotCBSMonoItem = 9m
+ }
+ };
+
+ // Act
+ var xml = SerializarComNamespaceNfe(ibscbs);
+
+ // Assert
+ Assert.Empty(ValidarContraPl010f(xml));
+ }
+
+ [Fact]
+ public void Serializar_LeiauteAnteriorAV150_EhRejeitadoPeloPl010f()
+ {
+ // Arrange
+ var ibscbs = new IBSCBS
+ {
+ CST = CSTIBSCBS.cst620,
+ cClassTrib = "620006",
+ gIBSCBSMono = new gIBSCBSMono
+ {
+ gMonoRet = new gMonoRet { qBCMonoRet = 100m, adRemIBSRet = 0.0006m, vIBSMonoRet = 0.06m, adRemCBSRet = 0.0054m, vCBSMonoRet = 0.54m },
+ vTotIBSMonoItem = 0m,
+ vTotCBSMonoItem = 0m
+ }
+ };
+
+ // Act
+ var xml = SerializarComNamespaceNfe(ibscbs);
+
+ // Assert
+ Assert.NotEmpty(ValidarContraPl010f(xml));
+ }
+
+ [Fact]
+ public void Deserializar_XmlAutorizadoNoLeiauteAnterior_PreencheOsGruposAntigos()
+ {
+ // Arrange
+ const string xml =
+ "620620006" +
+ "100.00000.00060.060.00540.54" +
+ "0.000.00" +
+ "";
+
+ // Act
+ var ibscbs = DFe.Utils.FuncoesXml.XmlStringParaClasse(xml);
+
+ // Assert
+ Assert.Equal(0.06m, ibscbs.gIBSCBSMono.gMonoRet.vIBSMonoRet);
+ Assert.Equal(0.54m, ibscbs.gIBSCBSMono.gMonoRet.vCBSMonoRet);
+ Assert.Null(ibscbs.gIBSCBSMono.gIBSMonoAdValorem);
+ }
+
+ [Fact]
+ public void Deserializar_XmlNoLeiauteV150_PreencheOsGruposNovos()
+ {
+ // Arrange
+ const string xml =
+ "620620006" +
+ "0.06" +
+ "0.54" +
+ "0.000.00" +
+ "";
+
+ // Act
+ var ibscbs = DFe.Utils.FuncoesXml.XmlStringParaClasse(xml);
+
+ // Assert
+ Assert.Equal(0.06m, ibscbs.gIBSCBSMono.gIBSMonoAdValorem.gMonoRet.vIBSMonoRet);
+ Assert.Equal(0.54m, ibscbs.gIBSCBSMono.gCBSMonoAdRem.gMonoRet.vCBSMonoRet);
+ Assert.Null(ibscbs.gIBSCBSMono.gMonoRet);
+ }
+ }
+}
diff --git a/NFe.Utils.Testes/NFe.Utils.Testes.csproj b/NFe.Utils.Testes/NFe.Utils.Testes.csproj
index 628c6016..ca4e464a 100644
--- a/NFe.Utils.Testes/NFe.Utils.Testes.csproj
+++ b/NFe.Utils.Testes/NFe.Utils.Testes.csproj
@@ -22,4 +22,8 @@
+
+
+
+