br.com.nordestefomento.jrimum.utilix.BancoUtil.java Source code

Java tutorial

Introduction

Here is the source code for br.com.nordestefomento.jrimum.utilix.BancoUtil.java

Source

/*
 * Copyright 2008 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.
 * 
 * Created at: 30/03/2008 - 18:17:40
 * 
 * ================================================================================
 * 
 * Direitos autorais 2008 JRimum Project
 * 
 * Licenciado sob a Licena Apache, Verso 2.0 ("LICENA"); voc no pode usar
 * esse arquivo exceto em conformidade com a esta LICENA. Voc pode obter uma
 * cpia desta LICENA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
 * haja exigncia legal ou acordo por escrito, a distribuio de software sob
 * esta LICENA se dar COMO EST??, SEM GARANTIAS OU CONDIES DE QUALQUER
 * TIPO, sejam expressas ou tcitas. Veja a LICENA para a redao especfica a
 * reger permisses e limitaes sob esta LICENA.
 * 
 * Criado em: 30/03/2008 - 18:17:40
 * 
 */

package br.com.nordestefomento.jrimum.utilix;

import static br.com.nordestefomento.jrimum.utilix.ObjectUtil.isNull;

import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import org.apache.commons.lang.time.DateUtils;

/**
 * <p>
 * Servios utilitrios do universo bancrio, como por exemplo calcular o fator
 * de vencimento de boletos.</code>
 * </p>
 * 
 * @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
 * @author Misael Barreto
 * @author Rmulo Augusto
 * @author <a href="http://www.nordeste-fomento.com.br">Nordeste Fomento
 *         Mercantil</a>
 * 
 * @since 0.2
 * 
 * @version 0.2
 */
public class BancoUtil implements Serializable {

    /**
     *
     */
    private static final long serialVersionUID = -9041865935492749542L;

    /**
     * <p>
     * Data base para o clculo do fator de vencimento fixada em 07/10/1997 pela
     * FEBRABAN.
     * </p>
     */
    private static final Date DATA_BASE_DO_FATOR_DE_VENCIMENTO = new GregorianCalendar(1997, Calendar.OCTOBER, 7)
            .getTime();

    /**
     *<p>
     * Data mxima alcanada pelo fator de vencimento com base fixada em
     * 07/10/1997.
     * </p>
     */
    private static final Date DATA_LIMITE_DO_FATOR_DE_VENCIMENTO = new GregorianCalendar(2025, Calendar.FEBRUARY,
            21).getTime();

    /**
     * <p>
     * Calcula o fator de vencimento a partir da subtrao entre a DATA DE
     * VENCIMENTO de um ttulo e a DATA BASE fixada em 07/10/1997.
     * </p>
     * 
     * <p>
     * O fator de vencimento nada mais  que um referencial numrico de 4
     * dgitos que representa a quantidade de dias decorridos desde a data base
     * (07/10/1997) at a data de vencimento do ttulo. Ou seja, a diferena em
     * dias entre duas datas.
     * </p>
     * 
     * <p>
     * Exemplos:
     * </p>
     * <ul type="circule"> <li>07/10/1997 (Fator = 0);</li> <li>03/07/2000
     * (Fator = 1000);</li> <li>05/07/2000 (Fator = 1002);</li> <li>01/05/2002
     * (Fator = 1667);</li> <li>21/02/2025 (Fator = 9999).</li> </ul>
     * 
     * <p>
     * Funcionamento:
     * </p>
     * 
     * <ul type="square"> <li>Caso a data de vencimento seja anterior a data
     * base (Teoricamente fator negativo), uma exceo do tipo
     * IllegalArgumentException ser lanada.</li> <li>A data limite para o
     * clculo do fator de vencimento  21/02/2025 (Fator de vencimento = 9999).
     * Caso a data de vencimento seja posterior a data limite, uma exceo do
     * tipo IllegalArgumentException ser lanada.</li> </ul>
     * 
     * <p>
     * <strong>ATENO</strong>, esse clculo se refere a ttulos em cobrana,
     * ou melhor: BOLETOS. Desta forma, lembramos que a DATA BASE  uma norma da
     * FEBRABAN. Essa norma diz que todos os boletos emitidos a partir de 1 de
     * setembro de 2000 (primeiro dia til = 03/07/2000 - SEGUNDA) devem seguir
     * esta regra de clculo para compor a informao de vencimento no cdigo de
     * barras. Portanto, boletos no padro FEBRABAN quando capturados por
     * sistemas da rede bancria permitem que se possa realizar a operao
     * inversa, ou seja, adicionar  data base o fator de vencimento capturado.
     * Obtendo ento a data de vencimento deste boleto.
     * </p>
     * 
     * @param dataVencimento
     *            data de vencimento de um ttulo
     * @return fator de vencimento calculado
     * @throws IllegalArgumentException
     * 
     * @since 0.2
     */

    public static int calculceFatorDeVencimento(Date dataVencimento) throws IllegalArgumentException {

        Date dataVencTruncada = null;
        int fator;

        if (isNull(dataVencimento)) {
            throw new IllegalArgumentException(
                    "Impossvel realizar o clculo do fator" + " de vencimento de uma data nula.");
        } else {
            dataVencTruncada = DateUtils.truncate(dataVencimento, Calendar.DATE);
            if (dataVencTruncada.before(DATA_BASE_DO_FATOR_DE_VENCIMENTO)
                    || dataVencTruncada.after(DATA_LIMITE_DO_FATOR_DE_VENCIMENTO)) {
                throw new IllegalArgumentException(
                        "Para o clculo do fator de" + " vencimento se faz necessrio informar uma data entre"
                                + " " + DateUtil.FORMAT_DD_MM_YYYY.format(DATA_BASE_DO_FATOR_DE_VENCIMENTO) + " e "
                                + DateUtil.FORMAT_DD_MM_YYYY.format(DATA_LIMITE_DO_FATOR_DE_VENCIMENTO));
            } else {
                fator = (int) DateUtil.calculeDiferencaEmDias(DATA_BASE_DO_FATOR_DE_VENCIMENTO, dataVencTruncada);
            }
        }

        return fator;
    }
}