Guia de Recolhimento da União
A Guia de Recolhimento da União - GRU - é utilizada pelas Unidades Gestoras para efetuarem pagamentos (p.ex. serviços) para outras Unidades Gestoras ou retenções sobre pagamentos a terceiros para recolhimento à União (p.ex. retenção da CPSSS, multas por descumprimento de contrato, inscrição em Processos Seletivos).
A GRU pode ser do modelo Simples ou Cobrança.
GRU Simples
O modelo de GRU Simples pode ser emitida pela internet, por meio do sítio da Secretaria do Tesouro Nacional (STN) ou por meio dos sítios de outros órgãos públicos arrecadadores, no caso, a própria Unidade Gestora.
Permite que a Unidade Gestora tenha controle da arrecadação feita por intermédio do Banco do Brasil por meio do cadastro da extração do arquivo de arrecadação da GRU Simples. O procedimento detalhado para o cadastramento está disponível por meio do seguinte endereço: http://www.tesouro.fazenda.gov.br/siafi/gru/download/Manual_Arquivo_Retorno.pdf.
A GRU Simples Não é compensável, podendo ser paga apenas no Banco do Brasil na “boca do caixa” ou por meio dos diversos serviços disponíveis, como terminais de auto-atendimento e internet banking.
Campos da GRU Simples
A GRU Simples possui os seguintes campos:
Campo | Tipo | Tamanho | Descrição | Formato |
---|---|---|---|---|
Nome do Contribuinte/Recolhedor | TEXTO | 45 | Nome do contribuinte ou do recolhedor da arrecadação. | |
Nome da Unidade Favorecida | TEXTO | 45 | Nome da Unidade Gestora favorecida pela arrecadação. | |
Código de Recolhimento | NUMÉRICO | 6 | Código que identifica o que está sendo pago. | 99999-9 |
Número de Referência | NUMÉRICO | 17 | Campo que pode ou não ser utilizado pela Unidade Gestora favorecida pela arrecadação para identificar o pagamento. | |
Competência | NUMÉRICO | 6 | Mês e ano a que se refere o recolhimento. | MM/AAAA, onde MM representa o mês e AAAA representa o ano, respectivamente. |
Vencimento | NUMÉRICO | 8 | Data a partir da qual o pagamento será considerado como “em atraso”, devendo ser aplicadas as regras legais e normativas cabíveis. | DD/MM/AAAA, onde DD, MM e AAAA representam o dia, o mês e o ano, respectivamente. |
CNPJ ou CPF do Contribuinte | NUMÉRICO | 14 (CNPJ)/11 (CPF) | CNPJ ou CPF do contribuinte | CNPJ: 99.999.999/9999-99 CPF: 999.999.999-99 |
UG/Gestão | NUMÉRICO | 11 | Identificação, no SIAFI, do Órgão Público favorecido pelo pagamento (Órgão que aparecerá como UNIDADE FAVORECIDA na GRU impressa). Essa identificação é composta pelo código da Unidade Gestora (código numérico de 6 posições) e pelo código da Gestão (código numérico de 5 posições). | 999999/99999 |
Valor Principal | NUMÉRICO | 11 | Valor a ser pago por meio da GRU. | 999999999,99 |
Desconto/Abatimento | NUMÉRICO | 11 | Valor dos descontos e abatimentos concedidos. | 999999999,99 |
Outras Deduções | NUMÉRICO | 11 | Valor das outras deduções. | 999999999,99 |
Mora/Multa | NUMÉRICO | 11 | Valor da multa ou mora. | 999999999,99 |
Juros/Encargos | NUMÉRICO | 11 | Valor dos juros e encargos. | 999999999,99 |
Outros Acréscimos | NUMÉRICO | 11 | Valor dos outros acréscimos. | 999999999,99 |
Valor Total | NUMÉRICO | 11 | Valor a ser efetivamente pago. Consiste na seguinte soma algébrica: (valor do campo Valor Principal) – (valor do campo Descontos/Abatimentos) – (valor do campo Outras Deduções) + (valor do campo Mora/Multa) + (valor do campo Juros/Encargos) + (valor do campo Outros Acréscimos) | 999999999,99 |
GRU Cobrança
Em geral, as GRU Cobrança são emitidas por meio de sistema informatizado próprio da Unidade Gestora, a partir dos dados de controle e acompanhamento de suas cobranças.
O Banco do Brasil envia arquivo retorno para as Unidades Gestoras com a informação do “Nosso Número” do boleto de cobrança liquidado. A partir do “Nosso Número”, a Unidade Gestora poderá controlar sua arrecadação.
É sempre compensável, podendo ser paga, até seu vencimento, em qualquer banco na “boca do caixa” ou por meio dos diversos serviços disponíveis, como terminais de auto-atendimento, internet, etc.
Só pode ser utilizada para valores maiores do que R$ 50,00 (cinquenta reais).
A Unidade Gestora interessada em utilizar a GRU Cobrança para arrecadar suas receitas deverá encaminhar ofício à sua agência de relacionamento do Banco do Brasil solicitando a abertura de convênio de cobrança. A Unidade Gestora deverá solicitar expressamente a abertura de tantos convênios de cobrança quantos forem os códigos de recolhimento a serem cadastrados.
Campos da GRU Cobraça
A GRU Cobrança possui os seguintes campos:
Campo | Tipo | Tamanho | Descrição | Formato |
---|---|---|---|---|
Sacado | TEXTO | Até 3 linhas | Nome do contribuinte ou do recolhedor da arrecadação. Recomendável incluir o CPF/CNPJ e o endereço do sacado. | |
Cedente | TEXTO | 45 | Nome da Unidade Gestora favorecida pela arrecadação. | |
Número do Documento | NUMÉRICO | 6 | ||
Vencimento | NUMÉRICO | 8 | Data a partir da qual o pagamento será considerado como “em atras””, devendo ser aplicadas as regras legais e normativas cabíveis. | DD/MM/AAAA, onde DD, MM e AAAA representam o dia, o mês e o ano, respectivamente. |
Agência / Código do Cedente | NUMÉRICO | 11 | Número da agência e código dado pelo convênio bancário onde será recolhido o pagamento | 999999/99999 |
Valor do Documento | NUMÉRICO | 11 | Valor a ser pago por meio da GRU. | 999999999,99 |
Desconto/Abatimento | NUMÉRICO | 11 | Valor dos descontos e abatimentos concedidos. | 999999999,99 |
Outras Deduções | NUMÉRICO | 11 | Valor das outras deduções. | 999999999,99 |
Mora/Multa | NUMÉRICO | 11 | Valor da multa ou mora. | 999999999,99 |
Outros Acréscimos | NUMÉRICO | 11 | Valor dos outros acréscimos. | 999999999,99 |
Valor Cobrado | NUMÉRICO | 11 | Valor a ser efetivamente pago. Consiste na seguinte soma algébrica: (valor do campo Valor Principal) – (valor do campo Descontos/Abatimentos) – (valor do campo Outras Deduções) + (valor do campo Mora/Multa) + (valor do campo Outros Acréscimos) | 999999999,99 |
Descrição dos Códigos de Recolhimento
Os códigos de recolhimento indicam, dentre outros, parâmetros para classificação e/ou destinação dos recursos arrecadados. Assim, quando da criação de um código de receita a STN/COFIN poderá indicar, por exemplo, se aquele código se destina a ingressos de receita, estorno de despesa, depósitos de diversas origens, indicando ainda a fonte de origem do orçamento, a natureza da receita, etc.
Os códigos de recolhimento são codificados conforme tabela a seguir
Espécie de Ingresso | Códigos Iniciados Por |
---|---|
RECEITA PRIMÁRIA FONTE TESOURO | 1xxxx-x |
RECEITA PRIMÁRIA FONTE PRÓPRIA | 2xxxx-x |
RECEITA FINANCEIRA FONTE TESOURO | 3xxxx-x |
RECEITA FINANCEIRA FONTE PRÓPRIA | 4xxxx-x |
OPERAÇÃO INTERNA FONTE TESOURO | 5xxxx-x |
ESTORNO DE DESPESA | 6xxxx-x |
OPERAÇÃO INTERNA FONTE PRÓPRIA | 7xxxx-x |
DEPÓSITOS DIVERSOS | 9xxxx-x |
Alguns códigos desta tabela poderão ser “replicados” em todas as UG, de forma que essas possam complementá-los com informações específicas necessárias à contabilização. Um bom exemplo são os ingressos originários de receitas próprias (receita de aluguéis) em que o detalhamento da fonte varia de acordo com o órgão.
Os códigos de recolhimento são classificados, quanto à abrangência, em: códigos de abrangência geral e abrangência STN. Os códigos de abrangência geral aqueles que necessitam que a UG informe a fonte de destinação da arrecadação (homologação). A Unidade deve homologar estes códigos antes de sua utilização, alterando os campos preenchidos com a expressão “INFGESTOR”, com o grupo composto por (fonte+vinculação+tipo de recurso) ex. 02500000004007.
Os códigos de abrangência STN são aqueles que não necessitam de homologação, pois já contêm todos os parâmetros para classificação e destinação da receita.
CÓDIGO GRU | TIPO | FONTE | INF. GESTOR |
---|---|---|---|
188XX | STN - USO GERAL | TESOURO | |
288XX/289XX | ABRANGÊNCIA GERAL | PRÓPRIA | HOMOLOGAR |
388XX | STN - USO GERAL | TESOURO | |
488XX | ABRANGÊNCIA GERAL | PRÓPRIA | HOMOLOGAR |
588XX | STN - USO GERAL | TESOURO(OP.INTERNAS) | |
788XX | ABRANGÊNCIA GERAL | PRÓPRIA(OP.INTERNAS) | HOMOLOGAR |
Homologação de Códigos de Recolhimento
Códigos de abrangência geral (288XX-X, 289XX-X, 488XX-X, 489XX-X, 788XX-X e 789XX-X) requerem informações diferenciadas para cada Unidade Gestora (UG). Sendo assim, a UG que selecionar um código desse tipo terá que homologá-lo, ou seja, indicar, na maioria das vezes, a fonte, a vinculação e o tipo de arrecadação em um dos campos de INSCRIÇÃO ou CLASSIFICAÇÃO do código, onde houver a expressão INFGESTOR, conforme solicitado pelo evento.
Somente é possível homologar código de recolhimento que tenha sido previamente parametrizado para a UG. O procedimento para parametrização está disponível no site do Tesouro Nacional: http://www.tesouro.fazenda.gov.br/siafi/GRU_orientacoes_unidades_gestoras.asp
Após a homologação, o código de recolhimento estará disponível para uso no sítio do Tesouro Nacional ou no Aplicativo Local somente no dia seguinte. Para utilização intra-Siafi, o uso é imediato. É importante lembrar que, para a utilização no Aplicativo Local, será necessário atualizar o pacote de dados para que as atualizações sejam realizadas.
Diagrama de Classes
O seguinte modelo de implementação da GRU é utilizado nos sistemas SIG:
As GRUs (classe GuiaRecolhementoUniao) possuem uma configuração padrão (classe ConfiguracaoGRU), que por sua vez são agrupadas (classe GrupoEmissaoGRU. Dependendo do caso de uso, as informações da configuração deverão ser previamente cadastradas no banco, ou serem cadastradas via próprio caso de uso. Detalharemos isso mais adiante.
As GRUs são apenas de dois tipo: Simples ou Cobrança. GRUs Simples são utilizadas de formas mais abrangentes. Não tem restrição rígida de vencimento, ou seja, o banco pode aceitar o seu pagamento fora da data especificada, podendo ser utilizadas para pagamento de multas de biblioteca, por exemplo. As GRUs Cobrança necessitam de um número do convênio com o Banco do Brasil, podem ter resitrções de vencimento mais rígidas e são mais indicadas para utilização de pagamento de taxas de inscrição, por exemplo.
Os tipos de arrecadação já estão cadastrados no banco de dados com o código de recolhimento correspondente.
A geração da GRU é feita utilizando-se um Helper, o que será explicado mais adiante.
Exemplo Caso de Uso com Configuração Fixa
Como primeiro exemplo de implementação temos o Vestibular com uma configuração fixa de GRU que é utilizada para o pagamento da taxa de inscrição. Geralmente, utiliza-se uma GRU Cobrança e um convênio único.
Neste caso, temos o grupo de emissão de GRU e a configuração previamente cadastrada no banco:
id_grupo_emissao_gru | codigo_gestao | agencia | codigo_cedente | ativo | codigo_unidade_gestora | convenio |
---|---|---|---|---|---|---|
1 | “” | “3795-8” | “333014-1” | TRUE | “” | 2314238 |
id_configuracao_gru | gru_simples | ativo | data_cadastro | id_tipo_arrecadacao | id_unidade | competencia | descricao | id_grupo_emissao_gru |
---|---|---|---|---|---|---|---|---|
1 | FALSE | TRUE | “2011-12-12 12:03:02.051” | 1 | 605 | “GRU Cobraça para o Vestibular” | 1 |
No formulário cadastro do processo seletivo, o usuário deverá escolher o tipo de Arrecadação (Vestibular, Reingresso, Reopção, etc.). O desenvolvedor deverá implementar um método para buscar a configuração da GRU correspondente e associá-la a classe:
- form.jsp
<tr> <th class="obrigatorio"> Tipo de Arrecadação: </th> <td> <a4j:region> <h:selectOneMenu value="#{processoSeletivoVestibular.idTipoArrecadacao}" id="tipoArrecadacao"> <f:selectItem itemValue="0" itemLabel="-- SELECIONE --"/> <f:selectItems value="#{processoSeletivo.tiposArrecadacaoCombo}"/> <a4j:support action="#{ processoSeletivoVestibular.atualizaConfiguracaoGRU }" event="onchange" reRender="codRecolhimento, tipoGRU"/> </h:selectOneMenu> <a4j:status id="statusGRU"> <f:facet name="start"> <h:graphicImage value="/img/indicator.gif" /> </f:facet> </a4j:status> </a4j:region> </td> </tr>
- ProcessoSeletivoVestibularMBean.java
public void atualizaConfiguracaoGRU() throws DAOException { configuracaoGRU = GuiaRecolhimentoUniaoHelper.getConfiguracaoGRUByTipoArrecadacao(idTipoArrecadacao, null); obj.setConfiguracaoGRU(configuracaoGRU); }
O atributo configuracaoGRU na classe ProcessoSeletivoVestibular é transiente, uma vez que os dados são armazenados no banco comum, e não no banco sigaa. No momento que o ProcessoSeletivoVestibular é persistido, somente o ID da configuração é associada. Isso é feito no método setConfiguracaoGRU():
- ProcessoSeletivoVestibular.java
public void setConfiguracaoGRU(ConfiguracaoGRU configuracaoGRU) { if (configuracaoGRU != null) this.idConfiguracaoGRU = configuracaoGRU.getId(); this.configuracaoGRU = configuracaoGRU; }
Uma vez cadastrado o Vestibular, os candidatos poderão se inscrever nele acessando a parte pública do SIGAA. Ao final do caso de uso de inscrição do Vestibular, o desenvolvedor deverá recuperar a configuração da GRU, juntamente com os dados da inscrição do candidato, e criar uma GRU. Esta GRU é então associada à inscrição através do ID, pois a GRU é persistida no banco comum, e não no SIGAA:
- ProcessadorInscricaoVestibular
String instrucoes = "Edital: " + ps.getNome() + "\nNº de Inscrição: " + inscricao.getNumeroInscricao() + "\nPrimeira Opção: " + inscricao.getOpcoesCurso()[0].getDescricao() + "\nLíngua Estrangeira: " + inscricao.getLinguaEstrangeira().getDenominacao(); // Configuração da GRU GuiaRecolhimentoUniao gru ; SimpleDateFormat formato = new SimpleDateFormat("MM/yyyy"); String competencia = formato.format(ps.getDataVencimentoBoleto()); gru = GuiaRecolhimentoUniaoHelper.createGRU( ps.getIdConfiguracaoGRU(), inscricao.getPessoa().getCpf_cnpj(), inscricao.getPessoa().getNome(), inscricao.getPessoa().getEnderecoContato().getDescricao(), instrucoes, competencia, ps.getDataVencimentoBoleto(), ps.getValorInscricao()); inscricao.setIdGRU(gru.getId());
Uma vez persistida a inscrição, o desenvolvedor poderá disponibilizar o PDF para o candidato baixar e pagar. Isto é feito utilizando-se o helper passando o outputStream e o ID da GRU a ser gerado:
- InscricaoVestibularMBean.java
public String imprimirGRU(int idInscricao, int numeroInscricao) throws ArqException, NegocioException { try { obj = getGenericDAO().findByPrimaryKey(idInscricao, InscricaoVestibular.class); if (idInscricao == 0 || numeroInscricao == 0 || obj != null && obj.getNumeroInscricao() != numeroInscricao) { addMensagemErro("Erro na identificação da inscrição."); return null; } if (hasErrors()) return null; getCurrentResponse().setContentType("application/pdf"); getCurrentResponse().addHeader("Content-Disposition", "attachment;filename=GRU.pdf"); GuiaRecolhimentoUniaoHelper.gerarPDF(getCurrentResponse().getOutputStream(), obj.getIdGRU()); FacesContext.getCurrentInstance().responseComplete(); } catch (IOException e) { tratamentoErroPadrao(e); } return null; }
Exemplo Caso de Uso com Configuração Dinâmica
Em outros casos de uso, a configuração da GRU poderá ser informada em um formulário de cadastro. Temos como exemplo o caso de uso de cursos Lato Sensu. No módulo, o gestor da PPPg pode alterar a proposta de um curso de lato sensu e incluir a configuração da GRU a ser utilizada na inscrição de processos seletivos e no pagamento de mensalidades. No caso, a classe CursoLato
tem dois atributos transientes, configuracaoGRUInscricao
e configuracaoGRUMensalidade
, e dois persistentes, idConfiguracaoGRUInscricao
e idConfiguracaoGRUMensalidade
, correspondentes. Os atributos transientes são utilizados para visualização no formulário e no processador para persistir as configurações. Como não se pode fazer o relacionamento entre objetos em bases distintas, persistimos apenas o ID das configurações.
Uma vez informado os dados da configuração, no processador utilizado para persistir o curso lato sensu, cadastramos a configuração da GRU:
- ProcessadorCursoLato.java
GenericDAO comumDao = DAOFactory.getGeneric(Sistema.COMUM); try { ConfiguracaoGRU configInscricao = curso.getConfiguracaoGRUInscricao(); ConfiguracaoGRU configMensalidade = curso.getConfiguracaoGRUMensalidade(); if (configInscricao != null) { if (configInscricao.getGrupoEmissaoGRU().getId() == 0) comumDao.create(configInscricao.getGrupoEmissaoGRU()); if (configInscricao.getId() == 0) comumDao.create(configInscricao); curso.setIdConfiguracaoGRUInscricao(configInscricao.getId()); } else curso.setIdConfiguracaoGRUInscricao(null); if (configMensalidade != null) { if (configMensalidade.getGrupoEmissaoGRU().getId() == 0) comumDao.create(configMensalidade.getGrupoEmissaoGRU()); if (configMensalidade.getId() == 0) comumDao.create(configMensalidade); curso.setIdConfiguracaoGRUMensalidade(configMensalidade.getId()); } } catch (HibernateException e) { throw new DAOException(e); } finally { comumDao.close(); } daoLato.update(curso);
Neste exemplo, quando o aluno lista suas GRUs para pagamento de mensalidade (linhas 6 a 15), o desenvolvedor busca pelas mesmas. Não existindo, ele deverá criar em banco as GRUs para o pagamento da mensalidade (linhas 17 a 33):
- MensalidadeCursoLatoMBean.java
public String listarDiscente() throws ArqException { if (!getDiscenteUsuario().getCurso().isLato()) { addMensagemErro("A lista de mensalidades está disponível apenas para discentes de lato sensu"); return null; } MensalidadeCursoLatoDao dao = getDAO(MensalidadeCursoLatoDao.class); CursoLato cursoLato = dao.findByPrimaryKey(getDiscenteUsuario().getCurso().getId(), CursoLato.class); if (cursoLato.getValor() <= 0 || cursoLato.getQtdMensalidades() <= 0) { addMensagemErro("O seu curso não possui mensalidades"); return null; } else if (cursoLato.getIdConfiguracaoGRUMensalidade() == null) { addMensagemErro("As mensalidades não podem ser geradas automaticamente. Entre em contato com a secretaria do seu curso para o pagamento das mensalidades."); return null; } resultadosBusca = dao.findAllByDiscente(getDiscenteUsuario().getId()); // se não há mensalidade cadastrada, chamar o processador para criar em banco. if (isEmpty(resultadosBusca)) { MovimentoCadastro mov = new MovimentoCadastro(); mov.setObjMovimentado(getDiscenteUsuario()); mov.setCodMovimento(SigaaListaComando.CRIAR_MENSALIDADES_CURSO_LATO); prepareMovimento(SigaaListaComando.CRIAR_MENSALIDADES_CURSO_LATO); try { execute(mov); } catch (Exception e) { if (e instanceof NegocioException) addMensagemErro(e.getMessage()); else addMensagemErroPadrao(); notifyError(e); return null; } resultadosBusca = dao.findAllByDiscente(getDiscenteUsuario().getId()); } // carrega os objetos GRU transientes Collection<Integer> ids = new ArrayList<Integer>(); for (MensalidadeCursoLato mensalidade : resultadosBusca) ids.add(mensalidade.getIdGRU()); for (GuiaRecolhimentoUniao gru : GuiaRecolhimentoUniaoHelper.getGRUByID(ids)) { for (MensalidadeCursoLato mensalidade : resultadosBusca) { if (mensalidade.getIdGRU() == gru.getId()) mensalidade.setGru(gru); } } return forward("/lato/mensalidade/lista_discente.jsp"); }
O PDF da GRU é gerado passando apenas o ID da GRU:
- MensalidadeCursoLatoMBean.java
public String imprimirGRU() throws ArqException, NegocioException, IOException { populateObj(true); if (obj == null) { addMensagem(MensagensArquitetura.OBJETO_NAO_FOI_SELECIONADO); obj = new MensalidadeCursoLato(); return null; } getCurrentResponse().setContentType("application/pdf"); getCurrentResponse().addHeader("Content-Disposition", "attachment;filename=mensalidade_"+obj.getOrdem()+".pdf"); GuiaRecolhimentoUniaoHelper.gerarPDF(getCurrentResponse().getOutputStream(), obj.getIdGRU()); FacesContext.getCurrentInstance().responseComplete(); return null; }
Exemplo de Validação do Pagamento da GRU
No caso de uso do exemplo que tomamos anteriormente do Vestibular, a validação da inscrição não depende somente do pagamento da GRU, mas em outros casos é suficiente validar o pagamento desta.
Como a consulta do pagamento da GRU é feita no banco comum, é indicado realizar a consulta uma vez e registrar no seu caso de uso o pagamento. Assim, temos na classe InscricaoVestibular
o atributo gruQuitada
que funcionará com um “cache”, ou seja, dispensaria novas consultas ao banco comum.
No código abaixo, realizamos uma busca pelas inscrições que ainda não tem indicação de GRU paga (linhas 2 a 15):
- InscricaoVestibularDao.java
public Collection<InscricaoVestibular> verificaInscricaoGRUPaga(int idProcessoSeletivo) throws HibernateException, DAOException { String projecao = "inscricao.id," + " inscricao.numeroInscricao," + " inscricao.pessoa.id," + " inscricao.pessoa.nome," + " inscricao.pessoa.cpf_cnpj," + " inscricao.idGRU"; String hql = "select " + projecao + " from InscricaoVestibular inscricao" + " where inscricao.processoSeletivo.id = :idProcessoSeletivo" + " and (inscricao.gruQuitada is null or inscricao.gruQuitada = false)"; Query q = getSession().createQuery(hql); q.setInteger("idProcessoSeletivo", idProcessoSeletivo); @SuppressWarnings("unchecked") Collection<InscricaoVestibular> lista = HibernateUtils.parseTo(q.list(), projecao, InscricaoVestibular.class, "inscricao"); if (!isEmpty(lista)) { Collection<Integer> idsGRUsPagas = new ArrayList<Integer>(); for (InscricaoVestibular inscricao : lista) if (inscricao.getIdGRU() != null) idsGRUsPagas.add(inscricao.getIdGRU()); idsGRUsPagas = GuiaRecolhimentoUniaoHelper.isGRUQuitada(idsGRUsPagas); if (!isEmpty(idsGRUsPagas)) { Iterator<InscricaoVestibular> iterator = lista.iterator(); while (iterator.hasNext()) { if (!idsGRUsPagas.contains(iterator.next().getIdGRU())) iterator.remove(); } return lista; } } return null; }
Em seguida, consultamos no banco comum e verificamos quais GRUs foram pagas, passando uma lista de IDs (linhas 17 a 21). Marcamos as inscrições que tem GRU pagas utilizando o retorno da consulta (linhas 22 a 29).
Retornamos ao usuário a lista de inscrições que terão a GRU validada. O usuário confirma a operação e atualizamos a inscrição como tendo a GRU quitada:
- ProcessadorMarcarGRUsQuitadas.java
public Object execute(Movimento mov) throws NegocioException, ArqException, RemoteException { MovimentoCadastro movimento = ((MovimentoCadastro) mov); @SuppressWarnings("unchecked") Collection<InscricaoVestibular> inscricoes = (Collection<InscricaoVestibular>) movimento.getColObjMovimentado(); GenericDAO dao = getGenericDAO(movimento); try { for (InscricaoVestibular inscricao : inscricoes) { dao.updateField(InscricaoVestibular.class, inscricao.getId(), "gruQuitada", true); } } finally { dao.close(); } return null; }
Esta forma de trabalhar pode ser utilizada em outros casos de uso tais como Multa de Biblioteca ou Mensalidade de Curso Lato Sensu.