diff --git a/CTe.Classes/Informacoes/Tipos/tpCTe.cs b/CTe.Classes/Informacoes/Tipos/tpCTe.cs index 9ce00a02..9133bc51 100644 --- a/CTe.Classes/Informacoes/Tipos/tpCTe.cs +++ b/CTe.Classes/Informacoes/Tipos/tpCTe.cs @@ -3,7 +3,7 @@ namespace CTe.Classes.Informacoes.Tipos { /// - /// Tipo do Documento Fiscal (0 - CT-e Normal; 1 - CT-e de Complemento de Valores; 2 - CT-e de Anulação; 3 - CT-e Substituto) + /// Tipo do Documento Fiscal (0 - CT-e Normal; 1 - CT-e de Complemento de Valores; 2 - CT-e de Anulação; 3 - CT-e Substituto; 5 - Simplificado; 6 - Substitudo Simplificado) /// public enum tpCTe { @@ -14,6 +14,10 @@ public enum tpCTe [XmlEnum("2")] Anulacao, [XmlEnum("3")] - Substituto + Substituto, + [XmlEnum("5")] + Simplificado, + [XmlEnum("6")] + SubstitutoSimplificado } } \ No newline at end of file diff --git a/CTe.Classes/Simplificado/Carga/comp.cs b/CTe.Classes/Simplificado/Carga/comp.cs new file mode 100644 index 00000000..fbff2b6a --- /dev/null +++ b/CTe.Classes/Simplificado/Carga/comp.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Serialization; + +namespace CTe.Classes.Simplificado.Carga +{ + /// + /// Componente do valor da prestação. + /// + public class comp + { + /// + /// Nome do componente (ex: "Frete Valor", "Vr Icms"). + /// + [XmlElement(ElementName = "xNome")] + public string xNome { get; set; } + + /// + /// Valor do componente. + /// + [XmlElement(ElementName = "vComp")] + public decimal vComp { get; set; } + } +} diff --git a/CTe.Classes/Simplificado/Carga/det.cs b/CTe.Classes/Simplificado/Carga/det.cs new file mode 100644 index 00000000..f4bc3e72 --- /dev/null +++ b/CTe.Classes/Simplificado/Carga/det.cs @@ -0,0 +1,70 @@ +using CTe.Classes.Simplificado.Informacoes; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Serialization; + +namespace CTe.Classes.Simplificado.Carga +{ + /// + /// Detalhamento de cada entrega/prestação do CT-e Simplificado. + /// + public class det + { + /// + /// Número do item na lista de detalhamento. + /// + [XmlAttribute(AttributeName = "nItem")] + public int nItem { get; set; } + + /// + /// Código do Município de início da prestação (IBGE). + /// + [XmlElement(ElementName = "cMunIni")] + public int cMunIni { get; set; } + + /// + /// Nome do Município do início da prestação. + /// + [XmlElement(ElementName = "xMunIni")] + public string xMunIni { get; set; } + + /// + /// Código do Município de término da prestação (IBGE). + /// + [XmlElement(ElementName = "cMunFim")] + public int cMunFim { get; set; } + + /// + /// Nome do Município do término da prestação. + /// + [XmlElement(ElementName = "xMunFim")] + public string xMunFim { get; set; } + + /// + /// Valor da Prestação do Serviço. + /// + [XmlElement(ElementName = "vPrest")] + public decimal vPrest { get; set; } + + /// + /// Valor a Receber. + /// + [XmlElement(ElementName = "vRec")] + public decimal vRec { get; set; } + + /// + /// Componentes do valor da prestação. + /// + [XmlElement(ElementName = "Comp")] + public List Comp { get; set; } + + /// + /// Informações das NF-e vinculadas à entrega. + /// + [XmlElement(ElementName = "infNFe")] + public List infNFe { get; set; } + } +} diff --git a/CTe.Classes/Simplificado/Carga/infCarga.cs b/CTe.Classes/Simplificado/Carga/infCarga.cs new file mode 100644 index 00000000..8bb7e908 --- /dev/null +++ b/CTe.Classes/Simplificado/Carga/infCarga.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Serialization; + +namespace CTe.Classes.Simplificado.Carga +{ + /// + /// Informações da carga do CT-e. + /// + public class infCarga + { + /// + /// Valor total da carga. + /// + [XmlElement(ElementName = "vCarga")] + public decimal vCarga { get; set; } + + /// + /// Produto predominante. + /// + [XmlElement(ElementName = "proPred")] + public string proPred { get; set; } + + /// + /// Detalhamento dos itens da carga. + /// + [XmlElement(ElementName = "det")] + public List det { get; set; } + } +} diff --git a/CTe.Classes/Simplificado/Informacoes/infCte.cs b/CTe.Classes/Simplificado/Informacoes/infCte.cs new file mode 100644 index 00000000..1a7f3661 --- /dev/null +++ b/CTe.Classes/Simplificado/Informacoes/infCte.cs @@ -0,0 +1,276 @@ +using CTe.Classes.Simplificado.Carga; +using DFe.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Serialization; + +namespace CTe.Classes.Simplificado.Informacoes +{ + /// + /// Informações do CT-e. + /// + public class infCte + { + /// + /// Código da UF do emitente do CT-e. Utilizar a Tabela do IBGE. + /// + [XmlElement(ElementName = "cUF")] + public int cUf { get; set; } + + /// + /// 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. + /// + [XmlElement(ElementName = "cCT")] + public string cCt { get; set; } + + /// + /// Código Fiscal de Operações e Prestações. + /// + [XmlElement(ElementName = "CFOP")] + public string cfop { get; set; } + + /// + /// Natureza da Operação. + /// + [XmlElement(ElementName = "natOp")] + public string natOp { get; set; } + + /// + /// Modelo do documento fiscal. Utilizar o código 57 para identificação do CT-e. + /// + [XmlElement(ElementName = "mod")] + public int mod { get; set; } + + /// + /// Série do CT-e. Preencher com "0" no caso de série única. + /// + [XmlElement(ElementName = "serie")] + public int serie { get; set; } + + /// + /// Número do CT-e. + /// + [XmlElement(ElementName = "nCT")] + public string nCt { get; set; } + + /// + /// Data e hora de emissão do CT-e. + /// + [XmlIgnore] + public DateTimeOffset? dhEmi { get; set; } + + /// + /// Data e hora de emissão do CT-e. Formato AAAA-MM-DDTHH:MM:DD TZD. + /// + [XmlElement(ElementName = "dhEmi")] + public string DhEmi + { + get { return dhEmi.ParaDataHoraStringUtc(); } + set { dhEmi = DateTimeOffset.Parse(value); } + } + + /// + /// Formato de impressão do DACTE. Preencher com: 1 - Retrato; 2 - Paisagem. + /// + [XmlElement(ElementName = "tpImp")] + public int tpImp { get; set; } + + /// + /// Forma de emissão do CT-e. + /// + [XmlElement(ElementName = "tpEmis")] + public int tpEmis { get; set; } + + /// + /// Dígito Verificador da chave de acesso do CT-e. + /// + [XmlElement(ElementName = "cDV")] + public int cDv { get; set; } + + /// + /// Tipo do Ambiente. Preencher com: 1 - Produção; 2 - Homologação. + /// + [XmlElement(ElementName = "tpAmb")] + public int tpAmb { get; set; } + + /// + /// Tipo do CT-e Simplificado. Preencher com: + /// 5 - CTe Simplificado; + /// 6 - Substituição CTe Simplificado. + /// + [XmlElement(ElementName = "tpCTe")] + public int tpCte { get; set; } + + /// + /// Identificador do processo de emissão do CT-e. + /// + [XmlElement(ElementName = "procEmi")] + public int procEmi { get; set; } + + /// + /// Versão do processo de emissão. + /// + [XmlElement(ElementName = "verProc")] + public string verProc { get; set; } + + /// + /// Código do Município de envio do CT-e (de onde o documento foi transmitido). Utilizar a tabela do IBGE. + /// + [XmlElement(ElementName = "cMunEnv")] + public int cMunEnv { get; set; } + + /// + /// Nome do Município de envio do CT-e (de onde o documento foi transmitido). + /// + [XmlElement(ElementName = "xMunEnv")] + public string xMunEnv { get; set; } + + /// + /// Sigla da UF de envio do CT-e (de onde o documento foi transmitido). + /// + [XmlElement(ElementName = "UFEnv")] + public string ufEnv { get; set; } + + /// + /// Modal. Preencher com: + /// 01-Rodoviário; + /// 02-Aéreo; + /// 03-Aquaviário. + /// + [XmlElement(ElementName = "modal")] + public string modal { get; set; } + + /// + /// Tipo do Serviço. Preencher com: + /// 0 - Normal; + /// 1 - Subcontratação; + /// 2 - Redespacho. + /// + [XmlElement(ElementName = "tpServ")] + public int tpServ { get; set; } + + /// + /// UF do início da prestação. + /// + [XmlElement(ElementName = "UFIni")] + public string ufIni { get; set; } + + /// + /// UF do término da prestação. + /// + [XmlElement(ElementName = "UFFim")] + public string ufFim { get; set; } + + /// + /// Indicador se o Recebedor retira no Aeroporto, Filial, Porto ou Estação de Destino. + /// Preencher com: 0 - sim; 1 - não. + /// + [XmlElement(ElementName = "retira")] + public int retira { get; set; } + + /// + /// Detalhes do retira. + /// + [XmlElement(ElementName = "detRetira")] + public string detRetira { get; set; } + + /// + /// Data e Hora da entrada em contingência. + /// + [XmlIgnore] + public DateTimeOffset? dhCont { get; set; } + + /// + /// Data e Hora da entrada em contingência. Formato AAAA-MM-DDTHH:MM:SS. + /// + [XmlElement(ElementName = "dhCont")] + public string DhCont + { + get { return dhCont.ParaDataHoraStringUtc(); } + set { dhCont = DateTimeOffset.Parse(value); } + } + + /// + /// Justificativa da entrada em contingência. + /// + [XmlElement(ElementName = "xJust")] + public string xJust { get; set; } + + /// + /// Característica adicional do transporte. + /// + [XmlElement(ElementName = "caracAd")] + public string caracAd { get; set; } + + /// + /// Característica adicional do serviço. + /// + [XmlElement(ElementName = "caracSer")] + public string caracSer { get; set; } + + /// + /// Detalhamento das entregas/prestações do CT-e Simplificado. + /// + [XmlElement(ElementName = "detEntrega")] + public List detEntrega { get; set; } + + + /// + /// Detalhamento das entregas/prestações do CT-e Simplificado. + /// + [XmlElement(ElementName = "det")] + public List det { get; set; } + + /// + /// Informações da carga do CT-e. + /// + [XmlElement(ElementName = "infCarga")] + public infCarga infCarga { get; set; } + } + + /// + /// Detalhamento das entregas/prestações do CT-e Simplificado. + /// + public class DetEntrega + { + /// + /// Código do Município de início da prestação. Utilizar a tabela do IBGE. + /// + [XmlElement(ElementName = "cMunIni")] + public int cMunIni { get; set; } + + /// + /// Nome do Município do início da prestação. + /// + [XmlElement(ElementName = "xMunIni")] + public string xMunIni { get; set; } + + /// + /// Código do Município de término da prestação. Utilizar a tabela do IBGE. + /// + [XmlElement(ElementName = "cMunFim")] + public int cMunFim { get; set; } + + /// + /// Nome do Município do término da prestação. + /// + [XmlElement(ElementName = "xMunFim")] + public string xMunFim { get; set; } + + /// + /// Valor da Prestação do Serviço. + /// + [XmlElement(ElementName = "vPrest")] + public decimal vPrest { get; set; } + + /// + /// Valor a Receber. + /// + [XmlElement(ElementName = "vRec")] + public decimal vRec { get; set; } + } +} diff --git a/CTe.Classes/Simplificado/Informacoes/infNFe.cs b/CTe.Classes/Simplificado/Informacoes/infNFe.cs new file mode 100644 index 00000000..20da548e --- /dev/null +++ b/CTe.Classes/Simplificado/Informacoes/infNFe.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Serialization; + +namespace CTe.Classes.Simplificado.Informacoes +{ + /// + /// Informações da NF-e vinculada à entrega. + /// + public class infNFe + { + /// + /// Chave de acesso da NF-e. + /// + [XmlElement(ElementName = "chNFe")] + public string chNFe { get; set; } + + /// + /// Data prevista de entrega. + /// + [XmlIgnore] + public DateTimeOffset? dPrev { get; set; } + + /// + /// Data prevista de entrega (formato AAAA-MM-DD). + /// + [XmlElement(ElementName = "dPrev")] + public string DPrev + { + get { return dPrev?.ToString("yyyy-MM-dd"); } + set { dPrev = DateTimeOffset.Parse(value); } + } + } +} diff --git a/CTe.Classes/Simplificado/cteSimp.cs b/CTe.Classes/Simplificado/cteSimp.cs new file mode 100644 index 00000000..ae6fd189 --- /dev/null +++ b/CTe.Classes/Simplificado/cteSimp.cs @@ -0,0 +1,35 @@ +using CTe.Classes.Simplificado.Informacoes; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Serialization; + +namespace CTe.Classes.Simplificado +{ + /// + /// Tipo Conhecimento de Transporte Eletrônico (Modelo 57) - Modelo Simplificado + /// + [XmlRoot("CTeSimp", Namespace = "http://www.portalfiscal.inf.br/cte")] + public class cteSimp + { + /// + /// Informações do CT-e + /// + [XmlElement("infCte")] + public infCte infCte { get; set; } + + /// + /// Versão do leiaute + /// + [XmlAttribute("versao")] + public string versao { get; set; } + + /// + /// Identificador da tag a ser assinada + /// + [XmlAttribute("Id")] + public string id { get; set; } + } +} diff --git a/CTe.Classes/cteSimpProc.cs b/CTe.Classes/cteSimpProc.cs new file mode 100644 index 00000000..80bd219e --- /dev/null +++ b/CTe.Classes/cteSimpProc.cs @@ -0,0 +1,73 @@ +using CTe.Classes.Protocolo; +using CTe.Classes.Simplificado; +using DFe.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Serialization; + +namespace CTe.Classes +{ + /// + /// CT-e Simplificado processado + /// + [XmlRoot("cteSimpProc", Namespace = "http://www.portalfiscal.inf.br/cte")] + public class cteSimpProc + { + /// + /// Representa o CT-e Simplificado + /// + [XmlElement("CTeSimp")] + public cteSimp cteSimp { get; set; } + + /// + /// Representa o protocolo do CT-e + /// + [XmlElement("protCTe")] + public protCTe protCTe { get; set; } + + /// + /// Versão do CT-e + /// + [XmlAttribute("versao")] + public string versao { get; set; } + + /// + /// IP do transmissor do documento fiscal para o ambiente autorizador + /// + [XmlAttribute("ipTransmissor")] + public string ipTransmissor { get; set; } + + /// + /// Porta de origem utilizada na conexão (De 0 a 65535) + /// + [XmlAttribute("nPortaCon")] + public string nPortaCon { get; set; } + + + [XmlIgnore] + public DateTimeOffset? dhConexao { get; set; } + + /// + /// Data e Hora da Conexão de Origem + /// + [XmlElement(ElementName = "dhConexao")] + public string DhConexao + { + get { return dhConexao.ParaDataHoraStringUtc(); } + set { dhConexao = DateTimeOffset.Parse(value); } + } + + public static cteSimpProc LoadXmlString(string xml) + { + return FuncoesXml.XmlStringParaClasse(xml); + } + + public static cteSimpProc LoadXmlArquivo(string caminhoArquivoXml) + { + return FuncoesXml.ArquivoXmlParaClasse(caminhoArquivoXml); + } + } +}