Skip to content

Commit

Permalink
banco do brasil (beta)
Browse files Browse the repository at this point in the history
  • Loading branch information
andersondanilo committed Mar 13, 2016
1 parent a4bd821 commit 177e0ce
Show file tree
Hide file tree
Showing 6 changed files with 432 additions and 18 deletions.
2 changes: 1 addition & 1 deletion src/Cnab/Banco.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public static function getBanco($codigo)
if ($codigo == self::BANCO_DO_BRASIL) {
return array(
'codigo_do_banco' => self::BANCO_DO_BRASIL,
'nome_do_banco' => 'BANCO DO BRASIL SA',
'nome_do_banco' => 'BANCO DO BRASIL S.A.',
);
} elseif ($codigo == self::ITAU) {
return array(
Expand Down
12 changes: 12 additions & 0 deletions src/Cnab/CodigoCarteira.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php

namespace Cnab;

class CodigoCarteira
{
const COBRANCA_SIMPLES = 1;
const COBRANCA_VINCULADA = 2;
const COBRANCA_CAUCIONADA = 3;
const COBRANCA_DESCONTADA = 4;
const COBRANCA_VENDOR = 5;
}
18 changes: 18 additions & 0 deletions src/Cnab/Especie.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

class Especie
{
// Itaú
const ITAU_DUPLICATA_MERCANTIL = '01';
const ITAU_NOTA_PROMISSORIA = '02';
const ITAU_NOTA_DE_SEGURO = '03';
Expand All @@ -19,12 +20,29 @@ class Especie
const ITAU_CONTRATO_DE_PRESTACAO_DE_SERVICOS = '17';
const ITAU_DIVERSOS = '99';

// Caixa
const CEF_DUPLICATA_MERCANTIL = '01';
const CEF_NOTA_PROMISSORIA = '02';
const CEF_DUPLICATA_DE_PRESTACAO_DE_SERVICOS = '03';
const CEF_NOTA_DE_SEGURO = '05';
const CEF_LETRA_DE_CAMBIO = '06';
const CEF_OUTROS = '09';

// Banco do Brasil
// Para carteira 11 e 17 modalidade Simples, pode ser usado: 01 – Cheque, 02 – Duplicata Mercantil, 04 –
// Duplicata de Serviço, 06 – Duplicata Rural, 07 – Letra de Câmbio, 12 – Nota Promissória, 17 - Recibo, 19 –
// Nota de Debito, 26 – Warrant, 27 – Dívida Ativa de Estado, 28 – Divida Ativa de Município e 29 – Dívida Ativa
// União. Para carteira 12 (moeda variável) pode ser usado: 02 – Duplicata Mercantil, 04 – Duplicata de Serviço,
// 07 – Letra de Câmbio, 12 – Nota Promissória, 17 – Recibo e 19 – Nota de Débito. Para carteira 15 (prêmio de
// seguro) pode ser usado: 16 – Nota de Seguro e 20 – Apólice de Seguro. Para carteira 11/17 modalidade
// Vinculada e carteira 31, pode ser usado: 02 – Duplicata Mercantil e 04 – Duplicata de Serviço. Para carteira
// 11/17 modalidade Descontada e carteira 51, pode ser usado: 02 – Duplicata Mercantil, 04 – Duplicata de
// Serviço, e 07 – Letra de Câmbio. Obs.: O Banco do Brasil encaminha para protesto os seguintes títulos:
// Duplicata Mercantil, Rural e de Serviço, Letra de Câmbio, e Certidão de Dívida Ativa da União, dos Estados e
// do Município.
const BB_CHEQUE = 1;
const BB_DUPLICATA_MERCANTIL = 2;
const BB_DUPLICATA_DE_SERVICO = 4;

const CNAB240_OUTROS = '99';
}
156 changes: 140 additions & 16 deletions src/Cnab/Remessa/Cnab240/Arquivo.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,26 @@ public function configure(array $params)
);

if ($this->codigo_banco == \Cnab\Banco::CEF) {
$campos[] = 'codigo_cedente';
}

if($this->codigo_banco == \Cnab\Banco::BANCO_DO_BRASIL) {
$campos[] = 'codigo_convenio';
$campos[] = 'codigo_carteira';
$campos[] = 'variacao_carteira';
$campos[] = 'conta_dv';
}

if ($this->codigo_banco == \Cnab\Banco::CEF || $this->codigo_banco == \Cnab\Banco::BANCO_DO_BRASIL) {
$campos[] = 'agencia';
$campos[] = 'agencia_dv';
$campos[] = 'conta';
$campos[] = 'operacao';
$campos[] = 'codigo_cedente';
$campos[] = 'numero_sequencial_arquivo';
}



foreach ($campos as $campo) {
if (array_key_exists($campo, $params)) {
if (strpos($campo, 'data_') === 0 && !($params[$campo] instanceof \DateTime)) {
Expand Down Expand Up @@ -73,7 +85,19 @@ public function configure(array $params)
$this->headerArquivo->numero_inscricao = $this->prepareText($this->configuracao['cnpj'], '.-/');
$this->headerArquivo->agencia = $this->configuracao['agencia'];
$this->headerArquivo->agencia_dv = $this->configuracao['agencia_dv'];
$this->headerArquivo->codigo_cedente = $this->configuracao['codigo_cedente'];

if($this->codigo_banco == \Cnab\Banco::BANCO_DO_BRASIL) {
$this->headerArquivo->codigo_convenio = $this->configuracao['codigo_convenio'];
$this->headerArquivo->carteira = $this->configuracao['codigo_carteira'];
$this->headerArquivo->variacao_carteira = $this->configuracao['variacao_carteira'];
$this->headerArquivo->conta = $this->configuracao['conta'];
$this->headerArquivo->conta_dv = $this->configuracao['conta_dv'];
}

if($this->codigo_banco == \Cnab\Banco::CEF) {
$this->headerArquivo->codigo_cedente = $this->configuracao['codigo_cedente'];
}

$this->headerArquivo->nome_empresa = $this->configuracao['nome_fantasia'];
$this->headerArquivo->nome_banco = $banco['nome_do_banco'];
$this->headerArquivo->codigo_remessa_retorno = 1;
Expand All @@ -99,11 +123,25 @@ public function configure(array $params)
$this->headerLote->numero_inscricao = $this->headerArquivo->numero_inscricao;
$this->headerLote->agencia = $this->headerArquivo->agencia;
$this->headerLote->agencia_dv = $this->headerArquivo->agencia_dv;
$this->headerLote->codigo_convenio = $this->headerArquivo->codigo_cedente;
$this->headerLote->codigo_cedente = $this->headerArquivo->codigo_cedente;


if ($this->codigo_banco == \Cnab\Banco::CEF) {
$this->headerLote->codigo_convenio = $this->headerArquivo->codigo_cedente;
$this->headerLote->codigo_cedente = $this->headerArquivo->codigo_cedente;
}

if ($this->codigo_banco == \Cnab\Banco::BANCO_DO_BRASIL) {
$this->headerLote->codigo_convenio = $this->headerArquivo->codigo_convenio;
$this->headerLote->carteira = $this->headerArquivo->carteira;
$this->headerLote->variacao_carteira = $this->headerArquivo->variacao_carteira;
$this->headerLote->conta = $this->headerArquivo->conta;
$this->headerLote->conta_dv = $this->headerArquivo->conta_dv;
}

$this->headerLote->nome_empresa = $this->headerArquivo->nome_empresa;
$this->headerLote->numero_sequencial_arquivo = $this->headerArquivo->numero_sequencial_arquivo;
$this->headerLote->data_geracao = $this->headerArquivo->data_geracao;

if ($this->codigo_banco == \Cnab\Banco::CEF) {
$this->headerLote->tipo_servico = 2;
}
Expand Down Expand Up @@ -159,12 +197,34 @@ public function insertDetalhe(array $boleto, $tipo = 'remessa')
$detalhe->segmento_p->lote_servico = $this->headerLote->lote_servico;
$detalhe->segmento_p->agencia = $this->headerArquivo->agencia;
$detalhe->segmento_p->agencia_dv = $this->headerArquivo->agencia_dv;
$detalhe->segmento_p->codigo_cedente = $this->headerArquivo->codigo_cedente;
$detalhe->segmento_p->nosso_numero = $boleto['nosso_numero'];
$detalhe->segmento_p->codigo_carteira = 1; // 1 = Cobrança Simples

if ($this->codigo_banco == \Cnab\Banco::CEF) {
$detalhe->segmento_p->codigo_cedente = $this->headerArquivo->codigo_cedente;
}

if ($this->codigo_banco == \Cnab\Banco::BANCO_DO_BRASIL) {
$detalhe->segmento_p->conta = $this->headerArquivo->conta;
$detalhe->segmento_p->conta_dv = $this->headerArquivo->conta_dv;
}

$detalhe->segmento_p->nosso_numero = $this->formatarNossoNumero($boleto['nosso_numero']);

if($this->codigo_banco == \Cnab\Banco::BANCO_DO_BRASIL) {
// Informar 1 – para carteira 11/12 na modalidade Simples; 2 ou 3 – para carteira 11/17 modalidade
// Vinculada/Caucionada e carteira 31; 4 – para carteira 11/17 modalidade Descontada e carteira 51; e 7 – para
// carteira 17 modalidade Simples.
if($boleto['carteira'] == 17 && $boleto['codigo_carteira'] == \Cnab\CodigoCarteira::COBRANCA_SIMPLES) {
$detalhe->segmento_p->codigo_carteira = 7;
} else {
$detalhe->segmento_p->codigo_carteira = $boleto['codigo_carteira'];
}
}

if ($this->layoutVersao === 'sigcb' && $this->codigo_banco == \Cnab\Banco::CEF) {
$detalhe->segmento_p->codigo_carteira = 1; // 1 = Cobrança Simples
$detalhe->segmento_p->modalidade_carteira = $boleto['modalidade_carteira']; // 21 = (título Sem Registro emissão CAIXA)
}

$detalhe->segmento_p->forma_cadastramento = $boleto['registrado'] ? 1 : 2; // 1 = Com, 2 = Sem Registro
if ($boleto['registrado'] && $this->codigo_banco == \Cnab\Banco::CEF) {
$this->headerLote->tipo_servico = 1;
Expand All @@ -191,8 +251,29 @@ public function insertDetalhe(array $boleto, $tipo = 'remessa')
$detalhe->segmento_p->uso_empresa = $boleto['numero_documento'];
$detalhe->segmento_p->codigo_protesto = 3; // 3 = Não protestar
$detalhe->segmento_p->prazo_protesto = 0;
$detalhe->segmento_p->codigo_baixa = 1; // Baixar
$detalhe->segmento_p->prazo_baixa = 30; // Baixar automaticamente após 30 dias

if ($this->codigo_banco == \Cnab\Banco::BANCO_DO_BRASIL) {
// Campo não tratado pelo sistema. Informar 'zeros'.
// O sistema considera a informação que foi cadastrada na
// sua carteira junto ao Banco do Brasil.
$detalhe->segmento_p->codigo_baixa = 0;
$detalhe->segmento_p->prazo_baixa = 0;
} else {
if(isset($boleto['baixar_apos_dias'])) {
if($boleto['baixar_apos_dias'] === false) {
// não baixar / devolver
$detalhe->segmento_p->codigo_baixa = 2;
$detalhe->segmento_p->prazo_baixa = 0;
} else {
// baixa automática
$detalhe->segmento_p->codigo_baixa = 1;
$detalhe->segmento_p->prazo_baixa = $boleto['baixar_apos_dias'];
}
} else {
$detalhe->segmento_p->codigo_baixa = 0;
$detalhe->segmento_p->prazo_baixa = 0;
}
}

if (array_key_exists('identificacao_distribuicao', $boleto)) {
$detalhe->segmento_p->identificacao_distribuicao = $boleto['identificacao_distribuicao'];
Expand Down Expand Up @@ -246,6 +327,46 @@ public function insertDetalhe(array $boleto, $tipo = 'remessa')
$this->detalhes[] = $detalhe;
}

public function formatarNossoNumero($nossoNumero)
{
if(!$nossoNumero)
return $nossoNumero;

if ($this->codigo_banco == \Cnab\Banco::BANCO_DO_BRASIL) {
$codigo_convenio = $this->configuracao['codigo_convenio'];

if(strlen($codigo_convenio) <= 4) {
# Convênio de 4 digitos
if(strlen($nossoNumero) > 7) {
throw new \InvalidArgumentException(
"Para número de convênio de 4 posições o nosso número deve ter no máximo 7 posições (sem o digito)"
);
}
$number = sprintf('%04d%07d', $codigo_convenio, $nossoNumero);
return $number . $this->mod11($number);
} elseif (strlen($codigo_convenio) <= 6) {
# Convênio de 6 digitos
if(strlen($nossoNumero) > 5) {
throw new \InvalidArgumentException(
"Para número de convênio de 6 posições o nosso número deve ter no máximo 5 posições (sem o digito)"
);
}
$number = sprintf('%06d%05d', $codigo_convenio, $nossoNumero);
return $number . $this->mod11($number);
} else {
if(strlen($nossoNumero) > 10) {
throw new \InvalidArgumentException(
"Para número de convênio de 7 posições o nosso número deve ter no máximo 10 posições"
);
}
$number = sprintf('%07d%010d', $codigo_convenio, $nossoNumero);
return $number;
}
}

return $nossoNumero;
}

public function listDetalhes()
{
return $this->detalhes;
Expand Down Expand Up @@ -313,7 +434,7 @@ public function getText()
}

if (!$this->headerLote->validate()) {
throw new \InvalidArgumentException($this->headerArquivo->last_error);
throw new \InvalidArgumentException($this->headerLote->last_error);
}

$dados = $this->headerArquivo->getEncoded().self::QUEBRA_LINHA;
Expand All @@ -335,12 +456,15 @@ public function getText()
}

$this->trailerLote->qtde_registro_lote = $qtde_registro_lote;
$this->trailerLote->qtde_titulo_cobranca_simples = $qtde_titulo_cobranca_simples;
$this->trailerLote->valor_total_titulo_simples = $valor_total_titulo_simples;
$this->trailerLote->qtde_titulo_cobranca_caucionada = 0;
$this->trailerLote->valor_total_titulo_caucionada = 0;
$this->trailerLote->qtde_titulo_cobranca_descontada = 0;
$this->trailerLote->valor_total_titulo_descontada = 0;

if ($this->codigo_banco == \Cnab\Banco::CEF) {
$this->trailerLote->qtde_titulo_cobranca_simples = $qtde_titulo_cobranca_simples;
$this->trailerLote->valor_total_titulo_simples = $valor_total_titulo_simples;
$this->trailerLote->qtde_titulo_cobranca_caucionada = 0;
$this->trailerLote->valor_total_titulo_caucionada = 0;
$this->trailerLote->qtde_titulo_cobranca_descontada = 0;
$this->trailerLote->valor_total_titulo_descontada = 0;
}

$this->trailerArquivo->qtde_lotes = 1;
$this->trailerArquivo->qtde_registros = $this->trailerLote->qtde_registro_lote + 2;
Expand Down
Loading

0 comments on commit 177e0ce

Please sign in to comment.