Skip to content

Quero Ajudar

klawdyo edited this page May 29, 2011 · 6 revisions

Para ajudar o projeto ObjectBoleto é simples, não requer prática, nem tampouco habilidade. A comunidade open-source desenvolveu-se a partir de ideias e pessoas que acreditaram nelas.

Aos contribuidores, todos os nomes, e-mails e endereços das webpages dos que se propuserem a ajudar irão parar na página inicial desse repositório, dentro do arquivo README, formatados como link.

Quero adicionar um banco. Comofas?

Para adicionar um novo banco é tão simples, que nem precisaria de um tutorial. A hierarquia do ObjectBoleto permite que sejam herdadas a maioria das configurações e métodos que você pode precisar.

Particularidades

Criar um sistema que objetiva unificar a criação de todos os boletos bancários é um desafio, pois cada banco tem uma particularidade, algumas ridículas, diga-se de passagem.

A geração do código de barras é padronizada pela Febraban somente entre os caracteres 1 e 19, os demais ficam a cargo de cada banco, que usam e abusam das mais bizarras ideias para complicar a nossa vida.

O banco Banrisul, por exemplo, acrescenta na posição 43 a 44 do código de barras um dígito duplo que é calculado baseado nos números da posição 20 a 42.

Já o HSBC, em sua carteira 4, usa ao final do código a data do vencimento em formato Juliano com 4 caracteres.

O Banco do Nordeste inclui no meio do código de barras, dígitos verificadores para o Nosso Número e para a Conta do Cedente.

O Itaú faz uso de um dígito verificador que concatena agência, conta, nosso número e a carteira, e depois outro dígito verificador só com a agência e a conta.

E assim por diante.

Criando um layout

Inicialmente, vamos escolher o banco para criar. Bancoob, um dos mais simples, é o meu escolhido. Após definir um banco para criar o layout, precisamos seguir alguns passos.

  1. Em lib/core/Banco.php, vamos procurar a propriedade Banco::$relacoes, e verificar se o Bancoob já se encontra definido nela. Banco::$relacoes armazena as ligações entre os códigos dos bancos e os seus respectivos arquivos de layout dentro do sistema.

lib/core/Banco.php

<?php
class Banco{
   public $relacoes = array(
      '001' => 'BB',
      '104' => 'Caixa',
      '237' => 'Bradesco'
   );
  1. Agora, vamos verificar se a imagem do logotipo referente ao banco escolhido já existe em /public/images. Caso exista, vamos para o próximo passo.

  2. Crio o arquivo /lib/bancos/Bancoob.php É interessante a manutenção do padrão das letras maiúsculas no nome do arquivo e nome da classe que vamos criar

<?php
   class Bancoob extends Banco{
      //Indico a imagem do banco
      public $Image = 'bancoob.png';
      //Indico o nome do banco
      public $Nome = 'Bancoob S/A';
      /*
          1   5   10   15   20   25   30   35   40  44
          |   |    |    |    |    |    |    |    |   |
          75692100100000550002010001000000111228563001     
          └-┘↓↓└--┘└--------┘↓└--┘└┘└-----┘└┘└----┘└-┘
           | ||  |     |     | |  |    |   |   |    └--- Número da Parcela do boleto
           | ||  |     |     | |  |    |   |   └-------- Nosso número       
           | ||  |     |     | |  |    |   └------------ Ano da emisão
           | ||  |     |     | |  |    └---------------- Código do Cedente                
           | ||  |     |     | |  └--------------------- Modalidade de cobrança (01)
           | ||  |     |     | └------------------------ Agência
           | ||  |     |     └-------------------------- Carteira
           | ||  |     └-------------------------------- Valor
           | ||  └-------------------------------------- Fator de Vencimento
           | |└----------------------------------------- Dígito do código de barras
           | └------------------------------------------ Código da moeda
           └-------------------------------------------- Código do banco

        Indico os tamanhos de cada um dos campos dentro do código de barras.
        A partir dessas informações, o ObjectBoleto vai tratar todos os dados necessários
        para a geração do código, sem interferência
    */
    public $tamanhos = array(
        #Campos comuns a todos os bancos
        'Banco'             => 3,  //identificação do banco
        'Moeda'             => 1,  //Código da moeda: real=9
        'DV'                => 1,  //Dígito verificador geral da linha digitável
        'FatorVencimento'   => 4,  //Fator de vencimento (Dias passados desde 7/out/1997)
        'Valor'             => 10, //Valor nominal do título
        #Campos variávies. Cada banco tem o seu padrão. Alguns mudam tudo.
        'Carteira'          => 1,  
        'Agencia'           => 4,  
        'ModalidadeCobranca'=> 2,
        'CodigoCedente'     => 7,  
        'AnoEmissao'        => 2,  
        'NossoNumero'       => 6,  //Nosso número //São 8 números, mas os 2 primeiros são sempre referente ao ano de emissão do boleto. Exemplo: 2011, todos os nossos números devem iniciar com 11
        'NumParcela'        => 3,
    );
        /*
            Layout do código de barras. Posição das variáveis durante a geração.
            Os nomes das variávei devem ser iguais às informadas no array $relacoes, e 
            sempre devem iniciar com dois-pontos (:).
        */
        public $layoutCodigoBarras = ':Banco:Moeda:FatorVencimento:Valor:Carteira:Agencia:ModalidadeCobranca:CodigoCedente:AnoEmissao:NossoNumero:NumParcela';
       }
        /**
          * particularidade() Faz em tempo de execução mudanças que sejam imprescindíveis
          * para a geração correta do código de barras, acrescentando ou alterando dados
          * que não são usados pelos outros bancos, nem são recebidos durante a configuração
          * do boleto.
          * Particularmente para o Bancoob, temos os campos NumParcela, AnoEmissao e ModalidadeCobranca.
          *
          * @version 0.1 28/05/2011 Initial
          * 
          * @param object $object Objeto completo do sistema. particularidade() recebe por referência
          *       o objeto utilizado pelo sistema inteiro, tendo acesso a todos os dados já inseriridos
          *       e métodos de todas as classes carregadas.
          */
        public function particularidade($object){
            $object->Data['NumParcela'] = OB::zeros($object->Boleto->NumParcela, 3);
            $object->Data['AnoEmissao'] = date('y');
            $object->Data['ModalidadeCobranca'] = '01';
        }

Pronto. Acabamos de adicionar um novo layout para o sistema ObjectBoleto. Todo o restante do trabalho duro fica por conta do sistema. Só precisamos indicar as especificidades

Não programo muito bem... Como faço pra ajudar?

  1. Para ajudar, você só precisa querer. Por exemplo. Se na sua cidade tem agência do Bancoob, você pode imprimir algumas unidades dos boletos do Bancoob que acabamos de criar, levar lá e pedir para homologar.

  2. Se não tem Bancoob, mas tem, por exemplo, Banco da Amazônia, que é um banco que ainda não foi adicionado, você pode ir lá e pedir os arquivos do layout para que possamos adicionar esse banco também.

  3. Se não tiver banco na sua cidade, você pode ajudar divulgando o projeto em fóruns e colhendo mais pessoas interessadas em contribuir.

E lembre-se: Participar de projetos open-source é a forma mais rápida e interessante de criar experiência e amor pela programação. Não precisa ser fera em PHP. Todos, um dia, tiveram que começar do zero. O mais importante é ter força de vontade e se dispor a ajudar da melhor maneira possível.