예제 #1
0
        /// <summary>
        /// A linha digitável será composta por cinco campos:
        ///      1º campo
        ///          composto pelo código de Banco, código da moeda, as cinco primeiras posições do campo
        ///          livre e o dígito verificador deste campo;
        ///      2º campo
        ///          composto pelas posições 6ª a 15ª do campo livre e o dígito verificador deste campo;
        ///      3º campo
        ///          composto pelas posições 16ª a 25ª do campo livre e o dígito verificador deste campo;
        ///      4º campo
        ///          composto pelo dígito verificador do código de barras, ou seja, a 5ª posição do código de
        ///          barras;
        ///      5º campo
        ///          Composto pelo fator de vencimento com 4(quatro) caracteres e o valor do documento com 10(dez) caracteres, sem separadores e sem edição.
        ///
        /// </summary>
        public override void FormataLinhaDigitavel(Boleto boleto)
        {
            //BBBMC.CCCCD1 CCCCC.CCCCCD2 CCCCC.CCCCCD3 D4 FFFFVVVVVVVVVV

            #region Campo 1

            string Grupo1 = string.Empty;

            string BBB   = boleto.CodigoBarra.Codigo.Substring(0, 3);
            string M     = boleto.CodigoBarra.Codigo.Substring(3, 1);
            string CCCCC = boleto.CodigoBarra.Codigo.Substring(19, 5);
            string D1    = Banco_Unibanco.Mod10(BBB + M + CCCCC).ToString();

            Grupo1 = string.Format("{0}{1}{2}.{3}{4} ", BBB, M, CCCCC.Substring(0, 1), CCCCC.Substring(1, 4), D1);


            #endregion Campo 1

            #region Campo 2

            string Grupo2 = string.Empty;

            string CCCCCCCCCC2 = boleto.CodigoBarra.Codigo.Substring(24, 10);
            string D2          = Banco_Unibanco.Mod10(CCCCCCCCCC2).ToString();

            Grupo2 = string.Format("{0}.{1}{2} ", CCCCCCCCCC2.Substring(0, 5), CCCCCCCCCC2.Substring(5, 5), D2);

            #endregion Campo 2

            #region Campo 3

            string Grupo3 = string.Empty;

            string CCCCCCCCCC3 = boleto.CodigoBarra.Codigo.Substring(34, 10);
            string D3          = Banco_Unibanco.Mod10(CCCCCCCCCC3).ToString();

            Grupo3 = string.Format("{0}.{1}{2} ", CCCCCCCCCC3.Substring(0, 5), CCCCCCCCCC3.Substring(5, 5), D3);


            #endregion Campo 3

            #region Campo 4

            string Grupo4 = string.Empty;

            string D4 = _dacBoleto.ToString();

            Grupo4 = string.Format("{0} ", D4);

            #endregion Campo 4

            #region Campo 5

            string Grupo5 = string.Empty;

            long FFFF = FatorVencimento(boleto);

            string VVVVVVVVVV = boleto.ValorBoleto.ToString("f").Replace(",", "").Replace(".", "");
            VVVVVVVVVV = Utils.FormatCode(VVVVVVVVVV, 10);

            if (Utils.ToInt64(VVVVVVVVVV) == 0)
            {
                VVVVVVVVVV = "000";
            }

            Grupo5 = string.Format("{0}{1}", FFFF, VVVVVVVVVV);

            #endregion Campo 5

            boleto.CodigoBarra.LinhaDigitavel = Grupo1 + Grupo2 + Grupo3 + Grupo4 + Grupo5;
        }
예제 #2
0
        public override void ValidaBoleto(Boleto boleto)
        {
            //Verifica se o nosso número é válido
            //Verifica se o tamanho para o NossoNumero são 12 dígitos
            if (Utils.ToString(boleto.NossoNumero) == string.Empty)
            {
                throw new NotImplementedException("Nosso número inválido");
            }
            else if (Convert.ToInt32(boleto.NossoNumero).ToString().Length > 14)
            {
                throw new NotImplementedException("A quantidade de dígitos do nosso número são 14 números.");
            }
            else if (Convert.ToInt32(boleto.NossoNumero).ToString().Length < 14)
            {
                boleto.NossoNumero = Utils.FormatCode(boleto.NossoNumero, 14);
            }

            //Verificar se a Agencia esta correta
            if (boleto.Cedente.ContaBancaria.Agencia.Length > 4)
            {
                throw new NotImplementedException("A quantidade de dígitos da Agência " + boleto.Cedente.ContaBancaria.Agencia + ", são de 4 números.");
            }
            else if (boleto.Cedente.ContaBancaria.Agencia.Length < 4)
            {
                boleto.Cedente.ContaBancaria.Agencia = Utils.FormatCode(boleto.Cedente.ContaBancaria.Agencia, 4);
            }

            //Verificar se a Conta esta correta
            if (boleto.Cedente.ContaBancaria.Conta.Length > 6)
            {
                throw new NotImplementedException("A quantidade de dígitos da Conta " + boleto.Cedente.ContaBancaria.Conta + ", são de 6 números.");
            }
            else if (boleto.Cedente.ContaBancaria.Conta.Length < 6)
            {
                boleto.Cedente.ContaBancaria.Conta = Utils.FormatCode(boleto.Cedente.ContaBancaria.Conta, 6);
            }

            //Atribui o nome do banco ao local de pagamento
            boleto.LocalPagamento += Nome;

            //Verifica se data do processamento é valida
            //if (boleto.DataProcessamento.ToString("dd/MM/yyyy") == "01/01/0001")
            if (boleto.DataProcessamento == DateTime.MinValue)             // diegomodolo ([email protected])
            {
                boleto.DataProcessamento = DateTime.Now;
            }

            //Verifica se data do documento é valida
            //if (boleto.DataDocumento.ToString("dd/MM/yyyy") == "01/01/0001")
            if (boleto.DataDocumento == DateTime.MinValue)             // diegomodolo ([email protected])
            {
                boleto.DataDocumento = DateTime.Now;
            }

            if (boleto.Carteira != "20")
            {
                throw new NotImplementedException("Carteira não implementada: " + boleto.Carteira + ". Utilize a carteira 20.");
            }

            //Boleto.QuantidadeMoeda = 0;

            FormataCodigoBarra(boleto);
            FormataLinhaDigitavel(boleto);
            FormataNossoNumero(boleto);
        }
예제 #3
0
 public override void FormataNossoNumero(Boleto boleto)
 {
     boleto.NossoNumero = string.Format("{0}{1}{2}", boleto.Categoria, boleto.NossoNumero, Utils.FormatCode(Codigo.ToString(), 3) + boleto.CodigoBarra.Chave.Substring(23, 2));
 }
예제 #4
0
        public override void FormataLinhaDigitavel(Boleto boleto)
        {
            string BBB    = Utils.FormatCode(Codigo.ToString(), 3);
            int    M      = boleto.Moeda;
            string CCCCC1 = boleto.CodigoBarra.Chave.Substring(0, 5);
            int    D1     = 0;

            string CCCCCCCCCC2 = boleto.CodigoBarra.Chave.Substring(5, 10);
            int    D2          = 0;

            string CCCCCCCCCC3 = boleto.CodigoBarra.Chave.Substring(15, 10);
            int    D3          = 0;

            D1 = Mod10(BBB + M + CCCCC1);
            string Grupo1 = string.Format("{0}.{1}{2} ", BBB + M + CCCCC1.Substring(0, 1), CCCCC1.Substring(1, 4), D1);

            D2 = Mod10(CCCCCCCCCC2);
            string Grupo2 = string.Format("{0}.{1}{2} ", CCCCCCCCCC2.Substring(0, 5), CCCCCCCCCC2.Substring(5, 5), D2);

            D3 = Mod10(CCCCCCCCCC3);
            string Grupo3 = string.Format("{0}.{1}{2} ", CCCCCCCCCC3.Substring(0, 5), CCCCCCCCCC3.Substring(5, 5), D3);

            string Grupo4 = string.Format("{0} {1}{2}", _dacBoleto, FatorVencimento(boleto).ToString(), Utils.FormatCode(boleto.ValorBoleto.ToString("f").Replace(",", "").Replace(".", ""), 10));

            boleto.CodigoBarra.LinhaDigitavel = Grupo1 + Grupo2 + Grupo3 + Grupo4;
        }
예제 #5
0
        public override DetalheRetorno LerDetalheRetornoCNAB400(string registro)
        {
            try
            {
                DetalheRetorno detalhe = new DetalheRetorno(registro);

                //Tipo de Identificação do registro
                detalhe.IdentificacaoDoRegistro = Utils.ToInt32(registro.Substring(0, 1));

                //Tipo de inscrição
                detalhe.TipoInscricao = Utils.ToInt32(registro.Substring(1, 2));

                //CGC ou CPF
                detalhe.CgcCpf = registro.Substring(3, 14);

                //Conta Corrente
                detalhe.ContaCorrente = Utils.ToInt32(registro.Substring(20, 17));

                //Nosso Número
                detalhe.NossoNumeroComDV = registro.Substring(70, 12);
                detalhe.NossoNumero      = registro.Substring(70, 11); //Sem o DV
                detalhe.DACNossoNumero   = registro.Substring(82, 1);  //DV
                //Seu Número
                detalhe.SeuNumero = registro.Substring(92, 13);

                //Instrução
                detalhe.Instrucao = Utils.ToInt32(registro.Substring(108, 2));

                //Número do documento
                detalhe.NumeroDocumento = registro.Substring(128, 12);

                //Código do Raterio
                detalhe.CodigoRateio = Utils.ToInt32(registro.Substring(140, 4));

                //Data Ocorrência no Banco
                int dataOcorrencia = Utils.ToInt32(registro.Substring(110, 8));
                detalhe.DataOcorrencia = Utils.ToDateTime(dataOcorrencia.ToString("##-##-####"));

                //Data Vencimento do Título
                int dataVencimento = Utils.ToInt32(registro.Substring(148, 8));
                detalhe.DataVencimento = Utils.ToDateTime(dataVencimento.ToString("##-##-####"));

                //Valor do Título
                decimal valorTitulo = Convert.ToInt64(registro.Substring(156, 13));
                detalhe.ValorTitulo = valorTitulo / 100;

                //Banco Cobrador
                detalhe.BancoCobrador = Utils.ToInt32(registro.Substring(163, 3));

                //Agência Cobradora
                detalhe.AgenciaCobradora = Utils.ToInt32(registro.Substring(172, 5));

                //Espécie Título
                detalhe.EspecieTitulo = registro.Substring(177, 2);

                //Despesas de cobrança para os Códigos de Ocorrência (Valor Despesa)
                decimal despeasaDeCobranca = Convert.ToUInt64(registro.Substring(179, 13));
                detalhe.DespeasaDeCobranca = despeasaDeCobranca / 100;

                //Outras despesas Custas de Protesto (Valor Outras Despesas)
                decimal outrasDespesas = Convert.ToUInt64(registro.Substring(192, 13));
                detalhe.OutrasDespesas = outrasDespesas / 100;

                //Juros Mora
                decimal juros = Convert.ToUInt64(registro.Substring(205, 13));
                detalhe.Juros = juros / 100;

                // IOF
                decimal iof = Convert.ToUInt64(registro.Substring(218, 13));
                detalhe.IOF = iof / 100;

                //Abatimento Concedido sobre o Título (Valor Abatimento Concedido)
                decimal abatimento = Convert.ToUInt64(registro.Substring(231, 13));
                detalhe.Abatimentos = abatimento / 100;

                //Desconto Concedido (Valor Desconto Concedido)
                decimal desconto = Convert.ToUInt64(registro.Substring(244, 13));
                detalhe.Descontos = desconto / 100;

                //Valor Pago
                decimal valorPago = Convert.ToUInt64(registro.Substring(257, 13));
                detalhe.ValorPago = valorPago / 100;

                //Outros Débitos
                decimal outrosDebitos = Convert.ToUInt64(registro.Substring(270, 13));
                detalhe.OutrosDebitos = outrosDebitos / 100;

                //Outros Créditos
                decimal outrosCreditos = Convert.ToUInt64(registro.Substring(283, 13));
                detalhe.OutrosCreditos = outrosCreditos / 100;

                // Data de Liquidação
                int dataLiquidacao = Utils.ToInt32(registro.Substring(299, 8));
                detalhe.DataLiquidacao = Utils.ToDateTime(dataLiquidacao.ToString("##-##-####"));

                //Motivo de Rejeição
                detalhe.MotivosRejeicao = registro.Substring(364, 30);

                //Motivo de Rejeição
                detalhe.Sequencial = Utils.ToInt32(registro.Substring(394, 6));

                return(detalhe);
            }
            catch (Exception ex)
            {
                throw new Exception("Erro ao ler detalhe do arquivo de RETORNO / CNAB 400.", ex);
            }
        }
예제 #6
0
        /// <summary>
        /// A linha digitável será composta por cinco campos:
        ///    1º CAMPO - Composto pelo código do banco ( sem o dígito verificador = 422 ), 
        ///       código da moeda, as cinco primeiras posições do campo livre ou seja, da 
        ///       posição 20 à 24 do código de barras, e mais um dígito verificador deste campo. 
        ///       Após os 5 primeiros dígitos deste campo separar o conteúdo por um ponto ( . ). 
        ///    2º CAMPO - Composto pelas posições 6 à 15 do campo livre ou seja, da 
        ///       posição 25 à 34 do código de barras e mais um dígito verificador deste campo. 
        ///       Após os 5 primeiros dígitos deste campo separar o conteúdo por um ponto ( . ).
        ///    3º CAMPO - Composto pelas posições 16 à 25 do campo livre ou seja, da 
        ///       posição 35 à 44 do código de barras, e mais um dígito verificador deste campo. 
        ///       Após os 5 primeiros dígitos deste campo separar o conteúdo por um ponto ( . ).
        ///    4º CAMPO  - Composto pelo dígito de autoconferência do código de barras.
        ///    5º CAMPO - Composto pelo valor nominal do documento ou seja, pelas 
        ///       posições 06 à 19 do código de barras, com supressão de zeros a esquerda e 
        ///       sem edição ( sem ponto e vírgula ). Quando se tratar de valor zerado, a 
        ///       representação deverá ser 000 ( três zeros ).
        /// </summary>
        public override void FormataLinhaDigitavel(Boleto boleto)
        {

            //AAABC.CCCCX DDDDD.DDDDDY EEEEE.EEEEEZ K VVVVVVVVVVVVVV

            string LD = string.Empty; //Linha Digitável

            #region Campo 1

            //Campo 1
            string AAA = Utils.FormatCode(Codigo.ToString(), 3);
            string B = boleto.Moeda.ToString();
            string CCCCC = CampoLivre(boleto).Substring(0, 4);
            string X = Mod10(AAA + B + CCCCC).ToString();

            LD = string.Format("{0}{1}{2}.", AAA, B, CCCCC.Substring(0, 1));
            LD += string.Format("{0}{1}", CCCCC.Substring(0, 4), X);

            #endregion Campo 1

            #region Campo 2

            string DDDDDD = CampoLivre(boleto).Substring(6, 15);
            string Y = Mod10(DDDDDD).ToString();

            LD += string.Format("{0}.", DDDDDD.Substring(0, 5));
            LD += string.Format("{0}{1} ", DDDDDD.Substring(5, 10), Y);

            #endregion Campo 2

            #region Campo 3

            string EEEEE = CampoLivre(boleto).Substring(12, 10);
            string Z = Mod10(EEEEE).ToString();

            LD += string.Format("{0}.", EEEEE.Substring(0, 5));
            LD += string.Format("{0}{1} ", EEEEE.Substring(5, 5), Z);

            #endregion Campo 3

            #region Campo 4

            string K = _dacBoleto.ToString();

            LD += string.Format(" {0} ", K);

            #endregion Campo 4

            #region Campo 5
            string VVVVVVVVVVVVVV;
            if (boleto.ValorBoleto != 0)
            {
                VVVVVVVVVVVVVV = boleto.ValorBoleto.ToString("f").Replace(",", "").Replace(".", "");
                VVVVVVVVVVVVVV = Utils.FormatCode(VVVVVVVVVVVVVV, 14);
            }
            else
                VVVVVVVVVVVVVV = "000";

            LD += VVVVVVVVVVVVVV;

            #endregion Campo 5

            boleto.CodigoBarra.LinhaDigitavel = LD;

        }