internal override void ConteudoToProperty() { ValorTotal = 0; ImagemComprovante1aVia.Clear(); ImagemComprovante2aVia.Clear(); Debito = false; Credito = false; Digitado = false; foreach (var linha in Conteudo) { switch (linha.Identificacao) { case 29: Digitado = (linha.AsString() == "True"); break; case 100: ModalidadePagto = linha.AsString(); switch (ModalidadePagto.Substring(0, 2).ToInt32()) { case 1: Debito = true; break; case 2: Credito = true; break; } var wTipoOperacao = ModalidadePagto.Substring(2, 2).ToInt32(); switch (wTipoOperacao) { case 0: TipoOperacao = RespTipoOperacao.Avista; break; case 1: TipoOperacao = RespTipoOperacao.PreDatado; break; case 2: ParceladoPor = RespParceladoPor.Loja; TipoOperacao = RespTipoOperacao.Parcelado; break; case 3: ParceladoPor = RespParceladoPor.ADM; TipoOperacao = RespTipoOperacao.Parcelado; break; default: TipoOperacao = RespTipoOperacao.Outras; break; } break; case 101: ModalidadeExtenso = linha.AsString(); break; case 102: ModalidadePagtoDescrita = linha.AsString(); break; case 105: DataHoraTransacaoComprovante = linha.AsDateTime(); DataHoraTransacaoHost = DataHoraTransacaoComprovante; DataHoraTransacaoLocal = DataHoraTransacaoComprovante; break; case 120: Autenticacao = linha.AsString(); break; case 121: ImagemComprovante1aVia.AddRange(linha.AsString().Split(new[] { "\r\n", "\n" }, StringSplitOptions.None)); break; case 122: ImagemComprovante2aVia.AddRange(linha.AsString().Split(new[] { "\r\n", "\n" }, StringSplitOptions.None)); break; case 123: TipoTransacao = linha.AsInt32(); break; case 130: Saque = linha.AsDecimal(); ValorTotal += Saque; break; case 131: Instituicao = linha.AsString(); break; case 132: CodigoBandeiraPadrao = linha.AsString(); break; case 133: CodigoAutorizacaoTransacao = linha.AsString(); break; case 134: NSU = linha.AsString(); break; case 136: BIN = linha.AsString(); break; case 139: ValorEntradaCDC = linha.AsDecimal(); break; case 140: DataEntradaCDC = linha.AsDate(); break; case 156: Rede = linha.AsString(); break; case 501: TipoPessoa = linha.AsInt32() == 0 ? 'J' : 'F'; break; case 502: DocumentoPessoa = linha.AsString(); break; case 504: TaxaServico = linha.AsDecimal(); break; case 505: QtdParcelas = linha.AsInt32(); break; case 506: DataPreDatado = linha.AsDate(); break; case 511: QtdParcelas = linha.AsInt32(); break; // Parcelas CDC - Neste caso o campo 505 não é retornado case 515: DataHoraTransacaoCancelada = linha.AsDate(); break; case 516: NSUTransacaoCancelada = linha.AsString(); break; case 527: DataVencimento = linha.AsDate(); break; case 589: CodigoOperadoraCelular = linha.AsString(); break; case 590: NomeOperadoraCelular = linha.AsString(); break; case 591: ValorRecargaCelular = linha.AsDecimal(); break; case 592: NumeroRecargaCelular = linha.AsString(); break; case 607: var wNumCb = linha.AsInt32(); if (wNumCb == 1) { CorrespBancarios.Clear(); } var cb = CorrespBancarios.AddNew(); cb.DataVencimento = LeInformacao(600, wNumCb).AsDate(); // Data Vencimento do título - CB cb.ValorPago = LeInformacao(601, wNumCb).AsDecimal(); // Valor Pago do título - CB cb.ValorOriginal = LeInformacao(602, wNumCb).AsDecimal(); // Valor Original do título - CB cb.Acrescimo = LeInformacao(603, wNumCb).AsDecimal(); // Valor do Acréscimo - CB cb.Desconto = LeInformacao(604, wNumCb).AsDecimal(); // Valor do Desconto - CB cb.DataPagamento = LeInformacao(605, wNumCb).AsDate(); // Data contábil do Pagamento - CB cb.NSUTransacaoCB = LeInformacao(611, wNumCb).AsString(); // NSU da Transação CB cb.TipoDocumento = LeInformacao(612, wNumCb).AsInt32(); // Tipo Docto CB - 0:Arrecadação / 1:Título / 2:Tributo cb.NSUCancelamento = LeInformacao(623, wNumCb).AsString(); // NSU para cancelamento - CB cb.Documento = LeInformacao(624, wNumCb).AsString(); // Linha Digitável/ Código de Barras do documento pago break; case 609: CorrespBancarios.TotalTitulos = linha.AsDecimal(); break; case 610: CorrespBancarios.TotalTitulosNaoPago = linha.AsDecimal(); break; case 613: Cheque = linha.AsString().Substring(20, 6); CMC7 = linha.AsString(); break; case 626: Banco = linha.AsString(); break; case 627: Agencia = linha.AsString(); break; case 628: AgenciaDC = linha.AsString(); break; case 629: Conta = linha.AsString(); break; case 630: ContaDC = linha.AsString(); break; case 899: // Tipos de Uso Interno do ACBrTEF switch (linha.Sequencia) { case 1: CNFEnviado = linha.AsString().ToUpper() == "S"; break; case 2: IndicePagamento = linha.AsString(); break; case 3: OrdemPagamento = linha.AsInt32(); break; case 102: DocumentoVinculado = linha.AsString(); break; case 103: ValorTotal += linha.AsDecimal(); break; case 500: IdPagamento = linha.AsInt32(); break; case 501: IdRespostaFiscal = linha.AsInt32(); break; case 502: SerialPOS = linha.AsString(); break; case 503: Estabelecimento = linha.AsString(); break; } break; case 950: NFCeSAT.CNPJCredenciadora = linha.AsString(); break; case 951: NFCeSAT.Bandeira = linha.AsString(); break; case 952: NFCeSAT.Autorizacao = linha.AsString(); break; case 953: NFCeSAT.CodCredenciadora = linha.AsString(); break; case 1002: NFCeSAT.DataExpiracao = linha.AsString(); break; case 1003: NFCeSAT.DonoCartao = linha.AsString(); break; case 1190: NFCeSAT.UltimosQuatroDigitos = linha.AsString(); break; case 4029: Desconto = linha.AsDecimal(); ValorTotal -= Desconto; break; } } QtdLinhasComprovante = Math.Max(ImagemComprovante1aVia.Count, ImagemComprovante2aVia.Count); // leitura de parcelas conforme nova documentação // 141 e 142 foram removidos em Setembro de 2014 Parcelas.Clear(); if (QtdParcelas < 1) { return; } var wValParc = (ValorTotal / QtdParcelas).RoundABNT(); var wTotalParc = 0M; for (var i = 0; i < QtdParcelas - 1; i++) { var parcela = Parcelas.AddNew(); if (i == 1) { var vencimento = LeInformacao(140, i).AsDate(); if (vencimento == DateTime.MinValue) { vencimento = DataHoraTransacaoHost.Value.AddDays(i * 30); } parcela.Vencimento = vencimento; parcela.Valor = LeInformacao(524, i).AsDecimal(); } else { var vencimento = LeInformacao(140, i).AsDate(); vencimento = vencimento == DateTime.MinValue ? DataHoraTransacaoHost.Value.AddDays(i * 30) : vencimento.AddDays(LeInformacao(508, i).AsInt32()); parcela.Vencimento = vencimento; parcela.Valor = LeInformacao(525, i).AsDecimal(); } if (parcela.Valor > 0) { continue; } if (i == QtdParcelas) { wValParc = ValorTotal - wTotalParc; } else { wTotalParc = wTotalParc + wValParc; } parcela.Valor = wValParc; } }
/// <summary> /// Passa o conteudo do arquivo para as propriedades da classe /// </summary> internal override void ConteudoToProperty() { DataHoraTransacaoComprovante = null; ImagemComprovante1aVia.Clear(); ImagemComprovante2aVia.Clear(); var usar711 = false; var usar713 = false; var usar715 = false; var temParcela = false; var usar29 = false; foreach (var linha in Conteudo.OrderBy(x => x.Chave)) { switch (linha.Identificacao) { case 0: Header = linha.AsString(); break; case 1: Id = linha.AsInt32(); break; case 2: DocumentoVinculado = linha.AsString(); break; case 3: ValorTotal = linha.AsDecimal(); break; case 4: Moeda = linha.AsInt32(); break; case 5: CMC7 = linha.AsString(); break; case 6: TipoPessoa = linha.AsString()[0]; break; case 7: DocumentoPessoa = linha.AsString(); break; case 8: DataCheque = linha.AsDate(); break; case 9: StatusTransacao = linha.AsString(); break; case 10: Rede = linha.AsString(); BIN = linha.AsString(); NFCeSAT.UltimosQuatroDigitos = linha.AsString(); break; case 11: TipoTransacao = linha.AsInt32(); break; case 12: NSU = linha.AsString(); break; case 13: CodigoAutorizacaoTransacao = linha.AsString(); break; case 14: NumeroLoteTransacao = linha.AsInt32(); break; case 15: DataHoraTransacaoHost = linha.AsDateTime(); break; case 16: DataHoraTransacaoLocal = linha.AsDateTime(); break; case 17: TipoParcelamento = linha.AsInt32(); switch (TipoParcelamento) { case 0: ParceladoPor = RespParceladoPor.Loja; break; case 1: ParceladoPor = RespParceladoPor.ADM; break; default: ParceladoPor = RespParceladoPor.Nenhum; break; } break; case 18: QtdParcelas = linha.AsInt32(); break; case 19: temParcela = true; break; case 22: DataHoraTransacaoComprovante = linha.AsDate(); break; case 23: DataHoraTransacaoComprovante = DataHoraTransacaoComprovante + linha.AsTime(); break; case 24: DataPreDatado = linha.AsDate(); break; case 25: NSUTransacaoCancelada = linha.AsString(); break; case 26: DataHoraTransacaoCancelada = linha.AsDateTime(); break; case 27: Finalizacao = linha.AsString(); break; case 28: if (!(usar711 || usar713)) { ImagemComprovante1aVia.Clear(); QtdLinhasComprovante = linha.AsInt32(); } if (!usar715) { ImagemComprovante2aVia.Clear(); } if (linha.Sequencia == 1) { usar29 = true; ImagemComprovante1aVia.Clear(); QtdLinhasComprovante = linha.AsInt32(); ImagemComprovante2aVia.Clear(); } break; case 29: if (usar29) { if (linha.Sequencia <= QtdLinhasComprovante) { ImagemComprovante1aVia.Add(linha.AsLinhaComprovante()); } else { ImagemComprovante2aVia.Add(linha.AsLinhaComprovante()); } } else { if (!(usar711 || usar713)) { ImagemComprovante1aVia.Add(linha.AsLinhaComprovante()); } if (!usar715) { ImagemComprovante2aVia.Add(linha.AsLinhaComprovante()); } } break; case 30: TextoEspecialOperador = linha.AsString(); break; case 31: TextoEspecialCliente = linha.AsString(); break; case 32: Autenticacao = linha.AsString(); break; case 33: Banco = linha.AsString(); break; case 34: Agencia = linha.AsString(); break; case 35: AgenciaDC = linha.AsString(); break; case 36: Conta = linha.AsString(); break; case 37: ContaDC = linha.AsString(); break; case 38: Cheque = linha.AsString(); break; case 39: ChequeDC = linha.AsString(); break; case 40: NomeAdministradora = linha.AsString(); break; case 131: Instituicao = linha.AsString(); break; case 132: CodigoBandeiraPadrao = linha.AsString(); break; case 136: BIN = linha.AsString(); break; case 300: switch (linha.Sequencia) { case 1: NFCeSAT.DataExpiracao = linha.AsString(); break; case 2: NFCeSAT.DonoCartao = linha.AsString(); break; } break; case 600: NFCeSAT.CNPJCredenciadora = linha.AsString(); break; case 601: NFCeSAT.Bandeira = linha.AsString(); break; case 602: NFCeSAT.Autorizacao = linha.AsString(); break; case 603: NFCeSAT.CodCredenciadora = linha.AsString(); break; case 707: ValorOriginal = linha.AsDecimal(); break; case 708: Saque = linha.AsDecimal(); break; case 709: Desconto = linha.AsDecimal(); break; case 710: if (linha.AsInt32() > 0 && ViaClienteReduzida) { usar711 = true; ImagemComprovante1aVia.Clear(); QtdLinhasComprovante = linha.AsInt32(); } break; case 711: if (usar711) { ImagemComprovante1aVia.Add(linha.AsLinhaComprovante()); } break; case 712: if (linha.AsInt32() > 0 && !ViaClienteReduzida) { usar713 = true; ImagemComprovante1aVia.Clear(); QtdLinhasComprovante = linha.AsInt32(); } break; case 713: if (usar713) { ImagemComprovante1aVia.Add(linha.AsLinhaComprovante()); } break; case 714: if (linha.AsInt32() > 0) { usar715 = true; ImagemComprovante2aVia.Clear(); } break; case 715: if (usar715) { ImagemComprovante2aVia.Add(linha.AsLinhaComprovante()); } break; case 899: // Tipos de Uso Interno do ACBrTEF switch (linha.Sequencia) { case 1: CNFEnviado = linha.AsString().ToUpper() == "S"; break; case 2: IndicePagamento = linha.AsString(); break; case 3: OrdemPagamento = linha.AsInt32(); break; case 103: ValorTotal += linha.AsDecimal(); break; case 500: IdPagamento = linha.AsInt32(); break; case 501: IdRespostaFiscal = linha.AsInt32(); break; case 502: SerialPOS = linha.AsString(); break; case 503: Estabelecimento = linha.AsString(); break; } break; case 999: Trailer = linha.AsString(); break; } Parcelas.Clear(); if (temParcela) { for (var i = 1; i <= QtdParcelas; i++) { var parcela = new RespParcela { Vencimento = LeInformacao(19, i).AsDate(), Valor = LeInformacao(20, i).AsDecimal(), NSUParcela = LeInformacao(21, i).AsString() }; Parcelas.Add(parcela); } } Debito = (TipoTransacao >= 20 && TipoTransacao <= 25) || (TipoTransacao == 40); Credito = (TipoTransacao >= 10 && TipoTransacao <= 12); switch (TipoTransacao) { case 10: case 20: case 23: TipoOperacao = RespTipoOperacao.Avista; break; case 11: case 12: case 22: TipoOperacao = RespTipoOperacao.Parcelado; break; case 21: case 24: case 25: TipoOperacao = RespTipoOperacao.PreDatado; DataPreDatado = LeInformacao(24).AsDate(); break; case 40: TipoOperacao = RespTipoOperacao.Parcelado; ParceladoPor = RespParceladoPor.ADM; break; default: TipoOperacao = RespTipoOperacao.Outras; break; } } }