All Downloads are FREE. Search and download functionalities are using the official Maven repository.

br.com.caelum.stella.boleto.bancos.BancoDoBrasil Maven / Gradle / Ivy

There is a newer version: 2.1.7
Show newest version
package br.com.caelum.stella.boleto.bancos;

import br.com.caelum.stella.boleto.Banco;
import br.com.caelum.stella.boleto.Beneficiario;
import br.com.caelum.stella.boleto.Boleto;
import br.com.caelum.stella.boleto.exception.CriacaoBoletoException;
import static br.com.caelum.stella.boleto.utils.StellaStringUtils.leftPadWithZeros;

/**
 * Gera dados de um boleto relativos ao Banco do Brasil.
 * 
 * @author Cauê Guerra
 * @author Paulo Silveira
 */
public class BancoDoBrasil extends AbstractBanco implements Banco {

	private static final long serialVersionUID = 1L;

	private static final String NUMERO_BB = "001";
	private static final String DIGITO_NUMERO_BB = "9";
	private static final String CARTEIRA_16 = "16";
	private static final String CARTEIRA_17 = "17";
	private static final String CARTEIRA_18 = "18";
	private static final String ZEROS_CONVENIOS_NOVOS = "000000";
	private static final String TIPO_MODALIDADE_COBRANCA_CARTEIRA_SEM_REGISTRO = "21";


	@Override
	public String geraCodigoDeBarrasPara(Boleto boleto) {
		StringBuilder campoLivre = new StringBuilder();
		Beneficiario beneficiario = boleto.getBeneficiario();
		
		if (convenioAntigo(beneficiario.getNumeroConvenio())) {
			if (beneficiario.getCarteira().equals(CARTEIRA_16) || beneficiario.getCarteira().equals(CARTEIRA_18)) {
				campoLivre.append(getNumeroConvenioFormatado(beneficiario));
				campoLivre.append(getNossoNumeroFormatado(beneficiario));
				campoLivre.append(TIPO_MODALIDADE_COBRANCA_CARTEIRA_SEM_REGISTRO);
			} else {
				campoLivre.append(getNossoNumeroFormatado(beneficiario));
				campoLivre.append(beneficiario.getAgenciaFormatada());
				campoLivre.append(beneficiario.getCodigoBeneficiario());
				campoLivre.append(boleto.getBanco().getCarteiraFormatado(beneficiario));
			}
		} else if (beneficiario.getCarteira().equals(CARTEIRA_17) || beneficiario.getCarteira().equals(CARTEIRA_18)) {
			campoLivre.append(ZEROS_CONVENIOS_NOVOS);
			campoLivre.append(getNumeroConvenioFormatado(beneficiario));
			campoLivre.append(getNossoNumeroParaCarteiras17e18(beneficiario));
			campoLivre.append(boleto.getBanco().getCarteiraFormatado(beneficiario));
		} else {
			throw new CriacaoBoletoException(
					"Erro na geração do código de barras. Nenhuma regra se aplica. " +
					"Verifique carteira e demais dados.");
		}
		return new CodigoDeBarrasBuilder(boleto).comCampoLivre(campoLivre);
	}

	private String getNossoNumeroParaCarteiras17e18(Beneficiario beneficiario) {
		int indice = beneficiario.getCarteira().equals(CARTEIRA_17) ? 1 : 7;
		return  getNossoNumeroFormatado(beneficiario).substring(indice);
	}

	private boolean convenioAntigo(String convenio) {
		long numeroConvenio = Long.parseLong(convenio);
		return numeroConvenio < 1000000;
	}

	@Override
	public String getNumeroFormatado() {
		return NUMERO_BB;
	}

	@Override
	public java.net.URL getImage() {
		String arquivo = "/br/com/caelum/stella/boleto/img/%s.png";
		String imagem = String.format(arquivo, getNumeroFormatado());
		return getClass().getResource(imagem);
	}

	public String getNumeroConvenioFormatado(Beneficiario beneficiario) {
		if (convenioAntigo(beneficiario.getNumeroConvenio())) {
			return leftPadWithZeros(beneficiario.getNumeroConvenio(), 6);
		} else {
			return leftPadWithZeros(beneficiario.getNumeroConvenio(), 7);
		}
	}

	@Override
	public String getCodigoBeneficiarioFormatado(Beneficiario beneficiario) {
		return leftPadWithZeros(beneficiario.getCodigoBeneficiario(), 8);
	}

	@Override
	public String getCarteiraFormatado(Beneficiario beneficiario) {
		return leftPadWithZeros(beneficiario.getCarteira(),2);
	}

	@Override
	public String getNossoNumeroFormatado(Beneficiario beneficiario) {
		if (beneficiario.getCarteira().equals(CARTEIRA_18) || beneficiario.getCarteira().equals(CARTEIRA_16)) {
			return leftPadWithZeros(beneficiario.getNossoNumero(), 17);
		} else {
			return leftPadWithZeros(beneficiario.getNossoNumero(), 11);
		}
	}

	@Override
	public String getNumeroFormatadoComDigito() {
		return NUMERO_BB + "-" + DIGITO_NUMERO_BB;
	}

	@Override
	public String getNossoNumeroECodigoDocumento(Boleto boleto) {
		return getNossoNumeroFormatado(boleto.getBeneficiario());
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy