diff --git a/src/main/java/org/jrimum/bopepo/BancosSuportados.java b/src/main/java/org/jrimum/bopepo/BancosSuportados.java index 84c5f8ab..779359ae 100644 --- a/src/main/java/org/jrimum/bopepo/BancosSuportados.java +++ b/src/main/java/org/jrimum/bopepo/BancosSuportados.java @@ -293,6 +293,14 @@ public enum BancosSuportados { * @since 0.2 */ BANCO_DAYCOVAL("707", "62232889000190", "BANCO DAYCOVAL S.A.", "Banco Múltiplo"), + /** + * Tipo enumerado que representa o Banco Sofisa, código de + * compensação 637 site. + * + * @since 0.2 + */ + BANCO_SOFISA("637", "60889128000180", "BANCO SOFISA S.A.", "Banco Múltiplo"), /** * Tipo enumerado que representa o Bancoob, código de * compensação 756 + * Interface comum para todos os campos livres do Banco Sofisa que venham a + * existir. + *

+ * + * @author
Lucas Solerne + * + * @since 0.1 + * + * @version 0.1 + */ +abstract class AbstractCLBancoSofisa extends AbstractCampoLivre { + + /** + *

+ * Cria um campo livre com um determinado número de campos + *

+ * + * @see AbstractCampoLivre + * + * @param fieldsLength - Número de campos + */ + protected AbstractCLBancoSofisa(Integer fieldsLength) { + + super(fieldsLength); + } + + protected static CampoLivre create(Titulo titulo) { + + return new CLBancoSofisa().build(titulo); + } +} diff --git a/src/main/java/org/jrimum/bopepo/campolivre/AbstractCampoLivre.java b/src/main/java/org/jrimum/bopepo/campolivre/AbstractCampoLivre.java index 465bb449..ed742eda 100644 --- a/src/main/java/org/jrimum/bopepo/campolivre/AbstractCampoLivre.java +++ b/src/main/java/org/jrimum/bopepo/campolivre/AbstractCampoLivre.java @@ -239,6 +239,8 @@ protected static CampoLivre create(Titulo titulo) throws NotSupportedBancoExcept return AbstractCLUnicred.create(titulo); case BANCO_DAYCOVAL: return AbstractCLBancoDaycoval.create(titulo); + case BANCO_SOFISA: + return AbstractCLBancoSofisa.create(titulo); default: /* diff --git a/src/main/java/org/jrimum/bopepo/campolivre/CLBancoSofisa.java b/src/main/java/org/jrimum/bopepo/campolivre/CLBancoSofisa.java new file mode 100644 index 00000000..9d9ca676 --- /dev/null +++ b/src/main/java/org/jrimum/bopepo/campolivre/CLBancoSofisa.java @@ -0,0 +1,145 @@ +/* + * Copyright 2010 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará "COMO ESTÁ", SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.bopepo.parametro.ParametroBancoSofisa; +import org.jrimum.domkee.banco.Titulo; +import org.jrimum.texgit.Fillers; +import org.jrimum.texgit.FixedField; + +/** + * O campo livre do Banco Sofisa deve seguir esta forma: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoTamanhoConteúdo
20-234Código da agência (sem dígito)
24-263Carteira
27-337Número da Operação fornecido pelo banco
34-4310Nosso Número (sequencial)
44-441DV do Nosso Número (módulo 10)
+ * + * @author Lucas Solerne + * + * @since 0.2 + * + * @version 0.2 + */ +class CLBancoSofisa extends AbstractCLBancoSofisa { + + /** + * + */ + private static final long serialVersionUID = 5142877624309178291L; + + /** + * Número de campos = 4. + */ + private static final Integer FIELDS_LENGTH = 4; + + /** + * Tamanho do campo Agência = 4. + */ + private static final Integer AGENCIA_LENGTH = Integer.valueOf(4); + + /** + * Tamanho do campo Carteira = 3. + */ + private static final Integer CARTEIRA_LENGTH = Integer.valueOf(3); + + /** + * Tamanho do campo Operação = 7. + */ + private static final Integer OPERACAO_LENGTH = Integer.valueOf(7); + + /** + * Tamanho do campo Nosso Número + DV = 11. + */ + private static final Integer NOSSO_NUMERO_LENGTH = Integer.valueOf(11); + + /** + * Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH}) deste campo. + * + * @since 0.2 + */ + protected CLBancoSofisa() { + super(FIELDS_LENGTH); + } + + @Override + protected void addFields(Titulo titulo) { + StringBuilder nossoNumero = new StringBuilder(titulo.getNossoNumero()); + nossoNumero.append(titulo.getDigitoDoNossoNumero()); + + this.add(new FixedField(titulo.getContaBancaria().getAgencia().getCodigo(), AGENCIA_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getCarteira().getCodigo(), CARTEIRA_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getParametrosBancarios().getValor(ParametroBancoSofisa.OPERACAO), OPERACAO_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(nossoNumero.toString(), NOSSO_NUMERO_LENGTH, Fillers.ZERO_LEFT)); + } + + @Override + protected void checkValues(Titulo titulo) { + checkAgenciaNotNull(titulo); + checkCodigoDaAgencia(titulo); + checkCodigoDaAgenciaMenorOuIgualQue(titulo, 9999); + checkCarteiraNotNull(titulo); + checkCodigoDaCarteira(titulo); + checkCodigoDaCarteiraMenorOuIgualQue(titulo, 999); + checkParametroBancario(titulo, ParametroBancoSofisa.OPERACAO); + checkParametroBancarioMenorOuIgualQue(titulo, ParametroBancoSofisa.OPERACAO, 9999999); + checkNossoNumero(titulo); + checkTamanhoDoNossoNumero(titulo, NN10); + checkDigitoDoNossoNumero(titulo); + checkTamanhoDigitoDoNossoNumero(titulo, 1); + } +} diff --git a/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoSofisa.java b/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoSofisa.java new file mode 100644 index 00000000..f66efc45 --- /dev/null +++ b/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoSofisa.java @@ -0,0 +1,46 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará "COMO ESTÁ", SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + */ + +package org.jrimum.bopepo.parametro; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.banco.ParametroBancario; + +/** + * Parâmetros bancários específicos para o + * {@link BancosSuportados#BANCO_SOFISA}. + * + * @author Lucas Solerne + * + * @version 0.2.3 + * + * @since 0.2 + */ +public enum ParametroBancoSofisa implements ParametroBancario { + /** + * Nome do parâmetro bancário contendo o valor do número de operação da conta. + */ + OPERACAO; +} diff --git a/src/main/resources/img/637.png b/src/main/resources/img/637.png new file mode 100644 index 00000000..083097ae Binary files /dev/null and b/src/main/resources/img/637.png differ diff --git a/src/test/java/org/jrimum/bopepo/TestBancosSuportados.java b/src/test/java/org/jrimum/bopepo/TestBancosSuportados.java index 17865a68..41f73f99 100644 --- a/src/test/java/org/jrimum/bopepo/TestBancosSuportados.java +++ b/src/test/java/org/jrimum/bopepo/TestBancosSuportados.java @@ -76,5 +76,6 @@ public void deve_ter_o_codigos_bacen_igual_o_da_especificacao_febraban() { assertEquals(BancosSuportados.CITIBANK.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "745"); assertEquals(BancosSuportados.BANCO_DE_BRASILIA.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "070"); assertEquals(BancosSuportados.BANCO_DAYCOVAL.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "707"); + assertEquals(BancosSuportados.BANCO_SOFISA.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "637"); } } diff --git a/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoSofisa.java b/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoSofisa.java new file mode 100644 index 00000000..1ae65003 --- /dev/null +++ b/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoSofisa.java @@ -0,0 +1,38 @@ +package org.jrimum.bopepo.campolivre; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.bopepo.parametro.ParametroBancoSofisa; +import org.jrimum.domkee.banco.Agencia; +import org.jrimum.domkee.banco.Carteira; +import org.jrimum.domkee.banco.NumeroDaConta; +import org.jrimum.domkee.banco.ParametrosBancariosMap; +import org.junit.Before; + +/** + *

+ * Teste unitário do campo livre do Banco Sofisa. + *

+ * + * @author Lucas Solerne + * + */ +public class TestCLBancoSofisa extends AbstractCampoLivreBaseTest { + + @Before + public void setUp() { + + titulo.getContaBancaria().setBanco(BancosSuportados.BANCO_SOFISA.create()); + titulo.getContaBancaria().setAgencia(new Agencia(0004, "3")); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(1234567)); + titulo.getContaBancaria().setCarteira(new Carteira(121)); + titulo.setParametrosBancarios(new ParametrosBancariosMap(ParametroBancoSofisa.OPERACAO, 1234567)); + titulo.setNossoNumero("1234567890"); + titulo.setDigitoDoNossoNumero("0"); + + createCampoLivreToTest(); + + // campo livre = agência(4) + carteira(3) + operação(7) + nosso número + DV(11) + // = 0004 + 121 + 1234567 + 12345678900 = 25 dígitos + setCampoLivreEsperadoComoString("0004121123456712345678900"); + } +}