/**
   * Dado um título, cria um campo livre para o padrão do Banco do Brasil que tenha o nosso número
   * de tamanho 11.
   *
   * @param titulo título com as informações para geração do campo livre
   */
  CLBancoDoBrasilNN11(Titulo titulo) {

    super(FIELDS_LENGTH);

    ContaBancaria conta = titulo.getContaBancaria();
    String nossoNumero = titulo.getNossoNumero();

    this.add(new Field<String>(nossoNumero, 11, Filler.ZERO_LEFT));

    this.add(new Field<Integer>(conta.getAgencia().getCodigo(), 4, Filler.ZERO_LEFT));
    this.add(new Field<Integer>(conta.getNumeroDaConta().getCodigoDaConta(), 8, Filler.ZERO_LEFT));

    this.add(new Field<Integer>(conta.getCarteira().getCodigo(), 2, Filler.ZERO_LEFT));
  }
  /**
   * Dado um título, cria o campo livre do Banco Itaú para carteiras especiais.
   *
   * @param titulo título com as informações para geração do campo livre
   */
  public CLItauComCarteirasEspeciais(Titulo titulo) {
    super(FIELDS_LENGTH);

    ContaBancaria conta = titulo.getContaBancaria();

    this.add(new Field<Integer>(conta.getCarteira().getCodigo(), 3, Filler.ZERO_LEFT));
    this.add(new Field<String>(titulo.getNossoNumero(), 8, Filler.ZERO_LEFT));
    this.add(new Field<String>(titulo.getNumeroDoDocumento(), 7, Filler.ZERO_LEFT));

    // Aqui é o código do cedente, simbolizado pelo código da conta bancária.
    this.add(new Field<Integer>(conta.getNumeroDaConta().getCodigoDaConta(), 5, Filler.ZERO_LEFT));

    this.add(
        new Field<Integer>(
            calculeDigitoDoCampoLivreEspecial(
                conta.getCarteira().getCodigo(),
                titulo.getNossoNumero(),
                titulo.getNumeroDoDocumento(),
                conta.getNumeroDaConta().getCodigoDaConta()),
            1));
    this.add(new Field<Integer>(0, 1));
  }