diff --git a/CTe.AppTeste/CTe.AppTeste.csproj b/CTe.AppTeste/CTe.AppTeste.csproj index e7087b778..a1c168627 100644 --- a/CTe.AppTeste/CTe.AppTeste.csproj +++ b/CTe.AppTeste/CTe.AppTeste.csproj @@ -302,6 +302,9 @@ Designer Always + + Designer + Designer Always @@ -326,6 +329,9 @@ Designer Always + + Designer + Designer Always @@ -382,6 +388,9 @@ Designer Always + + Designer + Designer Always @@ -590,6 +599,9 @@ Designer Always + + Designer + Designer Always @@ -690,6 +702,9 @@ Designer Always + + Designer + Designer Always diff --git a/CTe.AppTeste/CTeTesteModel.cs b/CTe.AppTeste/CTeTesteModel.cs index 0e5f2fef4..3add5291d 100644 --- a/CTe.AppTeste/CTeTesteModel.cs +++ b/CTe.AppTeste/CTeTesteModel.cs @@ -84,6 +84,7 @@ using infTribFed = CTe.Classes.Informacoes.Impostos.infTribFed; using OpenFileDialog = Microsoft.Win32.OpenFileDialog; using rodoOS = CTe.Classes.Informacoes.infCTeNormal.infModals.rodoOS; +using CTe.Classes.Informacoes.Impostos.IBSCBS; namespace CTe.AppTeste { @@ -602,6 +603,7 @@ private static void CarregarConfiguracoes(Configuracao config) var configuracaoCertificado = new ConfiguracaoCertificado { Arquivo = config.CertificadoDigital.CaminhoArquivo, + TipoCertificado = TipoCertificado.A1Repositorio, ManterDadosEmCache = config.CertificadoDigital.ManterEmCache, Serial = config.CertificadoDigital.NumeroDeSerie }; @@ -1031,6 +1033,32 @@ public void CriarEnviarCTe2e3() icmsSimplesNacional.CST = CST.ICMS90; } + cteEletronico.infCte.imp.IBSCBS = new IBSCBS() + { + cClassTrib = "000001", + CST = CSTIBSCBS.cst000, + gIBSCBS = new gIBSCBS() + { + vBC = 0m, + vIBS = 0m, + gIBSUF = new gIBSUF() + { + pIBSUF = 0.1m, + vIBSUF = 0m, + }, + gIBSMun = new gIBSMun() + { + pIBSMun = 0, + vIBSMun = 0, + }, + gCBS = new gCBS() + { + pCBS = 0.09m, + vCBS = 0 + }, + } + }; + #endregion #region infCTeNorm @@ -1094,9 +1122,7 @@ public void CriarEnviarCTe2e3() cteEletronico.infCte.infCTeNorm.infModal.ContainerModal = rodoviario; #endregion - - - + var servicoRecepcao = new ServicoCTeRecepcao(); diff --git a/CTe.AppTeste/schemas/DFeTiposBasicos_v1.00.xsd b/CTe.AppTeste/schemas/DFeTiposBasicos_v1.00.xsd new file mode 100644 index 000000000..ea6eab8e8 --- /dev/null +++ b/CTe.AppTeste/schemas/DFeTiposBasicos_v1.00.xsd @@ -0,0 +1,1293 @@ + + + + + + Tipo string genérico + + + + + + + + + Código Situação Tributária do IBS/CBS + + + + + + + + + Código de Classificação Tributária do IBS e da CBS + + + + + + + + + Código de Classificação do Crédito Presumido do IBS e da CBS, conforme tabela cCredPres + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 11 de corpo e 4 decimais + + + + + + + + + Tipo Decimal com 11 inteiros, podendo ter 4 decimais (utilizado em tags opcionais) + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais + + + + + + + + + Tipo Decimal com até 3 dígitos inteiros, podendo ter de 2 até 4 decimais + + + + + + + + + Tipo da Operação com Ente Governamental + + + + + + + + + + Tipo de Ente Governamental + + + + + + + + + + + + Tipo de classificação do Crédito Presumido IBS ZFM + + + + + + + + + + + + Tipo Indicador de Doação + + + + + + + + Grupo de informações da Tributação da NFCom + + + + + Código Situação Tributária do IBS/CBS + + + + + + Indica se a operação é de doação + + + + + + Informado conforme indicador no cClassTrib + + + + + + + Grupo de informações da Tributação da NF3e + + + + + Código Situação Tributária do IBS/CBS + + + + + + Indica se a operação é de doação + + + + + + Informado conforme indicador no cClassTrib + + + + + + + Grupo de informações da Tributação da NFAg + + + + + Código Situação Tributária do IBS/CBS + + + + + + + + Informado conforme indicador no cClassTrib + + + + + + + Grupo de informações da Tributação do CTe + + + + + Código Situação Tributária do IBS/CBS + + + + + + + + Informado conforme indicador no cClassTrib + + + + + + + Grupo de informações da Tributação do BPe + + + + + Código Situação Tributária do IBS/CBS + + + + + + + + Informado conforme indicador no cClassTrib + + + + + + + Grupo de informações da Tributação da NFCe + + + + + Código Situação Tributária do IBS/CBS + + + + + + Indica se a operação é de doação + + + + + + + + + + + Grupo de informações da Tributação da NFe + + + + + Código Situação Tributária do IBS/CBS + + + + + + Indica se a operação é de doação + + + + + + + Informar essa opção da Choice para Monofasia (CST 620) + + + + + Informar essa opção da Choice para o CST 800 + + + + + Informar essa opção da Choice para o CST 811 + + + + + + Informado conforme indicador no cClassTrib + + + + + + Crédito Presumido da Operação. Informado conforme indicador no cClassTrib. + + + + + Classificação de acordo com o art. 450, § 1º, da LC 214/25 para o cálculo do crédito presumido na ZFM. Informado conforme indicador no cClassTrib. + + + + + + + + Grupo de informações da Tributação da NFGas + + + + + Código Situação Tributária do IBS/CBS + + + + + + + + + Informar essa opção da Choice para Monofasia + + + + + + Informado conforme indicador no cClassTrib + + + + + + + Grupo de informações do Imposto Seletivo + + + + + Código Situação Tributária do Imposto Seletivo + + + + + + + Valor do BC + + + + + Alíquota do Imposto Seletivo (percentual) + + + + + Alíquota do Imposto Seletivo (por valor) + + + + + + Unidade de medida apropriada especificada em Lei Ordinaria para fins de apuração do Imposto Seletivo + + + + + + + + + + + Quantidade com abse no campo uTrib informado + + + + + + Valor do Imposto Seletivo calculado + + + + + + + + Grupo de informações de totais do Imposto Seletivo + + + + + Valor Total do Imposto Seletivo + + + + + + + Grupo de informações de totais da CBS/IBS + + + + + Total Base de Calculo + + + + + Totalização do IBS + + + + + + Totalização do IBS de competência da UF + + + + + + Total do Diferimento + + + + + Total de devoluções de tributos + + + + + Valor total do IBS Estadual + + + + + + + + Totalização do IBS de competência Municipal + + + + + + Total do Diferimento + + + + + Total de devoluções de tributos + + + + + Valor total do IBS Municipal + + + + + + + + Valor total do IBS + + + + + + + + Totalização da CBS + + + + + + Total do Diferimento + + + + + Total de devoluções de tributos + + + + + Valor total da CBS + + + + + + + + Totalização do estorno de crédito + + + + + + Valor total do IBS estornado + + + + + Valor total da CBS estornada + + + + + + + + + + Grupo de informações de totais da CBS/IBS com monofasia + + + + + Total Base de Calculo + + + + + Totalização do IBS + + + + + + Totalização do IBS de competência da UF + + + + + + Total do Diferimento + + + + + Total de devoluções de tributos + + + + + Valor total do IBS Estadual + + + + + + + + Totalização do IBS de competência Municipal + + + + + + Total do Diferimento + + + + + Total de devoluções de tributos + + + + + Valor total do IBS Municipal + + + + + + + + Valor total do IBS + + + + + Total do Crédito Presumido + + + + + Total do Crédito Presumido Condição Suspensiva + + + + + + + + Totalização da CBS + + + + + + Total do Diferimento + + + + + Total de devoluções de tributos + + + + + Valor total da CBS + + + + + Total do Crédito Presumido + + + + + Total do Crédito Presumido Condição Suspensiva + + + + + + + + Totais da Monofasia + Só deverá ser utilizado para DFe modelos 55 e 65 + + + + + + Valor total do IBS monofásico + + + + + Valor total da CBS monofásica + + + + + Valor total do IBS monofásico sujeito a retenção + + + + + Valor total da CBS monofásica sujeita a retenção + + + + + Valor do IBS monofásico retido anteriormente + + + + + Valor da CBS monofásica retida anteriormente + + + + + + + + Totalização do estorno de crédito + + + + + + Valor total do IBS estornado + + + + + Valor total da CBS estornada + + + + + + + + + + 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 + + + + IBS / CBS + + + + Valor do BC + + + + + + Grupo de informações do IBS na UF + + + + + + Aliquota do IBS de competência das UF (em percentual) + + + + + Grupo de campos do Diferimento + + + + + Grupo de Informações da devolução de tributos + + + + + Grupo de campos da redução de aliquota + + + + + Valor do IBS de competência das UF + + + + + + + + Grupo de Informações do IBS no Município + + + + + + Aliquota do IBS Municipal (em percentual) + + + + + Grupo de campos do Diferimento + + + + + Grupo de Informações da devolução de tributos + + + + + Grupo de campos da redução de aliquota + + + + + Valor do IBS Municipal + + + + + + + + Valor do IBS + + + + + + Grupo de Tributação da CBS + + + + + + Aliquota da CBS (em percentual) + + + + + Grupo de campos do Diferimento + + + + + Grupo de Informações da devolução de tributos + + + + + Grupo de campos da redução de aliquota + + + + + Valor da CBS + + + + + + + + Grupo de informações da Tributação Regular. Informar como seria a tributação caso não cumprida a condição resolutória/suspensiva. Exemplo 1: Art. 442, §4. Operações com ZFM e ALC. Exemplo 2: Operações com suspensão do tributo. + + + + + Grupo de informações da composição do valor do IBS e da CBS em compras governamental + + + + + + + Tipo Redução Base de Cálculo + + + + + Percentual de redução de aliquota do cClassTrib + + + + + Aliquota Efetiva que será aplicada a Base de Calculo (em percentual) + + + + + + + Tipo Crédito Presumido + + + + + Percentual do Crédito Presumido + + + + + + Valor do Crédito Presumido + + + + + Valor do Crédito Presumido Condição Suspensiva, preencher apenas para cCredPres que possui indicação de Condição Suspensiva + + + + + + + + Tipo Diferimento + + + + + Percentual do diferimento + + + + + Valor do diferimento + + + + + + + Tipo Devolução Tributo + + + + + Valor do tributo devolvido. No fornecimento de energia elétrica, água, esgoto e +gás natural e em outras hipóteses definidas no regulamento + + + + + + + Tipo Tributação Regular + + + + + Código da Situação Tributária do IBS e CBS + Informar qual seria o CST caso não cumprida a condição resolutória/suspensiva + + + + + Informar qual seria o cClassTrib caso não cumprida a condição resolutória/suspensiva + + + + + Alíquota do IBS da UF + Informar como seria a Alíquota caso não cumprida a condição resolutória/suspensiva + + + + + Valor do IBS da UF + Informar como seria o valor do Tributo caso não cumprida a condição resolutória/suspensiva + + + + + Alíquota do IBS do Município + Informar como seria a Alíquota caso não cumprida a condição resolutória/suspensiva + + + + + Valor do IBS do Município + Informar como seria o valor do Tributo caso não cumprida a condição resolutória/suspensiva + + + + + Alíquota da CBS + Informar como seria a Alíquota caso não cumprida a condição resolutória/suspensiva + + + + + Valor da CBS + Informar como seria o valor do Tributo caso não cumprida a condição resolutória/suspensiva + + + + + + + Tipo Tributação Compra Governamental + + + + + + Valor que seria devido a UF, sem aplicação do Art. 473. da LC 214/2025 + + + + + + Valor que seria devido ao município, sem aplicação do Art. 473. da LC 214/2025 + + + + + + Valor que seria devido a CBS, sem aplicação do Art. 473. da LC 214/2025 + + + + + + + Tipo Compras Governamentais + Cada DFe que utilizar deverá utilizar esses tipo no grupo ide + + + + + Para administração pública direta e suas autarquias e fundações: +1=União +2=Estados +3=Distrito Federal +4=Municípios + + + + + Percentual de redução de aliquota em compra governamental + + + + + + + Tipo Compras Governamentais + Cada DFe que utilizar deverá utilizar esses tipo no grupo ide + + + + + Para administração pública direta e suas autarquias e fundações: +1=União +2=Estados +3=Distrito Federal +4=Municípios + + + + + Percentual de redução de aliquota em compra governamental + + + + + Tipo da operação com ente governamental: +1 - Fornecimento +2 - Recebimento do Pagamento + + + + + + + Tipo Transferência de Crédito + + + + + Valor do IBS a ser transferido + + + + + Valor da CBS a ser transferida + + + + + + + Tipo Estorno de Crédito + + + + + Valor do IBS a ser estornado + + + + + Valor da CBS a ser estornada + + + + + + + Ano e mês referência do período de apuração (AAAA-MM) + + + + + + + + Tipo Ajuste de Competência + + + + + Ano e mês referência do período de apuração (AAAA-MM) + + + + + Valor do IBS + + + + + Valor da CBS + + + + + + + Tipo Crédito Presumido da Operação + + + + + Valor da Base de Cálculo do Crédito Presumido da Operação + + + + + Código de Classificação do Crédito Presumido do IBS e da CBS + + + + + Grupo de Informações do Crédito Presumido referente ao IBS, quando aproveitado pelo emitente do documento. + + + + + Grupo de Informações do Crédito Presumido referente a CBS, quando aproveitado pelo emitente do documento. + + + + + + + Tipo Informações do crédito presumido de IBS para fornecimentos a partir da ZFM + + + + + Ano e mês referência do período de apuração (AAAA-MM) + + + + + Classificação de acordo com o art. 450, § 1º, da LC 214/25 para o cálculo do crédito presumido na ZFM + 0 - Sem crédito presumido; +1 - Bens de consumo final (55%); +2 - Bens de capital (75%); +3 - Bens intermediários (90,25%); +4 - Bens de informática e outros definidos em legislação (100%). +OBS: Percentuais definidos no art. 450, § 1º, da LC 214/25 para o cálculo do crédito presumido + + + + + + Valor do crédito presumido calculado sobre o saldo devedor apurado + + + + + \ No newline at end of file diff --git a/CTe.AppTeste/schemas/cteModalDutoviario_v4.00.xsd b/CTe.AppTeste/schemas/cteModalDutoviario_v4.00.xsd index bc9c8940a..bb75ffd76 100644 --- a/CTe.AppTeste/schemas/cteModalDutoviario_v4.00.xsd +++ b/CTe.AppTeste/schemas/cteModalDutoviario_v4.00.xsd @@ -24,6 +24,68 @@ Data de Fim da prestação do serviço + + + Classificação do Dutoviário + Informar: 1 - Gasoduto 2 - Mineroduto 3 - Oleoduto + + + + + + + + + + + + Tipo de contratação do serviço de transporte (apenas para gasoduto) + Informar: +0 - Ponta a ponto +1 - Capacidade de Entrada +2 - Capacidade de Saida + + + + + + + + + + + + Código do Ponto de Entrada + + + + + + + + + + + Código do Ponto de Saída + + + + + + + + + + + Número do Contrato de Capacidade + + + + + + + + diff --git a/CTe.AppTeste/schemas/cteSimp_v4.00.xsd b/CTe.AppTeste/schemas/cteSimp_v4.00.xsd new file mode 100644 index 000000000..a6b23e03f --- /dev/null +++ b/CTe.AppTeste/schemas/cteSimp_v4.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Conhecimento de Transporte Eletrônico Simplificado + + + diff --git a/CTe.AppTeste/schemas/cteTiposBasico_v4.00.xsd b/CTe.AppTeste/schemas/cteTiposBasico_v4.00.xsd index 3cf5e8845..389b6391d 100644 --- a/CTe.AppTeste/schemas/cteTiposBasico_v4.00.xsd +++ b/CTe.AppTeste/schemas/cteTiposBasico_v4.00.xsd @@ -1,8 +1,9 @@ - + + Tipo Modal transporte GTVe @@ -120,17 +121,13 @@ Forma de emissão da GTV-e Preencher com: 1 - Normal; - 2- Contingencia offline -7 - Autorização pela SVC-RS; - 8 - Autorização pela SVC-SP +2- Contingencia offline - - @@ -882,7 +879,7 @@ REENTREGA; DEVOLUÇÃO; REFATURAMENTO; etc - + @@ -903,7 +900,7 @@ REENTREGA; DEVOLUÇÃO; REFATURAMENTO; etc - + @@ -1191,6 +1188,46 @@ REENTREGA; DEVOLUÇÃO; REFATURAMENTO; etc + + + Tipo Retorno do Pedido de Autorização de CT-e Simplificado (Modelo 57) + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação da UF + + + + + Versão do Aplicativo que processou a CT-e + + + + + código do status do retorno da consulta. + + + + + Descrição literal do status do do retorno da consulta. + + + + + Reposta ao processamento do CT-e + + + + + Tipo Retorno do Pedido de Autorização de CT-e (Modelo 57) @@ -1213,10 +1250,15 @@ REENTREGA; DEVOLUÇÃO; REFATURAMENTO; etc Versão do Aplicativo que processou a CT-e - + código do status do retorno da consulta. + + + + + @@ -1303,13 +1345,1370 @@ REENTREGA; DEVOLUÇÃO; REFATURAMENTO; etc Descrição literal do status do do retorno da consulta. - + + + Reposta ao processamento do CT-e + + + + + + + + Tipo Conhecimento de Transporte Eletrônico (Modelo 57) - Modelo Simplificado + + + + + Informações do CT-e + + + + + + Identificação do CT-e + + + + + + Código da UF do emitente do CT-e. + Utilizar a Tabela do IBGE. + + + + + Código numérico que compõe a Chave de Acesso. + Número aleatório gerado pelo emitente para cada CT-e, com o objetivo de evitar acessos indevidos ao documento. + + + + + + + + + + + Código Fiscal de Operações e Prestações + + + + + Natureza da Operação + + + + + + + + + + + Modelo do documento fiscal + Utilizar o código 57 para identificação do CT-e, emitido em substituição aos modelos de conhecimentos em papel. + + + + + Série do CT-e + Preencher com "0" no caso de série única + + + + + + + + Número do CT-e + + + + + Data e hora de emissão do CT-e + Formato AAAA-MM-DDTHH:MM:DD TZD + + + + + + + + Formato de impressão do DACTE + Preencher com: 1 - Retrato; 2 - Paisagem. + + + + + + + + + + + + Forma de emissão do CT-e + Preencher com: +1 - Normal; +3 - Regime Especial NFF; +4 - EPEC pela SVC; +7 - Autorização pela SVC-RS; +8 - Autorização pela SVC-SP + + + + + + + + + + + + + + + Digito Verificador da chave de acesso do CT-e + Informar o dígito de controle da chave de acesso do CT-e, que deve ser calculado com a aplicação do algoritmo módulo 11 (base 2,9) da chave de acesso. + + + + + + + + + + + Tipo do Ambiente + Preencher com:1 - Produção; 2 - Homologação. + + + + + Tipo do CT-e Simplificado + Preencher com: +5 - CTe Simplificado +6 - Substituição CTe Simplificado + + + + + Identificador do processo de emissão do CT-e + Preencher com: + 0 - emissão de CT-e com aplicativo do contribuinte; + 3- emissão CT-e pelo contribuinte com aplicativo fornecido pelo SEBRAE. + + + + + Versão do processo de emissão + Informar a versão do aplicativo emissor de CT-e. + + + + + + + + + + + Código do Município de envio do CT-e (de onde o documento foi transmitido) + Utilizar a tabela do IBGE. Informar 9999999 para as operações com o exterior. + + + + + Nome do Município de envio do CT-e (de onde o documento foi transmitido) + Informar PAIS/Municipio para as operações com o exterior. + + + + + + + + + + + Sigla da UF de envio do CT-e (de onde o documento foi transmitido) + Informar 'EX' para operações com o exterior. + + + + + Modal + Preencher com: +01-Rodoviário +02-Aéreo +03-Aquaviário + + + + + Tipo do Serviço + Preencher com: +0 - Normal; +1 - Subcontratação; +2 - Redespacho; + + + + + + + + + + + + + UF do início da prestação + Informar 'EX' para operações com o exterior. + + + + + UF do término da prestação + Informar 'EX' para operações com o exterior. + + + + + Indicador se o Recebedor retira no Aeroporto, Filial, Porto ou Estação de Destino? + Preencher com: 0 - sim; 1 - não + + + + + + + + + + + + Detalhes do retira + + + + + + + + + + + Informar apenas +para tpEmis diferente de 1 + + + + Data e Hora da entrada em contingência + Informar a data e hora no formato AAAA-MM-DDTHH:MM:SS + + + + + Justificativa da entrada em contingência + + + + + + + + + + + + Grupo de Compras Governamentais + + + + + + + + Dados complementares do CT-e para fins operacionais ou comerciais + + + + + + Característica adicional do transporte + Texto livre: +REENTREGA; DEVOLUÇÃO; REFATURAMENTO; etc + + + + + + + + + + + Característica adicional do serviço + Texto livre: + ENTREGA EXPRESSA; LOGÍSTICA REVERSA; CONVENCIONAL; EMERGENCIAL; etc + + + + + + + + + + + Previsão do fluxo da carga + Preenchimento obrigatório para o modal aéreo. + + + + + + Sigla ou código interno da Filial/Porto/Estação/ Aeroporto de Origem + Observações para o modal aéreo: + - Preenchimento obrigatório para o modal aéreo. + - O código de três letras IATA do aeroporto de partida deverá ser incluído como primeira anotação. Quando não for possível, utilizar a sigla OACI. + + + + + + + + + + + + + + Sigla ou código interno da Filial/Porto/Estação/Aeroporto de Passagem + Observação para o modal aéreo: + - O código de três letras IATA, referente ao aeroporto de transferência, deverá ser incluído, quando for o caso. Quando não for possível, utilizar a sigla OACI. Qualquer solicitação de itinerário deverá ser incluída. + + + + + + + + + + + + + + Sigla ou código interno da Filial/Porto/Estação/Aeroporto de Destino + Observações para o modal aéreo: + - Preenchimento obrigatório para o modal aéreo. + - Deverá ser incluído o código de três letras IATA do aeroporto de destino. Quando não for possível, utilizar a sigla OACI. + + + + + + + + + + + Código da Rota de Entrega + + + + + + + + + + + + + + Observações Gerais + + + + + + + + + + + Campo de uso livre do contribuinte + Informar o nome do campo no atributo xCampo e o conteúdo do campo no XTexto + + + + + + Conteúdo do campo + + + + + + + + + + + + Identificação do campo + + + + + + + + + + + + + Campo de uso livre do contribuinte + Informar o nome do campo no atributo xCampo e o conteúdo do campo no XTexto + + + + + + Conteúdo do campo + + + + + + + + + + + + Identificação do campo + + + + + + + + + + + + + + + + Identificação do Emitente do CT-e + + + + + + + CNPJ do emitente + Informar zeros não significativos + + + + + CPF do emitente + Informar zeros não significativos. + +Usar com série específica 920-969 para emitente pessoa física com inscrição estadual + + + + + + Inscrição Estadual do Emitente + A IE do emitente somente ficará sem informação para o caso do Regime Especial da NFF (tpEmis=3) + + + + + + + + Inscrição Estadual do Substituto Tributário + + + + + + + + Razão social ou Nome do emitente + + + + + + + + + + + Nome fantasia + + + + + + + + + + + Endereço do emitente + + + + + Código do Regime Tributário + Informar: 1=Simples Nacional; +2=Simples Nacional, excesso sublimite de receita bruta; +3=Regime Normal. +4=Simples Nacional - Microempreendedor Individual – MEI. + + + + + + + + + Identificação do tomador do serviço no CT-e + + + + + + Tomador do Serviço + Preencher com: + +0-Remetente; +1-Expedidor; +2-Recebedor; +3-Destinatário +4-Terceiro + + + + + + + + + + + + + + + Indicador do papel do tomador na prestação do serviço: +1 – Contribuinte ICMS; +2 – Contribuinte isento de inscrição; +9 – Não Contribuinte + Aplica-se ao tomador que for indicado no toma + + + + + + + + + + + + + + Número do CNPJ + Em caso de empresa não estabelecida no Brasil, será informado o CNPJ com zeros. +Informar os zeros não significativos. + + + + + Número do CPF + Informar os zeros não significativos. + + + + + + Inscrição Estadual + Informar a IE do tomador ou ISENTO se tomador é contribuinte do ICMS isento de inscrição no cadastro de contribuintes do ICMS. Caso o tomador não seja contribuinte do ICMS não informar o conteúdo. + + + + + + + + Razão Social ou Nome + + + + + + + + + + + Inscrição na SUFRAMA + (Obrigatório nas operações com as áreas com benefícios de incentivos fiscais sob controle da SUFRAMA) + + + + + + + + + + + Telefone + + + + + Dados do endereço + + + + + Endereço de email + + + + + + + + Informações da Carga do CT-e + + + + + + Valor total da carga + + + + + Produto predominante + Informar a descrição do produto predominante + + + + + + + + + + + Outras características da carga + "FRIA", "GRANEL", "REFRIGERADA", "Medidas: 12X12X12" + + + + + + + + + + + Informações de quantidades da Carga do CT-e + Para o Aéreo é obrigatório o preenchimento desse campo da seguinte forma. +1 - Peso Bruto, sempre em quilogramas (obrigatório); +2 - Peso Cubado; sempre em quilogramas; +3 - Quantidade de volumes, sempre em unidades (obrigatório); +4 - Cubagem, sempre em metros cúbicos (obrigatório apenas quando for impossível preencher as dimensões da(s) embalagem(ens) na tag xDime do leiaute do Aéreo). + + + + + + Código da Unidade de Medida + Preencher com: +00-M3; +01-KG; +02-TON; +03-UNIDADE; +04-LITROS; +05-MMBTU + + + + + + + + + + + + + + + + Tipo da Medida + Informar com: +00-Cubagem da NF-e +01-Cubagem Aferida pelo Transportador +02-Peso Bruto da NF-e +03-Peso Bruto Aferido pelo Transportador +04-Peso Cubado +05-Peso Base do Cálculo do Frete +06-Peso para uso Operacional +07-Caixas +08-Paletes +09-Sacas +10-Containers +11-Rolos +12-Bombonas +13-Latas +14-Litragem +15-Milhão de BTU (British Thermal Units) +99-Outros + + + + + + + + + + + + + + + + + + + + + + + + + + + + Quantidade + + + + + + + + Valor da Carga para efeito de averbação + Normalmente igual ao valor declarado da mercadoria, diferente por exemplo, quando a mercadoria transportada é isenta de tributos nacionais para exportação, onde é preciso averbar um valor maior, pois no caso de indenização, o valor a ser pago será maior + + + + + + + + Detalhamento das entregas / prestações do CTe Simplificado + + + + + + + Código do Município de início da prestação + Utilizar a tabela do IBGE. Informar 9999999 para operações com o exterior. + + + + + Nome do Município do início da prestação + Informar 'EXTERIOR' para operações com o exterior. + + + + + + + + + + + + + Código do Município de término da prestação + Utilizar a tabela do IBGE. Informar 9999999 para operações com o exterior. + + + + + Nome do Município do término da prestação + Informar 'EXTERIOR' para operações com o exterior. + + + + + + + + + + + + Valorl da Prestação do Serviço + Pode conter zeros quando o CT-e for de complemento de ICMS + + + + + Valor a Receber + + + + + Componentes do Valor da Prestação + + + + + + Nome do componente + Exxemplos: FRETE PESO, FRETE VALOR, SEC/CAT, ADEME, AGENDAMENTO, etc + + + + + + + + + + + Valor do componente + + + + + + + + + Informações das NF-e + + + + + + Chave de acesso da NF-e + + + + + + + + + + PIN SUFRAMA + PIN atribuído pela SUFRAMA para a operação. + + + + + + + + + + + + + Data prevista de entrega + Formato AAAA-MM-DD + + + + + + Informações das Unidades de Carga (Containeres/ULD/Outros) + Dispositivo de carga utilizada (Unit Load Device - ULD) significa todo tipo de contêiner de carga, vagão, contêiner de avião, palete de aeronave com rede ou palete de aeronave com rede sobre um iglu. + + + + + Informações das Unidades de Transporte (Carreta/Reboque/Vagão) + Deve ser preenchido com as informações das unidades de transporte utilizadas. + + + + + + + + + Documentos anteriores + + + + + + Chave de acesso do CT-e + + + + + indica se a prestação é total ou parcial em relação as notas do documento anterior + Preencher com: + +1 - Total +2 - Parcial + + + + + + + + + + + + + + + Chave de acesso da NF-e + Informando o tpPrest com “2 – Parcial” deve-se informar as chaves de acesso das NF-e que acobertam a carga transportada. + + + + + + + + + + + + + Número identificador do item agrupador da prestação + + + + + + + + + + + + + Informações do modal + + + + + + XML do modal +Insira neste local o XML específico do modal (rodoviário, aéreo, ferroviário, aquaviário ou dutoviário). + O elemento do tipo -any- permite estender o documento XML com elementos não especificados pelo schema. + Insira neste local - any- o XML específico do modal (rodoviário, aéreo, ferroviário, aquaviário ou dutoviário). A especificação do schema XML para cada modal pode ser encontrada nos arquivos que acompanham este pacote de liberação: + Rodoviário - ver arquivo CTeModalRodoviario_v9.99 + Aéreo - ver arquivo CTeModalAereo_v9.99 + Aquaviário - arquivo CTeModalAquaviario_v9.99 + Ferroviário - arquivo CTeModalFerroviario_v9.99 + Dutoviário - arquivo CTeModalDutoviario_v9.99 + +Onde v9.99 é a a designação genérica para a versão do arquivo. Por exemplo, o arquivo para o schema do modal Rodoviário na versão 1.04 será denominado "CTeModalRodoviario_v1.04". + + + + + + Versão do leiaute específico para o Modal + + + + + + + + + + + + + Dados da cobrança do CT-e + + + + + + Dados da fatura + + + + + + Número da fatura + + + + + + + + + + + Valor original da fatura + + + + + Valor do desconto da fatura + + + + + Valor líquido da fatura + + + + + + + + Dados das duplicatas + + + + + + Número da duplicata + + + + + + + + + + + Data de vencimento da duplicata (AAAA-MM-DD) + + + + + Valor da duplicata + + + + + + + + + + + Informações do CT-e de substituição + + + + + + Chave de acesso do CT-e a ser substituído (original) + + + + + + + + + + Indicador de CT-e Alteração de Tomador + + + + + + + + + + + + + Informações relativas aos Impostos + + + + + + Informações relativas ao ICMS + + + + + + Valor Total dos Tributos + + + + + Informações adicionais de interesse do Fisco + Norma referenciada, informações complementares, etc + + + + + + + + + + + Informações do ICMS de partilha com a UF de término do serviço de transporte na operação interestadual + Grupo a ser informado nas prestações interestaduais para consumidor final, não contribuinte do ICMS + + + + + + Valor da BC do ICMS na UF de término da prestação do serviço de transporte + + + + + Percentual do ICMS relativo ao Fundo de Combate à pobreza (FCP) na UF de término da prestação do serviço de transporte + Alíquota adotada nas operações internas na UF do destinatário + + + + + Alíquota interna da UF de término da prestação do serviço de transporte + Alíquota adotada nas operações internas na UF do destinatário + + + + + Alíquota interestadual das UF envolvidas + Alíquota interestadual das UF envolvidas + + + + + + Valor do ICMS relativo ao Fundo de Combate á Pobreza (FCP) da UF de término da prestação + + + + + Valor do ICMS de partilha para a UF de término da prestação do serviço de transporte + + + + + Valor do ICMS de partilha para a UF de início da prestação do serviço de transporte + + + + + + + + Grupo de informações do IBS e CBS + + + + + + + + Valores Totais do CTe + + + + + + Valor Total da Prestação do Serviço + Pode conter zeros quando o CT-e for de complemento de ICMS + + + + + Valor total a Receber + + + + + Valor total do documento fiscal +(vTPrest + total do IBS + total da CBS) + + + + + + + + + Autorizados para download do XML do DF-e + Informar CNPJ ou CPF. Preencher os zeros não significativos. + + + + + + + CNPJ do autorizado + Informar zeros não significativos + + + + + CPF do autorizado + Informar zeros não significativos + + + + + + + + + Informações do Responsável Técnico pela emissão do DF-e + + + + + Grupo de informações do pedido de emissão da Nota Fiscal Fácil + + + + + + Solicitação do pedido de emissão da NFF. + Será preenchido com a totalidade de campos informados no aplicativo emissor serializado. + + + + + + + + + + + + + + Grupo de Informação do Provedor de Assinatura e Autorização + + + + + + CNPJ do Provedor de Assinatura e Autorização + + + + + Assinatura RSA do Emitente para DFe gerados por PAA + + + + + + Assinatura digital padrão RSA + Converter o atributo Id do DFe para array de bytes e assinar com a chave privada do RSA com algoritmo SHA1 gerando um valor no formato base64. + + + + + Chave Publica no padrão XML RSA Key + + + + + + + + + + + + Versão do leiaute + Ex: "4.00" + + + + + + + + Identificador da tag a ser assinada + Informar a chave de acesso do CT-e e precedida do literal "CTe" + + + + + + + + + + + + + + - Reposta ao processamento do CT-e + Informações suplementares do CT-e + + + + + Texto com o QR-Code impresso no DACTE + + + + + + + + + + + + + - @@ -1518,8 +2917,11 @@ REENTREGA; DEVOLUÇÃO; REFATURAMENTO; etc Tipo do Serviço Preencher com: -0 - Normal;1 - Subcontratação; -2 - Redespacho;3 - Redespacho Intermediário; 4 - Serviço Vinculado a Multimodal +0 - Normal; +1 - Subcontratação; +2 - Redespacho; +3 - Redespacho Intermediário; +4 - Serviço Vinculado a Multimodal @@ -1761,6 +3163,11 @@ para tpEmis diferente de 1 + + + Grupo de Compras Governamentais + + @@ -2628,6 +4035,18 @@ Usar com série específica 920-969 para emitente pessoa física com inscrição + + + Grupo de informações do IBS e CBS + + + + + Valor total do documento fiscal +(vTPrest + total do IBS + total da CBS) + + + @@ -3024,6 +4443,20 @@ Opcional para Redespacho Intermediario e Serviço vinculado a multimodal. + + + Informações das DCe + + + + + + Chave de acesso da DCe + + + + + @@ -3478,7 +4911,7 @@ Onde v9.99 é a a designação genérica para a versão do arquivo. Por exemplo, - + @@ -3536,7 +4969,7 @@ Onde v9.99 é a a designação genérica para a versão do arquivo. Por exemplo, - + @@ -3557,7 +4990,7 @@ Onde v9.99 é a a designação genérica para a versão do arquivo. Por exemplo, - + @@ -3703,7 +5136,6 @@ Onde v9.99 é a a designação genérica para a versão do arquivo. Por exemplo, Preencher com: 0 - CT-e Normal; 1 - CT-e Complementar; - 3 - CT-e de Substituição. @@ -3882,6 +5314,11 @@ para tpEmis diferente de 1 + + + Grupo de Compras Governamentais + + @@ -4307,6 +5744,18 @@ REENTREGA; DEVOLUÇÃO; REFATURAMENTO; etc + + + Grupo de informações do IBS e CBS + + + + + Valor total do documento fiscal +(vTPrest + total do IBS + total da CBS) + + + @@ -4732,7 +6181,7 @@ Somente para Transporte de Valores - + @@ -4753,7 +6202,7 @@ Somente para Transporte de Valores - + @@ -5371,6 +6820,29 @@ Somente para Transporte de Valores Valor do ICMS + + + Sequencia XML + + + + Valor do ICMS de desoneração + + + + + Código de Benefício Fiscal na UF + Código de Benefício Fiscal utilizado pela UF + + + + + + + + + + @@ -5397,6 +6869,29 @@ Somente para Transporte de Valores + + + Sequencia XML + + + + Valor do ICMS de desoneração + + + + + Código de Benefício Fiscal na UF + Código de Benefício Fiscal utilizado pela UF + + + + + + + + + + @@ -5442,6 +6937,29 @@ Somente para Transporte de Valores Preencher somente quando o transportador substituído, for optante pelo crédito outorgado previsto no Convênio 106/96 e corresponde ao percentual de 20% do valor do ICMS ST retido. + + + Sequencia XML + + + + Valor do ICMS de desoneração + + + + + Código de Benefício Fiscal na UF + Código de Benefício Fiscal utilizado pela UF + + + + + + + + + + @@ -5488,6 +7006,29 @@ Somente para Transporte de Valores Valor do Crédito Outorgado/Presumido + + + Sequencia XML + + + + Valor do ICMS de desoneração + + + + + Código de Benefício Fiscal na UF + Código de Benefício Fiscal utilizado pela UF + + + + + + + + + + @@ -5529,6 +7070,29 @@ Somente para Transporte de Valores Valor do ICMS devido outra UF + + + Sequencia XML + + + + Valor do ICMS de desoneração + + + + + Código de Benefício Fiscal na UF + Código de Benefício Fiscal utilizado pela UF + + + + + + + + + + @@ -5645,6 +7209,29 @@ Somente para Transporte de Valores Valor do ICMS + + + Sequencia XML + + + + Valor do ICMS de desoneração + + + + + Código de Benefício Fiscal na UF + Código de Benefício Fiscal utilizado pela UF + + + + + + + + + + @@ -5671,6 +7258,29 @@ Somente para Transporte de Valores + + + Sequencia XML + + + + Valor do ICMS de desoneração + + + + + Código de Benefício Fiscal na UF + Código de Benefício Fiscal utilizado pela UF + + + + + + + + + + @@ -5717,6 +7327,29 @@ Somente para Transporte de Valores Valor do Crédito Outorgado/Presumido + + + Sequencia XML + + + + Valor do ICMS de desoneração + + + + + Código de Benefício Fiscal na UF + Código de Benefício Fiscal utilizado pela UF + + + + + + + + + + @@ -5758,6 +7391,29 @@ Somente para Transporte de Valores Valor do ICMS devido outra UF + + + Sequencia XML + + + + Valor do ICMS de desoneração + + + + + Código de Benefício Fiscal na UF + Código de Benefício Fiscal utilizado pela UF + + + + + + + + + + @@ -6226,6 +7882,16 @@ Observação: 28 caracteres são representados no schema como 20 bytes do tipo b + + + Tipos Finalidade de CT-e Simplificado + + + + + + + Tipo Identificador de controle do envio do lote. Número seqüencial auto-incremental, de controle correspondente ao identificador único do lote enviado. A responsabilidade de gerar e controlar esse número é do próprio contribuinte. @@ -6298,6 +7964,17 @@ Observação: 28 caracteres são representados no schema como 20 bytes do tipo b + + + Tipo Modal transporte do CTe Simplificado + + + + + + + + Tipo RNTRC - Registro Nacional Transportadores Rodoviários de Carga @@ -6358,4 +8035,4 @@ Observação: 28 caracteres são representados no schema como 20 bytes do tipo b - + \ No newline at end of file diff --git a/CTe.AppTeste/schemas/evCancPrestDesacordo_v4.00.xsd b/CTe.AppTeste/schemas/evCancPrestDesacordo_v4.00.xsd new file mode 100644 index 000000000..a3404d254 --- /dev/null +++ b/CTe.AppTeste/schemas/evCancPrestDesacordo_v4.00.xsd @@ -0,0 +1,32 @@ + + + + + + + Schema XML de validação do evento Cancelamento Prestação do Serviço em Desacordo 610111 + + + + + + Descrição do Evento - “Cancelamento Prestação do Serviço em Desacordo” + + + + + + + + + + + + Protocolo do evento que será cancelado + Informar o número do protocolo de autorização do evento de prestação de serviço em desacordo que será cancelado + + + + + + diff --git a/CTe.AppTeste/schemas/eventoCTeTiposBasico_v4.00.xsd b/CTe.AppTeste/schemas/eventoCTeTiposBasico_v4.00.xsd index 71ce7421d..ae2e98b8b 100644 --- a/CTe.AppTeste/schemas/eventoCTeTiposBasico_v4.00.xsd +++ b/CTe.AppTeste/schemas/eventoCTeTiposBasico_v4.00.xsd @@ -107,7 +107,7 @@ Insira neste local o XML específico do tipo de evento (cancelamento, encerramen - + @@ -156,7 +156,7 @@ Insira neste local o XML específico do tipo de evento (cancelamento, encerramen - + diff --git a/CTe.AppTeste/schemas/procCTeSimp_v4.00.xsd b/CTe.AppTeste/schemas/procCTeSimp_v4.00.xsd new file mode 100644 index 000000000..ae7e19cb5 --- /dev/null +++ b/CTe.AppTeste/schemas/procCTeSimp_v4.00.xsd @@ -0,0 +1,37 @@ + + + + + + + CT-e Simplificado processado + + + + + + + + + + IP do transmissor do documento fiscal para o ambiente autorizador + + + + + Porta de origem utilizada na conexão (De 0 a 65535) + + + + + + + + + + Data e Hora da Conexão de Origem + + + + + diff --git a/CTe.AppTeste/schemas/retCTeSimp_v4.00.xsd b/CTe.AppTeste/schemas/retCTeSimp_v4.00.xsd new file mode 100644 index 000000000..8140961c8 --- /dev/null +++ b/CTe.AppTeste/schemas/retCTeSimp_v4.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do retorno do recibo de envio do CT-e Simplificado (Modelo 57) + + + diff --git a/CTe.AppTeste/schemas/tiposGeralCTe_v4.00.xsd b/CTe.AppTeste/schemas/tiposGeralCTe_v4.00.xsd index 20f80af49..f3757bab2 100644 --- a/CTe.AppTeste/schemas/tiposGeralCTe_v4.00.xsd +++ b/CTe.AppTeste/schemas/tiposGeralCTe_v4.00.xsd @@ -121,7 +121,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -142,22 +142,13 @@ - - - Tipo Número do CNPJ tamanho varíavel (3-14) - - - - - - Tipo Número do CNPJ Opcional - + @@ -509,7 +500,7 @@ - + diff --git a/CTe.Classes/CTeOutrosServicos/Informacoes/Impostos/impOs.cs b/CTe.Classes/CTeOutrosServicos/Informacoes/Impostos/impOs.cs index 64d234b4d..058428168 100644 --- a/CTe.Classes/CTeOutrosServicos/Informacoes/Impostos/impOs.cs +++ b/CTe.Classes/CTeOutrosServicos/Informacoes/Impostos/impOs.cs @@ -22,5 +22,7 @@ public decimal? vTotTrib public ICMSUFFim ICMSUFFim { get; set; } public infTribFed infTribFed { get; set; } + + public IBSCBS IBSCBS { get; set; } } } \ No newline at end of file diff --git a/CTe.Classes/Informacoes/Identificacao/gCompraGov.cs b/CTe.Classes/Informacoes/Identificacao/gCompraGov.cs new file mode 100644 index 000000000..1c75654bb --- /dev/null +++ b/CTe.Classes/Informacoes/Identificacao/gCompraGov.cs @@ -0,0 +1,19 @@ +using CTe.Classes.Informacoes.Tipos; +using DFe.Classes; + +namespace CTe.Classes.Informacoes.Identificacao +{ + public class gCompraGov + { + private decimal _pRedutor; + + public TipoEnteGov tpEnteGov { get; set; } + + public decimal pRedutor + { + get => _pRedutor.Arredondar(4); + set => _pRedutor = value.Arredondar(4); + } + + } +} diff --git a/CTe.Classes/Informacoes/Identificacao/ide.cs b/CTe.Classes/Informacoes/Identificacao/ide.cs index 94bee15cf..52528c0cf 100644 --- a/CTe.Classes/Informacoes/Identificacao/ide.cs +++ b/CTe.Classes/Informacoes/Identificacao/ide.cs @@ -248,5 +248,8 @@ public string ProxydhCont } public string xJust { get; set; } + + public gCompraGov gCompraGov { get; set; } + } } diff --git a/CTe.Classes/Informacoes/Impostos/IBSCBS.cs b/CTe.Classes/Informacoes/Impostos/IBSCBS.cs index eac0359bf..662e47fe7 100644 --- a/CTe.Classes/Informacoes/Impostos/IBSCBS.cs +++ b/CTe.Classes/Informacoes/Impostos/IBSCBS.cs @@ -1,4 +1,4 @@ -/********************************************************************************/ +/********************************************************************************/ /* Projeto: Biblioteca ZeusNFe */ /* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ /* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ @@ -31,29 +31,44 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ -using CTe.Classes.Informacoes.Impostos.InformacoesIbsCbs; -using CTe.Classes.Informacoes.Impostos.Tipos; +using CTe.Classes.Informacoes.Impostos.IBSCBS; +using CTe.Classes.Informacoes.Tipos; +using System.Xml.Serialization; -namespace CTe.Classes.Informacoes.Impostos +namespace CTe.Classes.Informacoes.Impostos.Tributacao { - /// - /// Grupo do IBS e CBS - /// public class IBSCBS { - /// - /// Código de Situação Tributária do IBS e CBS - /// - public CstIbsCbs CST { get; set; } + private string _cClassTrib; - /// - /// Código de Classificação Tributária do IBS e CBS - /// - public string cClassTrib { get; set; } + [XmlElement(Order = 1)] + public CSTIBSCBS CST { get; set; } + + [XmlElement(Order = 2)] + public string cClassTrib + { + get => _cClassTrib; + set => _cClassTrib = value; + } + + [XmlElement(Order = 3)] + public short? indDoacao { get; set; } + + [XmlElement(Order = 4)] + public gIBSCBS gIBSCBS { get; set; } + + //define se o campo indDoacao deve ser serializado + public bool ShouldSerializeindDoacao() + { + return indDoacao.HasValue; + } /// - /// Grupo de Informações do IBS e da CBS + /// Define o valor de cClassTrib a partir de um inteiro /// - public gIBSCBS gIBSCBS { get; set; } + public void SetcClassTrib(int intValue) + { + _cClassTrib = intValue.ToString("D6"); + } } } diff --git a/CTe.Classes/Informacoes/Impostos/IBSCBS/gCBS.cs b/CTe.Classes/Informacoes/Impostos/IBSCBS/gCBS.cs new file mode 100644 index 000000000..efcad234a --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/IBSCBS/gCBS.cs @@ -0,0 +1,34 @@ +using DFe.Classes; +using System.Xml.Serialization; + +namespace CTe.Classes.Informacoes.Impostos.IBSCBS +{ + public class gCBS + { + private decimal _pGBS; + private decimal _vGBS; + + [XmlElement(Order = 1)] + public decimal pCBS + { + get => _pGBS.Arredondar(4); + set => _pGBS = value.Arredondar(4); + } + + [XmlElement(Order = 2)] + public gDif gDif { get; set; } + + [XmlElement(Order = 3)] + public gDevTrib gDevTrib { get; set; } + + [XmlElement(Order = 4)] + public gRed gRed { get; set; } + + [XmlElement(Order = 5)] + public decimal vCBS + { + get => _vGBS.Arredondar(2); + set => _vGBS = value.Arredondar(2); + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/IBSCBS/gDevTrib.cs b/CTe.Classes/Informacoes/Impostos/IBSCBS/gDevTrib.cs new file mode 100644 index 000000000..4a185edc9 --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/IBSCBS/gDevTrib.cs @@ -0,0 +1,15 @@ +using DFe.Classes; + +namespace CTe.Classes.Informacoes.Impostos.IBSCBS +{ + public class gDevTrib + { + private decimal _vDevTrib { get; set; } + + public decimal vDevTrib + { + get => _vDevTrib.Arredondar(2); + set => _vDevTrib = value.Arredondar(2); + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/IBSCBS/gDif.cs b/CTe.Classes/Informacoes/Impostos/IBSCBS/gDif.cs new file mode 100644 index 000000000..c83dafdc0 --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/IBSCBS/gDif.cs @@ -0,0 +1,22 @@ +using DFe.Classes; + +namespace CTe.Classes.Informacoes.Impostos.IBSCBS +{ + public class gDif + { + private decimal _pDif; + private decimal _vDif; + + public decimal pDif + { + get => _pDif.Arredondar(4); + set => _pDif = value.Arredondar(4); + } + + public decimal vDif + { + get => _vDif.Arredondar(2); + set => _vDif = value.Arredondar(2); + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/IBSCBS/gEstornoCred.cs b/CTe.Classes/Informacoes/Impostos/IBSCBS/gEstornoCred.cs new file mode 100644 index 000000000..bf73ce1a5 --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/IBSCBS/gEstornoCred.cs @@ -0,0 +1,25 @@ +using DFe.Classes; +using System.Xml.Serialization; + +namespace CTe.Classes.Informacoes.Impostos.IBSCBS +{ + public class gEstornoCred + { + private decimal _vIBSEstCred; + private decimal _vCBSEstCred; + + [XmlElement(Order = 1)] + public decimal vIBSEstCred + { + get => _vIBSEstCred.Arredondar(2); + set => _vIBSEstCred = value.Arredondar(2); + } + + [XmlElement(Order = 2)] + public decimal vCBSEstCred + { + get => _vCBSEstCred.Arredondar(2); + set => _vCBSEstCred = value.Arredondar(2); + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/IBSCBS/gIBSCBS.cs b/CTe.Classes/Informacoes/Impostos/IBSCBS/gIBSCBS.cs new file mode 100644 index 000000000..9c1bf0136 --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/IBSCBS/gIBSCBS.cs @@ -0,0 +1,48 @@ +using DFe.Classes; +using System.Xml.Serialization; + +namespace CTe.Classes.Informacoes.Impostos.IBSCBS +{ + public class gIBSCBS + { + private decimal _vBc; + private decimal? _vIbs; + + [XmlElement(Order = 1)] + public decimal vBC + { + get => _vBc.Arredondar(2); + set => _vBc = value.Arredondar(2); + } + + [XmlElement(Order = 2)] + public gIBSUF gIBSUF { get; set; } + + [XmlElement(Order = 3)] + public gIBSMun gIBSMun { get; set; } + + [XmlElement(Order = 4)] + public decimal? vIBS + { + get => _vIbs.Arredondar(2); + set => _vIbs = value.Arredondar(2); + } + + [XmlElement(Order = 5)] + public gCBS gCBS { get; set; } + + [XmlElement(Order = 6)] + public gTribRegular gTribRegular { get; set; } + + [XmlElement(Order = 7)] + public gTribCompraGov gTribCompraGov { get; set; } + + [XmlElement(Order = 8)] + public gEstornoCred gEstornoCred { get; set; } + + public bool vIBSSpecified + { + get { return vIBS.HasValue; } + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/IBSCBS/gIBSMun.cs b/CTe.Classes/Informacoes/Impostos/IBSCBS/gIBSMun.cs new file mode 100644 index 000000000..afbdb5b3e --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/IBSCBS/gIBSMun.cs @@ -0,0 +1,34 @@ +using DFe.Classes; +using System.Xml.Serialization; + +namespace CTe.Classes.Informacoes.Impostos.IBSCBS +{ + public class gIBSMun + { + private decimal _pIbsMun; + private decimal _vIbsMun; + + [XmlElement(Order = 1)] + public decimal pIBSMun + { + get => _pIbsMun.Arredondar(4); + set => _pIbsMun = value.Arredondar(4); + } + + [XmlElement(Order = 2)] + public gDif gDif { get; set; } + + [XmlElement(Order = 3)] + public gDevTrib gDevTrib { get; set; } + + [XmlElement(Order = 4)] + public gRed gRed { get; set; } + + [XmlElement(Order = 5)] + public decimal vIBSMun + { + get => _vIbsMun.Arredondar(2); + set => _vIbsMun = value.Arredondar(2); + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/IBSCBS/gIBSUF.cs b/CTe.Classes/Informacoes/Impostos/IBSCBS/gIBSUF.cs new file mode 100644 index 000000000..e0a5600e2 --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/IBSCBS/gIBSUF.cs @@ -0,0 +1,35 @@ +using DFe.Classes; +using System.Xml.Serialization; + +namespace CTe.Classes.Informacoes.Impostos.IBSCBS +{ + public class gIBSUF + { + private decimal _pIbsUf; + private decimal _vIbsUf; + + [XmlElement(Order = 1)] + public decimal pIBSUF + { + get => _pIbsUf.Arredondar(4); + set => _pIbsUf = value.Arredondar(4); + } + + [XmlElement(Order = 2)] + public gDif gDif { get; set; } + + [XmlElement(Order = 3)] + public gDevTrib gDevTrib { get; set; } + + [XmlElement(Order = 4)] + public gRed gRed { get; set; } + + [XmlElement(Order = 5)] + public decimal vIBSUF + { + get => _vIbsUf.Arredondar(2); + set => _vIbsUf = value.Arredondar(2); + } + } + +} diff --git a/CTe.Classes/Informacoes/Impostos/IBSCBS/gRed.cs b/CTe.Classes/Informacoes/Impostos/IBSCBS/gRed.cs new file mode 100644 index 000000000..bed8183a1 --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/IBSCBS/gRed.cs @@ -0,0 +1,22 @@ +using DFe.Classes; + +namespace CTe.Classes.Informacoes.Impostos.IBSCBS +{ + public class gRed + { + private decimal _pRedAliq; + private decimal _pAliqEfet; + + public decimal pRedAliq + { + get => _pRedAliq.Arredondar(4); + set => _pRedAliq = value.Arredondar(4); + } + + public decimal pAliqEfet + { + get => _pAliqEfet.Arredondar(4); + set => _pAliqEfet = value.Arredondar(4); + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/IBSCBS/gTribCompraGov.cs b/CTe.Classes/Informacoes/Impostos/IBSCBS/gTribCompraGov.cs new file mode 100644 index 000000000..cf8ef7abf --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/IBSCBS/gTribCompraGov.cs @@ -0,0 +1,57 @@ +using DFe.Classes; +using System.Xml.Serialization; + +namespace CTe.Classes.Informacoes.Impostos.IBSCBS +{ + public class gTribCompraGov + { + private decimal _pAliqIbsUf; + private decimal _vTribIbsUf; + private decimal _pAliqIbsMun; + private decimal _vTribIbsMun; + private decimal _pAliqCbs; + private decimal _vTribCbs; + + [XmlElement(Order = 1)] + public decimal pAliqIBSUF + { + get => _pAliqIbsUf.Arredondar(4); + set => _pAliqIbsUf = value.Arredondar(4); + } + + [XmlElement(Order = 2)] + public decimal vTribIBSUF + { + get => _vTribIbsUf.Arredondar(2); + set => _vTribIbsUf = value.Arredondar(2); + } + + [XmlElement(Order = 3)] + public decimal pAliqIBSMun + { + get => _pAliqIbsMun.Arredondar(4); + set => _pAliqIbsMun = value.Arredondar(4); + } + + [XmlElement(Order = 4)] + public decimal vTribIBSMun + { + get => _vTribIbsMun.Arredondar(2); + set => _vTribIbsMun = value.Arredondar(2); + } + + [XmlElement(Order = 5)] + public decimal pAliqCBS + { + get => _pAliqCbs.Arredondar(4); + set => _pAliqCbs = value.Arredondar(4); + } + + [XmlElement(Order = 6)] + public decimal vTribCBS + { + get => _vTribCbs.Arredondar(2); + set => _vTribCbs = value.Arredondar(2); + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/IBSCBS/gTribRegular.cs b/CTe.Classes/Informacoes/Impostos/IBSCBS/gTribRegular.cs new file mode 100644 index 000000000..43600dfbd --- /dev/null +++ b/CTe.Classes/Informacoes/Impostos/IBSCBS/gTribRegular.cs @@ -0,0 +1,77 @@ +using CTe.Classes.Informacoes.Tipos; +using DFe.Classes; +using System.Xml.Serialization; + +namespace CTe.Classes.Informacoes.Impostos.IBSCBS +{ + public class gTribRegular + { + private string _cClassTribReg; + private decimal _pAliqEfetRegIbsUf; + private decimal _vTribRegIbsUf; + private decimal _pAliqEfetRegIbsMun; + private decimal _vTribRegIbsMun; + private decimal _pAliqEfetRegCbs; + private decimal _vTribRegCbs; + + [XmlElement(Order = 1)] + public CSTIBSCBS CSTReg { get; set; } + + [XmlElement(Order = 2)] + public string cClassTribReg + { + get => _cClassTribReg; + set => _cClassTribReg = value; + } + + [XmlElement(Order = 3)] + public decimal pAliqEfetRegIBSUF + { + get => _pAliqEfetRegIbsUf.Arredondar(4); + set => _pAliqEfetRegIbsUf = value.Arredondar(4); + } + + [XmlElement(Order = 4)] + public decimal vTribRegIBSUF + { + get => _vTribRegIbsUf.Arredondar(2); + set => _vTribRegIbsUf = value.Arredondar(2); + } + + [XmlElement(Order = 5)] + public decimal pAliqEfetRegIBSMun + { + get => _pAliqEfetRegIbsMun.Arredondar(4); + set => _pAliqEfetRegIbsMun = value.Arredondar(4); + } + + [XmlElement(Order = 6)] + public decimal vTribRegIBSMun + { + get => _vTribRegIbsMun.Arredondar(2); + set => _vTribRegIbsMun = value.Arredondar(2); + } + + [XmlElement(Order = 7)] + public decimal pAliqEfetRegCBS + { + get => _pAliqEfetRegCbs.Arredondar(4); + set => _pAliqEfetRegCbs = value.Arredondar(4); + } + + [XmlElement(Order = 8)] + public decimal vTribRegCBS + { + get => _vTribRegCbs.Arredondar(2); + set => _vTribRegCbs = value.Arredondar(2); + } + + /// + /// Define o valor de cClassTrib a partir de um inteiro + /// + public void SetcClassTrib(int intValue) + { + _cClassTribReg = intValue.ToString("D6"); + } + } +} diff --git a/CTe.Classes/Informacoes/Impostos/imp.cs b/CTe.Classes/Informacoes/Impostos/imp.cs index 2e2b248ae..4527a10c8 100644 --- a/CTe.Classes/Informacoes/Impostos/imp.cs +++ b/CTe.Classes/Informacoes/Impostos/imp.cs @@ -1,36 +1,37 @@ -/********************************************************************************/ +/********************************************************************************/ /* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* Biblioteca C# para emiss�o de Nota Fiscal Eletr�nica - NFe e Nota Fiscal de */ +/* Consumidor Eletr�nica - NFC-e (http://www.nfe.fazenda.gov.br) */ /* */ /* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ /* Zeusdev Tecnologia LTDA ME */ /* */ -/* Você pode obter a última versão desse arquivo no GitHub */ +/* Voc� pode obter a �ltima vers�o desse arquivo no GitHub */ /* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ /* */ /* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ +/* Esta biblioteca � software livre; voc� pode redistribu�-la e/ou modific�-la */ +/* sob os termos da Licen�a P�blica Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a vers�o 2.1 da Licen�a, ou (a seu crit�rio) */ +/* qualquer vers�o posterior. */ /* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* Esta biblioteca � distribu�da na expectativa de que seja �til, por�m, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia impl�cita de COMERCIABILIDADE OU */ +/* ADEQUA��O A UMA FINALIDADE ESPEC�FICA. Consulte a Licen�a P�blica Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICEN�A.TXT ou LICENSE.TXT) */ /* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ +/* Voc� deve ter recebido uma c�pia da Licen�a P�blica Geral Menor do GNU junto*/ +/* com esta biblioteca; se n�o, escreva para a Free Software Foundation, Inc., */ +/* no endere�o 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Voc� tamb�m pode obter uma copia da licen�a em: */ /* http://www.opensource.org/licenses/lgpl-license.php */ /* */ /* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ /* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/* Rua Comendador Francisco jos� da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ - +using CTe.Classes.Informacoes.Impostos.IBSCBS; +using CTe.Classes.Informacoes.Valores; using DFe.Classes; namespace CTe.Classes.Informacoes.Impostos @@ -40,17 +41,13 @@ public class imp public Tributacao.ICMS ICMS { get; set; } private decimal? _vTotTrib; - public decimal? vTotTrib { get { return _vTotTrib.Arredondar(2); } set { _vTotTrib = value.Arredondar(2); } } - public bool vTotTribSpecified - { - get { return vTotTrib.HasValue; } - } + public bool vTotTribSpecified { get { return vTotTrib.HasValue; } } public string infAdFisco { get; set; } @@ -58,12 +55,16 @@ public bool vTotTribSpecified public infTribFed infTribFed { get; set; } - public IBSCBS IBSCBS { get; set; } - private decimal? _vTotDFe; + public Tributacao.IBSCBS IBSCBS { get; set; } + private decimal? _vTotDFe; /// - /// Valor Total do DFe + /// O total geral do DFe dever� ser a soma do total da presta��o + IBS + CBS + /// vTotDFe = vPrest / vTPrest + gIBSCBS / vIBS + gCBS / vCBS + /// + /// Exce��o: Em 2026 n�o somar IBS e CBS + /// Observa��o: Implementa��o futura /// public decimal? vTotDFe { @@ -71,9 +72,6 @@ public decimal? vTotDFe set { _vTotDFe = value.Arredondar(2); } } - public bool vTotDFeSpecified - { - get { return vTotDFe.HasValue; } - } + public bool vTotDFeSpecified { get { return vTotDFe.HasValue; } } } } \ No newline at end of file diff --git a/CTe.Classes/Informacoes/Tipos/CSTIBSCBS.cs b/CTe.Classes/Informacoes/Tipos/CSTIBSCBS.cs new file mode 100644 index 000000000..36b3c62b5 --- /dev/null +++ b/CTe.Classes/Informacoes/Tipos/CSTIBSCBS.cs @@ -0,0 +1,80 @@ +using System.ComponentModel; +using System.Xml.Serialization; + +namespace CTe.Classes.Informacoes.Tipos +{ + public enum CSTIBSCBS + { + [Description("Tributação integral")] + [XmlEnum("000")] + cst000 = 000, + + [Description("Tributação com alíquotas uniformes")] + [XmlEnum("010")] + cst010 = 010, + + [Description("Tributação com alíquotas uniformes reduzidas")] + [XmlEnum("011")] + cst011 = 011, + + [Description("Alíquota reduzida")] + [XmlEnum("200")] + cst200 = 200, + + [Description("Alíquota fixa")] + [XmlEnum("220")] + cst220 = 220, + + [Description("Alíquota fixa rateada")] + [XmlEnum("221")] + cst221 = 221, + + [Description("Redução de Base de Cálculo")] + [XmlEnum("222")] + cst222 = 222, + + [Description("Isenção")] + [XmlEnum("400")] + cst400 = 400, + + [Description("Imunidade e não incidência")] + [XmlEnum("410")] + cst410 = 410, + + [Description("Diferimento")] + [XmlEnum("510")] + cst510 = 510, + + [Description("Diferimento com redução de alíquota")] + [XmlEnum("515")] + cst515 = 515, + + [Description("Suspensão")] + [XmlEnum("550")] + cst550 = 550, + + [Description("Tributação Monofásica")] + [XmlEnum("620")] + cst620 = 620, + + [Description("Transferência de crédito")] + [XmlEnum("800")] + cst800 = 800, + + [Description("Ajuste de IBS na ZFM")] + [XmlEnum("810")] + cst810 = 810, + + [Description("Ajustes")] + [XmlEnum("811")] + cst811 = 811, + + [Description("Tributação em declaração de regime específico")] + [XmlEnum("820")] + cst820 = 820, + + [Description("Exclusão da Base de Cálculo")] + [XmlEnum("830")] + cst830 = 830, + } +} diff --git a/CTe.Classes/Informacoes/Tipos/TipoEnteGov.cs b/CTe.Classes/Informacoes/Tipos/TipoEnteGov.cs new file mode 100644 index 000000000..e82732fee --- /dev/null +++ b/CTe.Classes/Informacoes/Tipos/TipoEnteGov.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Serialization; + +namespace CTe.Classes.Informacoes.Tipos +{ + public enum TipoEnteGov + { + [Description("União")] + [XmlEnum("1")] + Uniao = 1, + + [Description("Estado")] + [XmlEnum("2")] + Estado = 2, + + [Description("Distrito Federal")] + [XmlEnum("3")] + DistritoFederal = 3, + + [Description("Município")] + [XmlEnum("4")] + Municipio = 4 + } +} diff --git a/CTe.Dacte.OpenFast/CTe.Dacte.OpenFast.csproj b/CTe.Dacte.OpenFast/CTe.Dacte.OpenFast.csproj index a8094a73c..a0bb23341 100644 --- a/CTe.Dacte.OpenFast/CTe.Dacte.OpenFast.csproj +++ b/CTe.Dacte.OpenFast/CTe.Dacte.OpenFast.csproj @@ -5,11 +5,16 @@ - + + + + + + diff --git a/CTe.Utils/Validacao/Validador.cs b/CTe.Utils/Validacao/Validador.cs index 1d4773996..667b2560d 100644 --- a/CTe.Utils/Validacao/Validador.cs +++ b/CTe.Utils/Validacao/Validador.cs @@ -55,9 +55,15 @@ public static void Valida(string xml, string schema, ConfiguracaoServico configu // Define o tipo de validação var cfg = new XmlReaderSettings { ValidationType = ValidationType.Schema }; + // Previne ataques XXE: nao permite resolver recursos externos + cfg.DtdProcessing = DtdProcessing.Prohibit; + cfg.XmlResolver = null; + // Carrega o arquivo de esquema - var schemas = new XmlSchemaSet(); - schemas.XmlResolver = new XmlUrlResolver(); + var schemas = new XmlSchemaSet + { + XmlResolver = new XmlUrlResolver() + }; cfg.Schemas = schemas; // Quando carregar o schema, especificar o namespace que ele valida diff --git a/DFe.Utils/Assinatura/AssinaturaDigital.cs b/DFe.Utils/Assinatura/AssinaturaDigital.cs index 097acf2fb..287acbac1 100644 --- a/DFe.Utils/Assinatura/AssinaturaDigital.cs +++ b/DFe.Utils/Assinatura/AssinaturaDigital.cs @@ -51,16 +51,16 @@ public static SignatureZeus Assina(T objeto, string id, X509Certificate2 cert if (id == null) throw new Exception("Não é possível assinar um objeto evento sem sua respectiva Id!"); - var documento = new XmlDocument {PreserveWhitespace = true}; + var documento = new XmlDocument { PreserveWhitespace = true }; documento.LoadXml(cfgServicoRemoverAcentos ? FuncoesXml.ClasseParaXmlString(objetoLocal).RemoverAcentos() : FuncoesXml.ClasseParaXmlString(objetoLocal)); - var docXml = new SignedXml(documento) {SigningKey = certificado.PrivateKey}; + var docXml = new SignedXml(documento) { SigningKey = certificado.PrivateKey }; docXml.SignedInfo.SignatureMethod = signatureMethod; - var reference = new Reference {Uri = "#" + id, DigestMethod = digestMethod}; + var reference = new Reference { Uri = "#" + id, DigestMethod = digestMethod }; // adicionando EnvelopedSignatureTransform a referencia var envelopedSigntature = new XmlDsigEnvelopedSignatureTransform(); diff --git a/DFe.Utils/FuncoesXml.cs b/DFe.Utils/FuncoesXml.cs index da5964da1..839f1d882 100644 --- a/DFe.Utils/FuncoesXml.cs +++ b/DFe.Utils/FuncoesXml.cs @@ -117,6 +117,11 @@ public static T ArquivoXmlParaClasse(string arquivo, bool ignorarOrdenacaoEle serializador = BuscarNoCache(keyNomeClasseEmUso, typeof(T)); } + if(arquivo.Contains("../") || arquivo.Contains("..\\")) + { + throw new Exception("Caminho do arquivo não pode conter ../ ou ..\\"); + } + var stream = new FileStream(arquivo, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); try { diff --git a/Dev.VersaoAssemblies/ProgramMain.cs b/Dev.VersaoAssemblies/ProgramMain.cs index 2aa1df619..bf24f0c8b 100644 --- a/Dev.VersaoAssemblies/ProgramMain.cs +++ b/Dev.VersaoAssemblies/ProgramMain.cs @@ -91,6 +91,11 @@ private static void FazerAlteracaoDasVersoes(string versaoString) private static void AlterarVersaoDoAssembly(string infoFile, string versaoString) { + if(infoFile.Contains("../") || infoFile.Contains("..\\")) + { + throw new Exception("Caminho do arquivo não pode conter ../ ou ..\\"); + } + var content = File.ReadAllText(infoFile); var regexVersion = new Regex("assembly: AssemblyVersion.+\\)", RegexOptions.IgnoreCase); diff --git a/MDFe.Damdfe.OpenFast/MDFe.Damdfe.OpenFast.csproj b/MDFe.Damdfe.OpenFast/MDFe.Damdfe.OpenFast.csproj index ee560f9ba..5cc9fd5ba 100644 --- a/MDFe.Damdfe.OpenFast/MDFe.Damdfe.OpenFast.csproj +++ b/MDFe.Damdfe.OpenFast/MDFe.Damdfe.OpenFast.csproj @@ -5,11 +5,16 @@ - + + + + + + diff --git a/MDFe.Utils/Validacao/Validador.cs b/MDFe.Utils/Validacao/Validador.cs index 07b0d4961..fa566f4b4 100644 --- a/MDFe.Utils/Validacao/Validador.cs +++ b/MDFe.Utils/Validacao/Validador.cs @@ -54,6 +54,10 @@ public static void Valida(string xml, string schema, MDFeConfiguracao cfgMdfe = // Define o tipo de validação var cfg = new XmlReaderSettings { ValidationType = ValidationType.Schema }; + // Previne ataques XXE: nao permite resolver recursos externos + cfg.DtdProcessing = DtdProcessing.Prohibit; + cfg.XmlResolver = null; + // Carrega o arquivo de esquema var schemas = new XmlSchemaSet(); schemas.XmlResolver = new XmlUrlResolver(); diff --git a/NFe.Danfe.AppTeste.OpenFast/Funcoes.cs b/NFe.Danfe.AppTeste.OpenFast/Funcoes.cs index 408aba480..7b61d52c5 100644 --- a/NFe.Danfe.AppTeste.OpenFast/Funcoes.cs +++ b/NFe.Danfe.AppTeste.OpenFast/Funcoes.cs @@ -23,6 +23,11 @@ public static string BuscarArquivoXml(string caminho) throw new Exception("Caminho do arquivo incorreto! Arquivo não foi encontrado."); } + if(caminho.Contains("../") || caminho.Contains("..\\")) + { + throw new Exception("Caminho do arquivo não pode conter ../ ou ..\\"); + } + return File.ReadAllText(caminho); } @@ -36,6 +41,12 @@ public static void SalvaArquivoGerado(string caminhoXmlAnterior, string extensao //https://github.com/FastReports/FastReport/blob/master/Demos/OpenSource/FastReport.OpenSource.Web.Vue/Controllers/ReportsController.cs var caminhoArquivo = Path.GetDirectoryName(ArrumaCaminho(caminhoXmlAnterior)) + "/generated" + DateTime.Now.ToString("ddMMyyyy_HHmmss") + extensao; + + if(caminhoArquivo.Contains("../") || caminhoArquivo.Contains("..\\")) + { + throw new Exception("Caminho do arquivo não pode conter ../ ou ..\\"); + } + File.WriteAllBytes(caminhoArquivo, bytes); Console.Clear(); diff --git a/NFe.Danfe.Html/CrossCutting/Utils.cs b/NFe.Danfe.Html/CrossCutting/Utils.cs index 6687285d8..4bf942e5f 100644 --- a/NFe.Danfe.Html/CrossCutting/Utils.cs +++ b/NFe.Danfe.Html/CrossCutting/Utils.cs @@ -73,6 +73,11 @@ public static T XmlStringParaClasse(string input) where T : class /// Nome do arquivo public static void DelatarArquivo(string caminho, string nomeArquivo) { + if(caminho.Contains("../") || caminho.Contains("..\\")) + { + throw new Exception("Caminho do arquivo não pode conter ../ ou ..\\"); + } + var c1 = Path.Combine(caminho, nomeArquivo); File.Delete(c1); } @@ -91,6 +96,9 @@ public static void EscreverArquivo(string caminho, string nomeArquivo, string co throw new ArgumentNullException(nameof(nomeArquivo), "O nome do arquivo deve ser informado"); if (conteudo == null) throw new ArgumentNullException(nameof(conteudo), "O conteúdo do arquivo deve ser informado"); + if(caminho.Contains("../") || caminho.Contains("..\\")) + throw new Exception("Caminho do arquivo não pode conter ../ ou ..\\"); + CriarPastaSeNaoExistir(caminho); var encodedText = Encoding.UTF8.GetBytes(conteudo); var c1 = Path.Combine(caminho, nomeArquivo); // Combina caminho do arquivo como nome do arquivo diff --git a/NFe.Danfe.Nativo/GraphicsPrinter/MedidasLinha.cs b/NFe.Danfe.Nativo/GraphicsPrinter/MedidasLinha.cs index 4deb72a01..95c69367f 100644 --- a/NFe.Danfe.Nativo/GraphicsPrinter/MedidasLinha.cs +++ b/NFe.Danfe.Nativo/GraphicsPrinter/MedidasLinha.cs @@ -47,7 +47,13 @@ public static Medida GetMedidas(AdicionarTexto adicionarTexto) public static Medida GetMedidas(string texto, Font fonte) { - Graphics g = Graphics.FromHwnd(IntPtr.Zero); + /* + * macOS: + * Graphics g = Graphics.FromHwnd(IntPtr.Zero); + * System.NotSupportedException: Specified method is not supported. + */ + Bitmap bmp = new Bitmap(1, 1); + Graphics g = Graphics.FromImage(bmp); SizeF tamanhoDaString = g.MeasureString(texto, fonte); int alturaLinha = Convert.ToInt32(tamanhoDaString.Height); int larguraLinha = Convert.ToInt32(tamanhoDaString.Width); diff --git a/NFe.Danfe.Nativo/NFCe/DanfeNativoNfce.cs b/NFe.Danfe.Nativo/NFCe/DanfeNativoNfce.cs index 1342c5e05..cfcc9a5ba 100644 --- a/NFe.Danfe.Nativo/NFCe/DanfeNativoNfce.cs +++ b/NFe.Danfe.Nativo/NFCe/DanfeNativoNfce.cs @@ -77,7 +77,7 @@ public DanfeNativoNfce(string xml, VersaoQrCode versaoQrCode, byte[] logo, strin Inicializa(xml, versaoQrCode, logo, cIdToken, csc, troco, totalPago, font, viaEstabelecimento); } - private void Inicializa(string xml, VersaoQrCode versaoQrCode, byte[] logo, string cIdToken, string csc, decimal troco, decimal totalPago, string font = null, bool viaEstabelecimento = false, string fontPadrao = "") + private void Inicializa(string xml, VersaoQrCode versaoQrCode, byte[] logo, string cIdToken, string csc, decimal troco, decimal totalPago, string font, bool viaEstabelecimento) { _logo = logo; _versaoQrCode = versaoQrCode; @@ -86,7 +86,7 @@ private void Inicializa(string xml, VersaoQrCode versaoQrCode, byte[] logo, stri _troco = troco; _totalPago = totalPago; _viaEstabelecimento = viaEstabelecimento; - AdicionarTexto.FontPadrao = this.CarregarFontePadraoNfceNativa(fontPadrao); + AdicionarTexto.FontPadrao = this.CarregarFontePadraoNfceNativa(font); CarregarXml(xml); } @@ -234,12 +234,11 @@ private void GerarNfCe(Graphics graphics) { using (var ms = new MemoryStream(_logo)) { + int logox = ((larguraLinha - 128) / 2); var image = Image.FromStream(ms); - new RedimensionaImagemPara(new AdicionarImagem(g, image, x, _y), 50, 24).Desenhar(); + new RedimensionaImagemPara(new AdicionarImagem(g, image, logox, _y), 128, 128).Desenhar(); + _y += 128; } - } - else - { larguraLogo = 0; } @@ -937,4 +936,4 @@ private FontFamily CarregarFontePadraoNfceNativa(string font = null) } } } -} \ No newline at end of file +} diff --git a/NFe.Danfe.OpenFast/NFe.Danfe.OpenFast.csproj b/NFe.Danfe.OpenFast/NFe.Danfe.OpenFast.csproj index 383ef294a..778e0ed7c 100644 --- a/NFe.Danfe.OpenFast/NFe.Danfe.OpenFast.csproj +++ b/NFe.Danfe.OpenFast/NFe.Danfe.OpenFast.csproj @@ -5,11 +5,16 @@ - + + + + + + diff --git a/NFe.Danfe.PdfClown/DanfeDoc.cs b/NFe.Danfe.PdfClown/DanfeDoc.cs index f73b694a4..354b1c03a 100644 --- a/NFe.Danfe.PdfClown/DanfeDoc.cs +++ b/NFe.Danfe.PdfClown/DanfeDoc.cs @@ -107,6 +107,11 @@ public void AdicionarLogoPdf(string path) { if (string.IsNullOrWhiteSpace(path)) throw new ArgumentException(nameof(path)); + if(path.Contains("../") || path.Contains("..\\")) + { + throw new Exception("Caminho do arquivo não pode conter ../ ou ..\\"); + } + using (var fs = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read)) { AdicionarLogoPdf(fs); diff --git a/NFe.Danfe.PdfClown/NFe.Danfe.PdfClown.csproj b/NFe.Danfe.PdfClown/NFe.Danfe.PdfClown.csproj index e17a439a3..e91ef4be4 100644 --- a/NFe.Danfe.PdfClown/NFe.Danfe.PdfClown.csproj +++ b/NFe.Danfe.PdfClown/NFe.Danfe.PdfClown.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;net6.0 diff --git a/NFe.Integracao/Program.cs b/NFe.Integracao/Program.cs index 6df36e7af..c91d31b26 100644 --- a/NFe.Integracao/Program.cs +++ b/NFe.Integracao/Program.cs @@ -529,6 +529,12 @@ private static void EnviarNFe(string dadosDoEnvio) try { + if(strPathArquivoXml.Contains("../") || strPathArquivoXml.Contains("..\\")) + { + Console.WriteLine("Caminho do arquivo não pode conter ../ ou ..\\"); + return; + } + File.ReadAllText(strPathArquivoXml); } catch (UnauthorizedAccessException ex) diff --git a/NFe.Utils/Enderecos/Enderecador.cs b/NFe.Utils/Enderecos/Enderecador.cs index dd269030d..1868705a9 100644 --- a/NFe.Utils/Enderecos/Enderecador.cs +++ b/NFe.Utils/Enderecos/Enderecador.cs @@ -850,13 +850,15 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NFeAutorizacao }, versao3, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NfeAutorizacao?wsdl"); addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao3, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NfeRetAutorizacao?wsdl"); - addServico(new[] { ServicoNFe.NfeInutilizacao }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeInutilizacao4?wsdl"); - addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeConsultaProtocolo4?wsdl"); - addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeStatusServico4?wsdl"); - addServico(new[] { ServicoNFe.NfeConsultaCadastro }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/CadConsultaCadastro4?wsdl"); - addServico(eventoCceCanc, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeRecepcaoEvento4?wsdl"); - addServico(new[] { ServicoNFe.NFeAutorizacao }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeAutorizacao4?wsdl"); - addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeRetAutorizacao4?wsdl"); + // PE Homologação NFe v4.00 - URLs corrigidas (removido ?wsdl que causava 404) + // Padrão: URLs de produção de PE não usam ?wsdl, homologação também não deveria + addServico(new[] { ServicoNFe.NfeInutilizacao }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeInutilizacao4"); + addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeConsultaProtocolo4"); + addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeStatusServico4"); + addServico(new[] { ServicoNFe.NfeConsultaCadastro }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/CadConsultaCadastro4"); + addServico(eventoCceCanc, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeRecepcaoEvento4"); + addServico(new[] { ServicoNFe.NFeAutorizacao }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeAutorizacao4"); + addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao4, hom, emissao, Estado.PE, nfe, "https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeRetAutorizacao4"); } diff --git a/NFe.Utils/Validacao/Validador.cs b/NFe.Utils/Validacao/Validador.cs index dd6ac2010..28e4b23e8 100644 --- a/NFe.Utils/Validacao/Validador.cs +++ b/NFe.Utils/Validacao/Validador.cs @@ -1,4 +1,4 @@ -/********************************************************************************/ +/********************************************************************************/ /* Projeto: Biblioteca ZeusNFe */ /* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ /* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ @@ -169,7 +169,7 @@ internal static string ObterArquivoSchema(ServicoNFe servicoNFe, VersaoServico v public static void Valida(ServicoNFe servicoNFe, VersaoServico versaoServico, string stringXml, bool validarLote = true, ConfiguracaoServico cfgServico = null) { - var pathSchema = String.Empty; + string pathSchema = string.Empty; if (cfgServico == null || (cfgServico != null && string.IsNullOrWhiteSpace(cfgServico.DiretorioSchemas))) pathSchema = ConfiguracaoServico.Instancia.DiretorioSchemas; @@ -181,7 +181,7 @@ public static void Valida(ServicoNFe servicoNFe, VersaoServico versaoServico, st public static string[] Valida(ServicoNFe servicoNFe, VersaoServico versaoServico, string stringXml, bool validarLote = true, string pathSchema = null) { - var falhas = new StringBuilder(); + StringBuilder falhas = new StringBuilder(); if (!Directory.Exists(pathSchema)) throw new Exception("Diretório de Schemas não encontrado: \n" + pathSchema); @@ -189,11 +189,18 @@ public static string[] Valida(ServicoNFe servicoNFe, VersaoServico versaoServico var arquivoSchema = Path.Combine(pathSchema, ObterArquivoSchema(servicoNFe, versaoServico, stringXml, validarLote)); // Define o tipo de validação - var cfg = new XmlReaderSettings { ValidationType = ValidationType.Schema }; + XmlReaderSettings cfg = new XmlReaderSettings + { + ValidationType = ValidationType.Schema, // Previne ataques XXE: nao permite resolver recursos externos + DtdProcessing = DtdProcessing.Prohibit, + XmlResolver = null + }; // Carrega o arquivo de esquema - var schemas = new XmlSchemaSet(); - schemas.XmlResolver = new XmlUrlResolver(); + XmlSchemaSet schemas = new XmlSchemaSet + { + XmlResolver = new XmlUrlResolver() + }; cfg.Schemas = schemas; // Quando carregar o eschema, especificar o namespace que ele valida @@ -205,14 +212,14 @@ public static string[] Valida(ServicoNFe servicoNFe, VersaoServico versaoServico string message = args.Message.ToLower().RemoverAcentos(); if (!( - + //Está errado o schema. Pois o certo é ser 20 o length e não 28 como está no schema envIECTE_v4.00xsd - (message.Contains("hashtentativaentrega") && message.Contains("o comprimento atual nao e igual")) || + (message.Contains("hashtentativaentrega") && message.Contains("o comprimento atual nao e igual")) || //erro de orgaoibge que duplicou em alguns xsds porem a receita federal veio a arrumar posteriormente, mesmo assim alguns não atualizam os xsds (message.Contains("tcorgaoibge") && message.Contains("ja foi declarado")) - //no futuro adicionar novos aqui... + //no futuro adicionar novos aqui... )) { falhas.AppendLine($"[{args.Severity}] - {message} {args.Exception?.Message} " + @@ -223,17 +230,13 @@ public static string[] Valida(ServicoNFe servicoNFe, VersaoServico versaoServico }; // cria um leitor para validação - var validator = XmlReader.Create(new StringReader(stringXml), cfg); + XmlReader validator = XmlReader.Create(new StringReader(stringXml), cfg); try { // Faz a leitura de todos os dados XML - while (validator.Read()) - { - } - } - catch - { + while (validator.Read()) { } } + catch { } finally { validator.Close(); @@ -244,7 +247,5 @@ public static string[] Valida(ServicoNFe servicoNFe, VersaoServico versaoServico return falhas.ToString().Trim().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); } - - } } \ No newline at end of file diff --git a/Shared.NFe.Danfe/DanfeSharedHelper.cs b/Shared.NFe.Danfe/DanfeSharedHelper.cs index 4688b45fc..e17576fe4 100644 --- a/Shared.NFe.Danfe/DanfeSharedHelper.cs +++ b/Shared.NFe.Danfe/DanfeSharedHelper.cs @@ -9,6 +9,7 @@ using NFe.Utils; using NFe.Utils.InformacoesSuplementares; using System; +using System.Collections.Generic; using System.Drawing; using System.IO; using System.Text.RegularExpressions; @@ -117,6 +118,59 @@ public static Report GenerateDanfeFrNfeReport(nfeProc proc, ConfiguracaoDanfeNfe relatorio.RegisterData(new[] { proc }, "NFe", 20); relatorio.GetDataSource("NFe").Enabled = true; + ConfigurarParametrosRelatorioNfe(relatorio, proc, configuracaoDanfeNfe, desenvolvedor); + + return relatorio; + } + + public static Report GenerateDanfeFrNfeBatchReport(List procs, ConfiguracaoDanfeNfe configuracaoDanfeNfe, byte[] frx, string desenvolvedor, string arquivoRelatorio) + { + if (procs == null || procs.Count == 0) + throw new ArgumentException("A lista de notas fiscais não pode estar vazia.", nameof(procs)); + + //Define as variáveis que serão usadas no relatório (dúvidas a respeito do fast reports consulte a documentação em https://www.fast-report.com/pt/product/fast-report-net/documentation/) + + Report relatorio = new Report(); + + if (!string.IsNullOrEmpty(arquivoRelatorio)) + relatorio.Load(arquivoRelatorio); + else if (frx != null && frx.Length > 0) + relatorio.Load(new MemoryStream(frx)); + else + throw new Exception("Erro em DanfeSharedHelper.GenerateDanfeFrNfeBatchReport no Zeus.DFe. Relatório não encontrado, passe os parametros 'frx' com bytes ou 'arquivoRelatorio' com o caminho do arquivo"); + + bool primeiroRelatorio = true; + + foreach (var proc in procs) + { + relatorio.RegisterData(new[] { proc }, "NFe", 20); + relatorio.GetDataSource("NFe").Enabled = true; + + ConfigurarParametrosRelatorioNfe(relatorio, proc, configuracaoDanfeNfe, desenvolvedor); + + if (primeiroRelatorio) + { + relatorio.Prepare(); + primeiroRelatorio = false; + } + else + { + relatorio.Prepare(true); + } + } + + return relatorio; + } + + /// + /// Public pois caso voce implemente na mão utilize esse metodo para configurar o relatorio de danfe + /// + /// + /// + /// + /// + public static void ConfigurarParametrosRelatorioNfe(Report relatorio, nfeProc proc, ConfiguracaoDanfeNfe configuracaoDanfeNfe, string desenvolvedor) + { string mensagem = string.Empty; string resumoCanhoto = string.Empty; string contingenciaDescricao = string.Empty; @@ -237,8 +291,6 @@ public static Report GenerateDanfeFrNfeReport(nfeProc proc, ConfiguracaoDanfeNfe relatorio.SetParameterValue("DecimaisValorUnitario", configuracaoDanfeNfe.DecimaisValorUnitario); relatorio.SetParameterValue("DecimaisQuantidadeItem", configuracaoDanfeNfe.DecimaisQuantidadeItem); relatorio.SetParameterValue("DataHoraImpressao", configuracaoDanfeNfe.DataHoraImpressao ?? DateTime.Now); - - return relatorio; } } }