Subversion Repositories Integrator Subversion

Rev

Blame | Last modification | View Log | Download | RSS feed

package br.gov.al.saude.srv.core.aceitacao.plugin;

import static br.gov.al.saude.test.ConstantesTestHelper.DIRETORIO_DOCUMENTOS;
import static br.gov.al.saude.test.ConstantesTestHelper.DIRETORIO_FOTOS;
import static br.gov.al.saude.test.ConstantesTestHelper.VALOR_VAZIO;
import static br.gov.al.saude.test.ConstantesTestHelper.MensagensRetorno.DADOS_GRAVADOS_COM_SUCESSO;
import static br.gov.al.saude.test.ConstantesTestHelper.MensagensRetorno.FICHA_CADASTRARL_SERVIDOR_ATUALIZADA;
import static br.gov.al.saude.test.ConstantesTestHelper.MensagensRetorno.SERVIDOR_HOMOLOGADO_COM_SUCESSO;
import static br.gov.al.saude.test.ConstantesTestHelper.MensagensRetorno.SERVIDOR_VALIDADO_COM_SUCESSO;
import static br.gov.al.saude.test.ConstantesTestHelper.UtilConstantes.CINCO_ITENS;
import static br.gov.al.saude.test.ConstantesTestHelper.UtilConstantes.PRIMEIRO_REGISTRO;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

import net.sf.jasperreports.engine.JasperPrint;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.context.SecurityContextImpl;

import br.gov.al.saude.framework.core.consulta.restricao.Restricoes;
import br.gov.al.saude.framework.core.generic.auditoria.RevisaoAuditoria;
import br.gov.al.saude.framework.core.util.ConversorDeTipo;
import br.gov.al.saude.framework.core.util.DataUtils;
import br.gov.al.saude.framework.core.util.RelatorioUtils;
import br.gov.al.saude.framework.core.util.StringUtils;
import br.gov.al.saude.framework.core.util.VerificadorUtil;
import br.gov.al.saude.framework.model.OrgaoView;
import br.gov.al.saude.framework.model.PessoaFisicaView;
import br.gov.al.saude.framework.model.SetorView;
import br.gov.al.saude.framework.model.UfView;
import br.gov.al.saude.framework.model.UsuarioView;
import br.gov.al.saude.framework.security.authentication.entity.UserIndra;
import br.gov.al.saude.framework.security.filter.IndraAuthentication;
import br.gov.al.saude.srv.core.application.banco.BancoFacade;
import br.gov.al.saude.srv.core.application.cargo.CargoFacade;
import br.gov.al.saude.srv.core.application.carreira.CarreiraFacade;
import br.gov.al.saude.srv.core.application.conselho.ConselhoFacade;
import br.gov.al.saude.srv.core.application.cursoestagio.CursoEstagioFacade;
import br.gov.al.saude.srv.core.application.deficiencia.DeficienciaFacade;
import br.gov.al.saude.srv.core.application.emissorrelatorio.EmissorRelatorioFacade;
import br.gov.al.saude.srv.core.application.especialidade.EspecialidadeFacade;
import br.gov.al.saude.srv.core.application.evento.EventoFacade;
import br.gov.al.saude.srv.core.application.eventoservidor.EventoServidorFacade;
import br.gov.al.saude.srv.core.application.formaingresso.FormaIngressoFacade;
import br.gov.al.saude.srv.core.application.funcao.FuncaoFacade;
import br.gov.al.saude.srv.core.application.grauinstrucao.GrauInstrucaoFacade;
import br.gov.al.saude.srv.core.application.instituicaoestagio.InstituicaoEstagioFacade;
import br.gov.al.saude.srv.core.application.nacionalidade.NacionalidadeFacade;
import br.gov.al.saude.srv.core.application.orgao.OrgaoFacade;
import br.gov.al.saude.srv.core.application.parametro.ParametroFacade;
import br.gov.al.saude.srv.core.application.programacaoferias.ProgramacaoFeriasFacade;
import br.gov.al.saude.srv.core.application.servidor.ServidorFacade;
import br.gov.al.saude.srv.core.application.setorview.SetorViewFacade;
import br.gov.al.saude.srv.core.application.situacaoservidor.SituacaoServidorFacade;
import br.gov.al.saude.srv.core.application.uf.UfFacade;
import br.gov.al.saude.srv.core.application.unidade.UnidadeFacade;
import br.gov.al.saude.srv.model.Banco;
import br.gov.al.saude.srv.model.Cargo;
import br.gov.al.saude.srv.model.Carreira;
import br.gov.al.saude.srv.model.Conselho;
import br.gov.al.saude.srv.model.CursoEstagio;
import br.gov.al.saude.srv.model.Deficiencia;
import br.gov.al.saude.srv.model.Especialidade;
import br.gov.al.saude.srv.model.Evento;
import br.gov.al.saude.srv.model.EventoServidorDadoFuncional;
import br.gov.al.saude.srv.model.EventoServidorDadoFuncionalAcesso;
import br.gov.al.saude.srv.model.EventoServidorDadoFuncionalDocumento;
import br.gov.al.saude.srv.model.EventoServidorDadoFuncionalExigeProcesso;
import br.gov.al.saude.srv.model.EventoServidorDadoFuncionalExigePublicacao;
import br.gov.al.saude.srv.model.EventoServidorDadoFuncionalExigeVigencia;
import br.gov.al.saude.srv.model.EventoServidorDadoFuncionalProgressaoFuncionalHorizontal;
import br.gov.al.saude.srv.model.EventoServidorDadoFuncionalProgressaoFuncionalVertical;
import br.gov.al.saude.srv.model.EventoServidorDadoFuncionalRedistribuicaoCessao;
import br.gov.al.saude.srv.model.EventoServidorDadoFuncionalRemocao;
import br.gov.al.saude.srv.model.EventoServidorDadoFuncionalTransferenciaReconducao;
import br.gov.al.saude.srv.model.FormaIngresso;
import br.gov.al.saude.srv.model.Funcao;
import br.gov.al.saude.srv.model.GrauInstrucao;
import br.gov.al.saude.srv.model.InstituicaoEstagio;
import br.gov.al.saude.srv.model.Nacionalidade;
import br.gov.al.saude.srv.model.Orgao;
import br.gov.al.saude.srv.model.Parametro;
import br.gov.al.saude.srv.model.ProgramacaoFerias;
import br.gov.al.saude.srv.model.ProgramacaoFeriasServidorDadoFuncional;
import br.gov.al.saude.srv.model.Servidor;
import br.gov.al.saude.srv.model.ServidorContaBancaria;
import br.gov.al.saude.srv.model.ServidorDadoFuncional;
import br.gov.al.saude.srv.model.ServidorDadoFuncionalConselho;
import br.gov.al.saude.srv.model.ServidorDadoFuncionalContratadoEstagiario;
import br.gov.al.saude.srv.model.ServidorDadoFuncionalContratadoPrestadorProcessoSeletivo;
import br.gov.al.saude.srv.model.ServidorDadoFuncionalMatricula;
import br.gov.al.saude.srv.model.ServidorDadoFuncionalMatriculaCarreira;
import br.gov.al.saude.srv.model.ServidorDependente;
import br.gov.al.saude.srv.model.ServidorLocalizacaoArquivo;
import br.gov.al.saude.srv.model.ServidorQualificacao;
import br.gov.al.saude.srv.model.SituacaoServidor;
import br.gov.al.saude.srv.model.Unidade;
import br.gov.al.saude.srv.model.dto.CargoDTO;
import br.gov.al.saude.srv.model.dto.EventoServidorDTO;
import br.gov.al.saude.srv.model.dto.FuncaoDTO;
import br.gov.al.saude.srv.model.dto.ParametroConsultaCargoDTO;
import br.gov.al.saude.srv.model.dto.ParametroConsultaFuncaoDTO;
import br.gov.al.saude.srv.model.dto.ParametroConsultaServidorAtivoDTO;
import br.gov.al.saude.srv.model.dto.ParametroConsultaServidorDTO;
import br.gov.al.saude.srv.model.dto.ParametrosRelatorioAcompanhamentoServidorDTO;
import br.gov.al.saude.srv.model.dto.ProgramacaoFeriasDTO;
import br.gov.al.saude.srv.model.dto.ServidorAtivoDTO;
import br.gov.al.saude.srv.model.dto.ServidorDTO;
import br.gov.al.saude.srv.model.enums.TipoClasseCarreira;
import br.gov.al.saude.srv.model.enums.TipoFuncao;
import br.gov.al.saude.srv.model.enums.TipoNivelCarreira;
import br.gov.al.saude.srv.model.enums.TipoPublicacao;
import br.gov.al.saude.srv.model.enums.TipoRelatorioAcompanhamento;
import br.gov.al.saude.srv.model.enums.TipoRelatorioQuantitativo;
import br.gov.al.saude.srv.model.enums.TipoRemocao;
import br.gov.al.saude.srv.model.enums.TipoSituacaoCadastral;
import br.gov.al.saude.srv.model.enums.TipoSituacaoEvento;
import br.gov.al.saude.srv.model.enums.TipoVinculo;
import br.gov.al.saude.test.aceitacao.helper.CenarioTestHelper;
import br.gov.al.saude.test.aceitacao.plugin.TestPlugin;
import br.gov.al.saude.test.builder.BancoBuilder;
import br.gov.al.saude.test.builder.CargoBuilder;
import br.gov.al.saude.test.builder.DeficienciaBuilder;
import br.gov.al.saude.test.builder.EspecialidadeBuilder;
import br.gov.al.saude.test.builder.EventoServidorDadoFuncionalAcessoBuilder;
import br.gov.al.saude.test.builder.EventoServidorDadoFuncionalBuilder;
import br.gov.al.saude.test.builder.EventoServidorDadoFuncionalDocumentoBuilder;
import br.gov.al.saude.test.builder.EventoServidorDadoFuncionalExigeProcessoBuilder;
import br.gov.al.saude.test.builder.EventoServidorDadoFuncionalExigePublicacaoBuilder;
import br.gov.al.saude.test.builder.EventoServidorDadoFuncionalExigeVigenciaBuilder;
import br.gov.al.saude.test.builder.EventoServidorDadoFuncionalProgressaoFuncionalHorizontalBuilder;
import br.gov.al.saude.test.builder.EventoServidorDadoFuncionalProgressaoFuncionalVerticalBuilder;
import br.gov.al.saude.test.builder.EventoServidorDadoFuncionalRedistribuicaoCessaoBuilder;
import br.gov.al.saude.test.builder.EventoServidorDadoFuncionalRemocaoBuilder;
import br.gov.al.saude.test.builder.EventoServidorDadoFuncionalTransferenciaReconducaoBuilder;
import br.gov.al.saude.test.builder.FormaIngressoBuilder;
import br.gov.al.saude.test.builder.FuncaoBuilder;
import br.gov.al.saude.test.builder.GrauInstrucaoBuilder;
import br.gov.al.saude.test.builder.NacionalidadeBuilder;
import br.gov.al.saude.test.builder.OrgaoBuilder;
import br.gov.al.saude.test.builder.OrgaoViewBuilder;
import br.gov.al.saude.test.builder.ParametroBuilder;
import br.gov.al.saude.test.builder.ParametroConsultaServidorAtivoDTOBuilder;
import br.gov.al.saude.test.builder.ParametrosRelatorioAcompanhamentoServidorDTOBuilder;
import br.gov.al.saude.test.builder.ProgramacaoFeriasServidorDadoFuncionalBuilder;
import br.gov.al.saude.test.builder.ServidorBuilder;
import br.gov.al.saude.test.builder.ServidorContaBancariaBuilder;
import br.gov.al.saude.test.builder.ServidorDadoFuncionalConselhoBuilder;
import br.gov.al.saude.test.builder.ServidorDadoFuncionalContratadoEstagiarioBuilder;
import br.gov.al.saude.test.builder.ServidorDadoFuncionalContratadoPrestadorProcessoSeletivoBuilder;
import br.gov.al.saude.test.builder.ServidorDadoFuncionalMatriculaBuilder;
import br.gov.al.saude.test.builder.ServidorDadoFuncionalMatriculaCarreiraBuilder;
import br.gov.al.saude.test.builder.ServidorDependenteBuilder;
import br.gov.al.saude.test.builder.ServidorLocalizacaoArquivoBuilder;
import br.gov.al.saude.test.builder.ServidorQualificacaoBuilder;
import br.gov.al.saude.test.builder.SetorViewBuilder;
import br.gov.al.saude.test.builder.SituacaoServidorBuilder;
import br.gov.al.saude.test.builder.UnidadeBuilder;
import br.gov.al.saude.test.builder.UsuarioViewBuilder;
import br.gov.al.saude.test.formatador.FormatadorServidorPorNossoNumero;
import br.gov.al.saude.test.formatador.impl.FormatadorDeMensagemImpl;
import br.gov.al.saude.test.util.Command;
import br.gov.al.saude.test.util.FileUtil;
import br.gov.al.saude.test.util.SrvConversorDeTipo;
import br.gov.al.saude.test.util.VerificadorLancamentoException;
import br.gov.al.saude.test.util.formatador.ContextoMensagem;

public class ApiTestPlugin implements TestPlugin {

        private CenarioTestHelper cenarioTestHelper;
        private ServidorFacade servidorFacade;
        private GrauInstrucaoFacade grauInstrucaoFacade;
        private NacionalidadeFacade nacionalidadeFacade;
        private DeficienciaFacade deficienciaFacade;
        private SituacaoServidorFacade situacaoServidorFacade;
        private CargoFacade cargoFacade;
        private FuncaoFacade funcaoFacade;
        private EspecialidadeFacade especialidadeFacade;
        private OrgaoFacade orgaoFacade;
        private FormaIngressoFacade formaIngressoFacade;
        private UnidadeFacade unidadeFacade;
        private SetorViewFacade setorViewFacade;
        private CarreiraFacade carreiraFacade;
        private ConselhoFacade conselhoFacade;
        private BancoFacade bancoFacade;
        private UfFacade ufFacade;
        private EmissorRelatorioFacade emissorRelatorioFacade;
        private InstituicaoEstagioFacade instituicaoEstagioFacade;
        private CursoEstagioFacade cursoEstagioFacade;
        private ParametroFacade parametroFacade;
        private EventoServidorFacade eventoServidorFacade;
        private EventoFacade eventoFacade;
        private ProgramacaoFeriasFacade programacaoFeriasFacade;

        public void setUp() throws Exception {
                cenarioTestHelper.limparBanco();
        }

        public void tearDown() throws Exception {}

        @Autowired
        public ApiTestPlugin(CenarioTestHelper cenarioTestHelper,
                                                 ServidorFacade servidorFacade,
                                                 GrauInstrucaoFacade grauInstrucaoFacade,
                                                 NacionalidadeFacade nacionalidadeFacade,
                                                 DeficienciaFacade deficienciaFacade,
                                                 SituacaoServidorFacade situacaoServidorFacade,
                                                 CargoFacade cargoFacade,
                                                 FuncaoFacade funcaoFacade,
                                                 EspecialidadeFacade especialidadeFacade,
                                                 OrgaoFacade orgaoExternoFacade,
                                                 UnidadeFacade unidadeFacade,
                                                 SetorViewFacade setorViewFacade,
                                                 CarreiraFacade carreiraFacade,
                                                 ConselhoFacade conselhoFacade,
                                                 BancoFacade bancoFacade,
                                                 UfFacade ufFacade,
                                                 EmissorRelatorioFacade emissorRelatorioFacade,
                                                 FormaIngressoFacade formaIngressoFacade,
                                                 InstituicaoEstagioFacade instituicaoEstagioFacade,
                                                 CursoEstagioFacade cursoEstagioFacade,
                                                 ParametroFacade parametroFacade,
                                                 EventoServidorFacade eventoServidorFacade,
                                                 ProgramacaoFeriasFacade programacaoFeriasFacade,
                                                 EventoFacade eventoFacade) {
               
                this.cenarioTestHelper = cenarioTestHelper;
                this.servidorFacade = servidorFacade;
                this.grauInstrucaoFacade = grauInstrucaoFacade;
                this.nacionalidadeFacade = nacionalidadeFacade;
                this.deficienciaFacade = deficienciaFacade;
                this.situacaoServidorFacade = situacaoServidorFacade;
                this.cargoFacade = cargoFacade;
                this.funcaoFacade = funcaoFacade;
                this.especialidadeFacade = especialidadeFacade;
                this.orgaoFacade = orgaoExternoFacade;
                this.unidadeFacade = unidadeFacade;
                this.setorViewFacade = setorViewFacade;
                this.carreiraFacade = carreiraFacade;
                this.conselhoFacade = conselhoFacade;
                this.bancoFacade = bancoFacade;
                this.ufFacade = ufFacade;
                this.emissorRelatorioFacade = emissorRelatorioFacade;
                this.formaIngressoFacade = formaIngressoFacade;
                this.instituicaoEstagioFacade = instituicaoEstagioFacade;
                this.cursoEstagioFacade = cursoEstagioFacade;
                this.parametroFacade = parametroFacade;
                this.eventoServidorFacade = eventoServidorFacade;
                this.programacaoFeriasFacade = programacaoFeriasFacade;
                this.eventoFacade = eventoFacade;
        }

        @Override
        public String consultarServidor(String cpf, String nome, String matricula, String nossoNumero, String situacaoCadastral) {
                final ParametroConsultaServidorDTO parametroConsultaServidorDTO = criarParametroConsultaServidorDTO(cpf, nome, matricula,
                                nossoNumero, TipoSituacaoCadastral.parse(situacaoCadastral));
               
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                List<ServidorDTO> servidores = servidorFacade.consultar(parametroConsultaServidorDTO);
                               
                                return cenarioTestHelper.gerarMensagemConsultar(servidores);                           
                        }
                });
        }
       
        private ParametroConsultaServidorDTO criarParametroConsultaServidorDTO(String cpf, String nome, String matricula, String nossoNumero, TipoSituacaoCadastral tipoSituacaoCadastral) {
                return new ParametroConsultaServidorDTO(cpf, nome, StringUtils.valueLong(matricula), StringUtils.valueLong(nossoNumero), tipoSituacaoCadastral, 0, Integer.MAX_VALUE);
        }

        @Override
        public String consultarFuncao(String descricao, String nivel, String tipo, String ativo) {
                final ParametroConsultaFuncaoDTO parametroConsultaFuncaoDTO = criarParametroConsultaFuncaoDTO(descricao, nivel, tipo, ativo);
               
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                List<Funcao> funcoes = funcaoFacade.consultar(parametroConsultaFuncaoDTO);
                                return cenarioTestHelper.gerarMensagemConsultar(funcoes);              
                        }
                });
        }
       
        @Override
        public String cadastrarFuncao(String descricao, String nivel, String tipo, String quantidadeVagas) {
                final Funcao funcao = new FuncaoBuilder().comDescricao(descricao).comNivel(nivel).comTipoFuncao(tipo).comQuantidadeVagas(quantidadeVagas).build();
               
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                funcaoFacade.cadastrar(funcao);
                                Funcao funcaoConsultada = cenarioTestHelper.consultarFuncaoPorSequencial(funcao.getCodigo());
                               
                                return DADOS_GRAVADOS_COM_SUCESSO + cenarioTestHelper.gerarMensagem(funcaoConsultada);
                        }
                });
        }
       
        @Override
        public String alterarFuncao(String codigo, String descricao, String nivel, String tipo, String quantidadeVagas, String ativo) {
                final Funcao funcao = new FuncaoBuilder().comCodigo(codigo).comDescricao(descricao).comNivel(nivel).comTipoFuncao(tipo)
                                .comQuantidadeVagas(quantidadeVagas).comAtivo(ativo).build();
               
               
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                funcaoFacade.alterar(funcao);
                                Funcao funcaoConsultada = cenarioTestHelper.consultarFuncaoPorSequencial(funcao.getCodigo());
                               
                                return DADOS_GRAVADOS_COM_SUCESSO + cenarioTestHelper.gerarMensagem(funcaoConsultada);
                        }
                });
        }

        private ParametroConsultaFuncaoDTO criarParametroConsultaFuncaoDTO(String descricao, String nivel, String tipo, String ativo) {
                ParametroConsultaFuncaoDTO parametroConsultaFuncaoDTO = new ParametroConsultaFuncaoDTO();
                parametroConsultaFuncaoDTO.setDescricao(descricao);
                parametroConsultaFuncaoDTO.setNivel(nivel);
                parametroConsultaFuncaoDTO.setTipo(TipoFuncao.parse(tipo));
                parametroConsultaFuncaoDTO.setAtivo(SrvConversorDeTipo.converterStringParaBoolean(ativo));
                parametroConsultaFuncaoDTO.setPrimeiroRegistro(0);
                parametroConsultaFuncaoDTO.setTamanhoPagina(CINCO_ITENS);
                return parametroConsultaFuncaoDTO;
        }
       
        private ParametroConsultaCargoDTO criarParametroConsultaCargoDTO(String descricao, String sequencialGrauInstrucao, String ativo) {
                GrauInstrucao grauInstrucao = null;
               
                if (VerificadorUtil.naoEstaNulo(sequencialGrauInstrucao)) {
                        grauInstrucao = new GrauInstrucaoBuilder().comCodigo(sequencialGrauInstrucao).build();
                }
               
                return new ParametroConsultaCargoDTO(descricao, grauInstrucao,  SrvConversorDeTipo.converterStringParaBoolean(ativo), 0, CINCO_ITENS);
        }

        @Override
        public String consultarDadosServidor(final String sequencialPessoa) {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                Servidor servidorConsultado = servidorFacade.consultarServidorPorSequencial(new Long(sequencialPessoa));
                                return cenarioTestHelper.gerarMensagem(servidorConsultado);
                        }
                });
        }
       
        @Override
        public String consultarFuncao(String descricao, String nivel, String tipo) {
                final ParametroConsultaFuncaoDTO parametroConsultaFuncaoDTO = criarParametroConsultaFuncaoDTO(descricao, nivel, tipo, null);

                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                List<FuncaoDTO> funcoes = funcaoFacade.consultarFuncoesAtivas(parametroConsultaFuncaoDTO);
                                return cenarioTestHelper.gerarMensagemConsultar(funcoes);
                        }
                });
        }
       
        @Override
        public String consultarCargo(String descricao, String codigoGrauInstrucao) {
                final ParametroConsultaCargoDTO parametroConsultaCargoDTO = criarParametroConsultaCargoDTO(descricao, codigoGrauInstrucao, null);
               
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                List<CargoDTO> cargos = cargoFacade.consultarCargosAtivos(parametroConsultaCargoDTO);
                                return cenarioTestHelper.gerarMensagemConsultar(cargos);
                        }
                });
        }

        @Override
        public String listarGrauInstrucao() {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                       
                        @Override
                        public String execute() throws Exception {
                                List<GrauInstrucao> listaGrauInstrucao = grauInstrucaoFacade.consultarTodos(new GrauInstrucao());
                                return cenarioTestHelper.gerarMensagemConsultar(listaGrauInstrucao);
                        }
                });
        }

        @Override
        public String listarNacionalidade() {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                       
                        @Override
                        public String execute() throws Exception {
                                List<Nacionalidade> listaNacionalidade = nacionalidadeFacade.consultarTodos(new Nacionalidade());
                                return cenarioTestHelper.gerarMensagemConsultar(listaNacionalidade);
                        }
                });
        }

        @Override
        public String listarDeficiencia() {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                       
                        @Override
                        public String execute() throws Exception {
                                List<Deficiencia> listaDeficiencia = deficienciaFacade.consultarTodos(new Deficiencia());
                                return cenarioTestHelper.gerarMensagemConsultar(listaDeficiencia);
                        }
                });
        }

        @Override
        public String listarSituacaoServidor() {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                       
                        @Override
                        public String execute() throws Exception {
                                List<SituacaoServidor> listaSituacaoServidor = situacaoServidorFacade.consultarTodos(new SituacaoServidor());
                                return cenarioTestHelper.gerarMensagemConsultar(listaSituacaoServidor);
                        }
                });
        }

        @Override
        public String listarCargo() {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                       
                        @Override
                        public String execute() throws Exception {
                                List<Cargo> listaCargo = cargoFacade.consultarTodos(new Cargo());
                                return cenarioTestHelper.gerarMensagemConsultar(listaCargo);
                        }
                });
        }
       
        @Override
        public String listarFuncao() {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                       
                        @Override
                        public String execute() throws Exception {
                                List<Funcao> listaFuncao = funcaoFacade.consultarTodos(new Funcao());
                                return cenarioTestHelper.gerarMensagemConsultar(listaFuncao);
                        }
                });
        }

        @Override
        public String listarEspecialidade() {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                       
                        @Override
                        public String execute() throws Exception {
                                List<Especialidade> listaEspecialidade = especialidadeFacade.consultarTodos(new Especialidade());
                                return cenarioTestHelper.gerarMensagemConsultar(listaEspecialidade);
                        }
                });
        }

        @Override
        public String listarOrgaoOrigem() {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                       
                        @Override
                        public String execute() throws Exception {
                                List<Orgao> listaOrgaoOrigem = orgaoFacade.consultarTodos(new Orgao());
                                return cenarioTestHelper.gerarMensagemConsultar(listaOrgaoOrigem);
                        }
                });
        }

        @Override
        public String listarUnidade() {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                       
                        @Override
                        public String execute() throws Exception {
                                List<Unidade> listaUnidade = unidadeFacade.consultarTodos(new Unidade());
                                return cenarioTestHelper.gerarMensagemConsultar(listaUnidade);
                        }
                });
        }

        @Override
        public String listarSetor() {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                       
                        @Override
                        public String execute() throws Exception {
                                List<SetorView> listaSetor = setorViewFacade.consultarTodos(new SetorView());
                                return cenarioTestHelper.gerarMensagemConsultar(listaSetor);
                        }
                });
        }
       
        @Override
        public String listarCarreira() {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                       
                        @Override
                        public String execute() throws Exception {
                                List<Carreira> listaCarreira = carreiraFacade.consultarTodos(new Carreira());
                                return cenarioTestHelper.gerarMensagemConsultar(listaCarreira);
                        }
                });
        }
       
        @Override
        public String listarConselho() {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                       
                        @Override
                        public String execute() throws Exception {
                                List<Conselho> listaConselho = conselhoFacade.consultarTodos(new Conselho());
                                return cenarioTestHelper.gerarMensagemConsultar(listaConselho);
                        }
                });
        }
       
        @Override
        public String listarBanco() {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                       
                        @Override
                        public String execute() throws Exception {
                                List<Banco> listaBanco = bancoFacade.consultarTodos(new Banco());
                                return cenarioTestHelper.gerarMensagemConsultar(listaBanco);
                        }
                });
        }

        @Override
        public String listarUf() {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                       
                        @Override
                        public String execute() throws Exception {
                                List<UfView> listaUf = ufFacade.consultarTodos(new UfView());
                                return cenarioTestHelper.gerarMensagemConsultar(listaUf);
                        }
                });
        }

        @Override
        public String consultarPessoaFisica(final String sequencialPessoa) {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                       
                        @Override
                        public String execute() throws Exception {
                                PessoaFisicaView pessoaConsultada = servidorFacade.consultarPessoaPorSequencial(Long.parseLong(sequencialPessoa));
                                return cenarioTestHelper.gerarMensagem(pessoaConsultada);
                        }
                });
        }
       
        @Override
        public String emitirFichaCadastral(final String sequencialPessoa) {

                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                JasperPrint relatorioGerado = servidorFacade.emitirFichaCadastral(Long.parseLong(sequencialPessoa));
                                return RelatorioUtils.extrairTextoDoJasperPrintIhGeraMensagemRelatorio(relatorioGerado);
                        }
                });
        }

        @Override
        public String atualizarFichaCadastralServidor(final String sequencialPessoa, String foto, String codigoGrauInstrucao, String codigoNacionalidade,
                        String codigoDeficiencia, String observacao, String localizacaoArquivo, String dadosBancarios, String dependentes, String qualificacoes,
                        String dadosFuncionais, String dadosFuncionaisMatricula, String dadosFuncionaisMatriculaCarreira,
                        String dadosFuncionaisContratado, String dadosFuncionaisContratadoEstagiario, String dadosFuncionaisContratadoProcessoSeletivo,
                        String sequencialUsuario) {

                final Servidor servidor = gerarServidor(sequencialPessoa, foto, codigoGrauInstrucao, codigoNacionalidade,
                                codigoDeficiencia, observacao, localizacaoArquivo, dadosBancarios, dependentes, qualificacoes,
                                dadosFuncionais, dadosFuncionaisMatricula, dadosFuncionaisMatriculaCarreira,
                                dadosFuncionaisContratado, dadosFuncionaisContratadoEstagiario, dadosFuncionaisContratadoProcessoSeletivo,
                                sequencialUsuario);

                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                servidorFacade.atualizarServidor(servidor);
                                Servidor servidorConsultado = cenarioTestHelper.consultarServidorPorSequencial(Long.parseLong(sequencialPessoa));
                                return DADOS_GRAVADOS_COM_SUCESSO + cenarioTestHelper.gerarMensagem(servidorConsultado);
                        }
                });
        }

        @Override
        public String alterarSituacaoCadastralServidor(final String sequencialPessoa, String sequencialUsuario, String situacaoCadastral) {

                Servidor servidorConsultado = cenarioTestHelper.consultarServidorPorSequencial(Long.parseLong(sequencialPessoa));
                UsuarioView usuarioAlteracao = cenarioTestHelper.consultarUsuarioViewComPermissoesScaPorSequencial(Long.parseLong(sequencialUsuario));
                final Servidor servidor = new ServidorBuilder(servidorConsultado).comUsuarioAlteracaoSituacaoCadastral(usuarioAlteracao).build();
                final TipoSituacaoCadastral situacao = TipoSituacaoCadastral.parse(situacaoCadastral);

                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                servidorFacade.alterarSituacaoFichaCadastral(servidor, situacao);
                                Servidor servidorModificado = cenarioTestHelper.consultarServidorPorSequencial(Long.parseLong(sequencialPessoa));
                                return getMensagemRetornoAlterarSituacaoCadastral(situacao) + cenarioTestHelper.gerarMensagem(servidorModificado);
                        }
                });
        }
       
        private String getMensagemRetornoAlterarSituacaoCadastral(TipoSituacaoCadastral situacao) {
                return situacao.equals(TipoSituacaoCadastral.HOMOLOGADO) ? SERVIDOR_HOMOLOGADO_COM_SUCESSO : SERVIDOR_VALIDADO_COM_SUCESSO;
        }

        @Override
        public String emitirRelatorioAcompanhamentoServidor(final String tipoSexo, final String tipoEstadoCivil,
                        final String codigoGrauInstrucao, final String situacaoCadastral, final String tipoVinculo, final String codigoFormaIngresso, final String codigoSituacaoServidor,
                        final String cargaHoraria, final String codigoCargo, final String codigoFuncao, final String codigoEspecialidade,
                        final String codigoOrgaoOrigem, final String codigoOrgaoLotacao, final String unidadeExercicio, final String unidadeLotacao,
                        String periodoDataInicioNascimento, String periodoDataFimNascimento,
                        String periodoDataInicioAdmissao, String periodoDataFimAdmissao, String localizacaoArquivoCaixa,       
                        String localizacaoArquivoPasta, String localizacaoArquivoPrateleira, String localizacaoArquivoLado,      String campoDeAgrupamento) {
               
                final ParametrosRelatorioAcompanhamentoServidorDTO parametrosRelatorioAcompanhamentoServidorDTO =
                                new ParametrosRelatorioAcompanhamentoServidorDTOBuilder()
                                        .comSexoServidor(tipoSexo)
                                        .comEstadoCivilServidor(tipoEstadoCivil)
                                        .comGrauInstrucaoServidor(gerarGrauInstrucao(codigoGrauInstrucao))
                                        .comTipoSituacaoCadastral(situacaoCadastral)
                                        .comTipoVinculo(tipoVinculo)
                                        .comFormaIngresso(gerarFormaIngresso(codigoFormaIngresso))
                                        .comSituacaoServidor(gerarSituacaoServidor(codigoSituacaoServidor))
                                        .comCargaHoraria(converterStringParaInteger(cargaHoraria))
                                        .comCargoServidor(gerarCargo(codigoCargo))
                                        .comFuncaoServidor(gerarFuncao(codigoFuncao))
                                        .comEspecialidadeServidor(gerarEspecialidade(codigoEspecialidade))
                                        .comOrgaoOrigemServidor(gerarOrgao(codigoOrgaoOrigem))
                                        .comOrgaoLotacaoServidor(gerarOrgao(codigoOrgaoLotacao))
                                        .comUnidadeExercicioServidor(gerarUnidade(unidadeExercicio))
                                        .comUnidadeLotacaoServidor(gerarUnidade(unidadeLotacao))
                                        .comTipoRelatorioAcompanhamento(TipoRelatorioAcompanhamento.ACOMPANHAMENTO)
                                        .comPeriodoDataInicioNascimento(periodoDataInicioNascimento)
                                        .comPeriodoDataFimNascimento(periodoDataFimNascimento)
                                        .comPeriodoDataInicioAdmissao(periodoDataInicioAdmissao)
                                        .comPeriodoDataFimAdmissao(periodoDataFimAdmissao)
                                        .comLocalizacaoArquivoCaixa(localizacaoArquivoCaixa)
                                        .comLocalizacaoArquivoPasta(localizacaoArquivoPasta)
                                        .comLocalizacaoArquivoPrateleira(localizacaoArquivoPrateleira)
                                        .comLocalizacaoArquivoLado(localizacaoArquivoLado)
                                        .comCampoAgrupamento(campoDeAgrupamento)
                                        .build();

                        return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                                @Override
                                public String execute() throws Exception {
                                        JasperPrint relatorioGerado = emissorRelatorioFacade.emitirRelatorioAcompanhamentoServidor(parametrosRelatorioAcompanhamentoServidorDTO);
                                        return RelatorioUtils.extrairTextoDoJasperPrintIhGeraMensagemRelatorio(relatorioGerado);
                                }
                        });
        }
       
        @Override
        public String emitirRelatorioAcompanhamentoServidorComDadosPessoais(final String tipoSexo, final String tipoEstadoCivil,
                        final String codigoGrauInstrucao,  final String situacaoCadastral, final String tipoVinculo, final      String formaIngresso, final String codigoSituacaoServidor,
                        final String cargaHoraria, final String codigoCargo, final String codigoFuncao, final String codigoEspecialidade,
                        final String codigoOrgaoOrigem, final String codigoOrgaoLotacao, final String unidadeExercicio, final String unidadeLotacao,
                        String periodoDataInicioNascimento, String periodoDataFimNascimento,
                        String periodoDataInicioAdmissao, String periodoDataFimAdmissao, String localizacaoArquivoCaixa,       
                        String localizacaoArquivoPasta, String localizacaoArquivoPrateleira, String localizacaoArquivoLado,      String campoDeAgrupamento) {

                        final ParametrosRelatorioAcompanhamentoServidorDTO parametrosRelatorioAcompanhamentoServidorDTO =
                                        new ParametrosRelatorioAcompanhamentoServidorDTOBuilder()
                                                .comSexoServidor(tipoSexo)
                                                .comEstadoCivilServidor(tipoEstadoCivil)
                                                .comGrauInstrucaoServidor(gerarGrauInstrucao(codigoGrauInstrucao))
                                                .comTipoSituacaoCadastral(situacaoCadastral)
                                                .comTipoVinculo(tipoVinculo)
                                                .comFormaIngresso(gerarFormaIngresso(formaIngresso))
                                                .comSituacaoServidor(gerarSituacaoServidor(codigoSituacaoServidor))
                                                .comCargaHoraria(converterStringParaInteger(cargaHoraria))
                                                .comCargoServidor(gerarCargo(codigoCargo))
                                                .comFuncaoServidor(gerarFuncao(codigoFuncao))
                                                .comEspecialidadeServidor(gerarEspecialidade(codigoEspecialidade))
                                                .comOrgaoOrigemServidor(gerarOrgao(codigoOrgaoOrigem))
                                                .comOrgaoLotacaoServidor(gerarOrgao(codigoOrgaoLotacao))
                                                .comUnidadeExercicioServidor(gerarUnidade(unidadeExercicio))
                                                .comUnidadeLotacaoServidor(gerarUnidade(unidadeLotacao))
                                                .comTipoRelatorioAcompanhamento(TipoRelatorioAcompanhamento.ACOMPANHAMENTO_DADOS_PESSOAIS)
                                                .comPeriodoDataInicioNascimento(periodoDataInicioNascimento)
                                                .comPeriodoDataFimNascimento(periodoDataFimNascimento)
                                                .comPeriodoDataInicioAdmissao(periodoDataInicioAdmissao)
                                                .comPeriodoDataFimAdmissao(periodoDataFimAdmissao)
                                                .comLocalizacaoArquivoCaixa(localizacaoArquivoCaixa)
                                                .comLocalizacaoArquivoPasta(localizacaoArquivoPasta)
                                                .comLocalizacaoArquivoPrateleira(localizacaoArquivoPrateleira)
                                                .comLocalizacaoArquivoLado(localizacaoArquivoLado)
                                                .comCampoAgrupamento(campoDeAgrupamento)
                                                .build();
               
                        return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                                @Override
                                public String execute() throws Exception {
                                        JasperPrint relatorioGerado = emissorRelatorioFacade.emitirRelatorioAcompanhamentoServidor(parametrosRelatorioAcompanhamentoServidorDTO);
                                        return RelatorioUtils.extrairTextoDoJasperPrintIhGeraMensagemRelatorio(relatorioGerado);
                                }
                        });
        }
       
        @Override
        public String emitirRelatorioAcompanhamentoServidorComDadosFuncionais(final String tipoSexo, final String tipoEstadoCivil,
                        final String codigoGrauInstrucao, final String situacaoCadastral, final String tipoVinculo, final String formaIngresso, final String codigoSituacaoServidor,
                        final String cargaHoraria, final String codigoCargo, final String codigoFuncao, final String codigoEspecialidade,
                        final String codigoOrgaoOrigem, final String codigoOrgaoLotacao, final String unidadeExercicio, final String unidadeLotacao,
                        String periodoDataInicioNascimento, String periodoDataFimNascimento,
                        String periodoDataInicioAdmissao, String periodoDataFimAdmissao, String localizacaoArquivoCaixa,       
                        String localizacaoArquivoPasta, String localizacaoArquivoPrateleira, String localizacaoArquivoLado,      String campoDeAgrupamento) {
               
                final ParametrosRelatorioAcompanhamentoServidorDTO parametrosRelatorioAcompanhamentoServidorDTO =
                                new ParametrosRelatorioAcompanhamentoServidorDTOBuilder()
                                        .comSexoServidor(tipoSexo)
                                        .comEstadoCivilServidor(tipoEstadoCivil)
                                        .comGrauInstrucaoServidor(gerarGrauInstrucao(codigoGrauInstrucao))
                                        .comTipoSituacaoCadastral(situacaoCadastral)
                                        .comTipoVinculo(tipoVinculo)
                                        .comFormaIngresso(gerarFormaIngresso(formaIngresso))
                                        .comSituacaoServidor(gerarSituacaoServidor(codigoSituacaoServidor))
                                        .comCargaHoraria(converterStringParaInteger(cargaHoraria))
                                        .comCargoServidor(gerarCargo(codigoCargo))
                                        .comFuncaoServidor(gerarFuncao(codigoFuncao))
                                        .comEspecialidadeServidor(gerarEspecialidade(codigoEspecialidade))
                                        .comOrgaoOrigemServidor(gerarOrgao(codigoOrgaoOrigem))
                                        .comOrgaoLotacaoServidor(gerarOrgao(codigoOrgaoLotacao))
                                        .comUnidadeExercicioServidor(gerarUnidade(unidadeExercicio))
                                        .comUnidadeLotacaoServidor(gerarUnidade(unidadeLotacao))
                                        .comTipoRelatorioAcompanhamento(TipoRelatorioAcompanhamento.ACOMPANHAMENTO_DADOS_FUNCIONAIS)
                                        .comPeriodoDataInicioNascimento(periodoDataInicioNascimento)
                                        .comPeriodoDataFimNascimento(periodoDataFimNascimento)
                                        .comPeriodoDataInicioAdmissao(periodoDataInicioAdmissao)
                                        .comPeriodoDataFimAdmissao(periodoDataFimAdmissao)
                                        .comLocalizacaoArquivoCaixa(localizacaoArquivoCaixa)
                                        .comLocalizacaoArquivoPasta(localizacaoArquivoPasta)
                                        .comLocalizacaoArquivoPrateleira(localizacaoArquivoPrateleira)
                                        .comLocalizacaoArquivoLado(localizacaoArquivoLado)
                                        .comCampoAgrupamento(campoDeAgrupamento)
                                        .build();

               
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                JasperPrint relatorioGerado = emissorRelatorioFacade.emitirRelatorioAcompanhamentoServidor(parametrosRelatorioAcompanhamentoServidorDTO);
                                return RelatorioUtils.extrairTextoDoJasperPrintIhGeraMensagemRelatorio(relatorioGerado);
                        }
                });
        }
       
        @Override
        public String emitirRelatorioAcompanhamentoServidorComDadosBancarios(final String tipoSexo, final String tipoEstadoCivil,
                        final String codigoGrauInstrucao, final String situacaoCadastral, final String tipoVinculo, final String codigoFormaIngresso, final String codigoSituacaoServidor,
                        final String cargaHoraria, final String codigoCargo, final String codigoFuncao, final String codigoEspecialidade,
                        final String codigoOrgaoOrigem, final String codigoOrgaoLotacao, final String unidadeExercicio, final String unidadeLotacao,
                        String periodoDataInicioNascimento, String periodoDataFimNascimento,
                        String periodoDataInicioAdmissao, String periodoDataFimAdmissao, String localizacaoArquivoCaixa,       
                        String localizacaoArquivoPasta, String localizacaoArquivoPrateleira, String localizacaoArquivoLado,      String campoDeAgrupamento) {
               
                final ParametrosRelatorioAcompanhamentoServidorDTO parametrosRelatorioAcompanhamentoServidorDTO =
                                new ParametrosRelatorioAcompanhamentoServidorDTOBuilder()
                                        .comSexoServidor(tipoSexo)
                                        .comEstadoCivilServidor(tipoEstadoCivil)
                                        .comGrauInstrucaoServidor(gerarGrauInstrucao(codigoGrauInstrucao))
                                        .comTipoSituacaoCadastral(situacaoCadastral)
                                        .comTipoVinculo(tipoVinculo)
                                        .comFormaIngresso(gerarFormaIngresso(codigoFormaIngresso))
                                        .comSituacaoServidor(gerarSituacaoServidor(codigoSituacaoServidor))
                                        .comCargaHoraria(converterStringParaInteger(cargaHoraria))
                                        .comCargoServidor(gerarCargo(codigoCargo))
                                        .comFuncaoServidor(gerarFuncao(codigoFuncao))
                                        .comEspecialidadeServidor(gerarEspecialidade(codigoEspecialidade))
                                        .comOrgaoOrigemServidor(gerarOrgao(codigoOrgaoOrigem))
                                        .comOrgaoLotacaoServidor(gerarOrgao(codigoOrgaoLotacao))
                                        .comUnidadeExercicioServidor(gerarUnidade(unidadeExercicio))
                                        .comUnidadeLotacaoServidor(gerarUnidade(unidadeLotacao))
                                        .comTipoRelatorioAcompanhamento(TipoRelatorioAcompanhamento.ACOMPANHAMENTO_DADOS_BANCARIOS)
                                        .comPeriodoDataInicioNascimento(periodoDataInicioNascimento)
                                        .comPeriodoDataFimNascimento(periodoDataFimNascimento)
                                        .comPeriodoDataInicioAdmissao(periodoDataInicioAdmissao)
                                        .comPeriodoDataFimAdmissao(periodoDataFimAdmissao)
                                        .comLocalizacaoArquivoCaixa(localizacaoArquivoCaixa)
                                        .comLocalizacaoArquivoPasta(localizacaoArquivoPasta)
                                        .comLocalizacaoArquivoPrateleira(localizacaoArquivoPrateleira)
                                        .comLocalizacaoArquivoLado(localizacaoArquivoLado)
                                        .comCampoAgrupamento(campoDeAgrupamento)
                                        .build();

                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                JasperPrint relatorioGerado = emissorRelatorioFacade.emitirRelatorioAcompanhamentoServidor(parametrosRelatorioAcompanhamentoServidorDTO);
                                return RelatorioUtils.extrairTextoDoJasperPrintIhGeraMensagemRelatorio(relatorioGerado);
                        }
                });
        }
       
        @Override
        public String emitirRelatorioAcompanhamentoServidorComQualificacoes(final String tipoSexo, final String tipoEstadoCivil,
                        final String codigoGrauInstrucao, final String situacaoCadastral, final String tipoVinculo, final String formaIngresso, final String codigoSituacaoServidor,
                        final String cargaHoraria, final String codigoCargo, final String codigoFuncao, final String codigoEspecialidade,
                        final String codigoOrgaoOrigem, final String codigoOrgaoLotacao, final String unidadeExercicio, final String unidadeLotacao,
                        String periodoDataInicioNascimento, String periodoDataFimNascimento,
                        String periodoDataInicioAdmissao, String periodoDataFimAdmissao, String localizacaoArquivoCaixa,       
                        String localizacaoArquivoPasta, String localizacaoArquivoPrateleira, String localizacaoArquivoLado,      String campoDeAgrupamento) {
               
                final ParametrosRelatorioAcompanhamentoServidorDTO parametrosRelatorioAcompanhamentoServidorDTO =
                                new ParametrosRelatorioAcompanhamentoServidorDTOBuilder()
                                        .comSexoServidor(tipoSexo)
                                        .comEstadoCivilServidor(tipoEstadoCivil)
                                        .comGrauInstrucaoServidor(gerarGrauInstrucao(codigoGrauInstrucao))
                                        .comTipoSituacaoCadastral(situacaoCadastral)
                                        .comTipoVinculo(tipoVinculo)
                                        .comFormaIngresso(gerarFormaIngresso(formaIngresso))
                                        .comSituacaoServidor(gerarSituacaoServidor(codigoSituacaoServidor))
                                        .comCargaHoraria(converterStringParaInteger(cargaHoraria))
                                        .comCargoServidor(gerarCargo(codigoCargo))
                                        .comFuncaoServidor(gerarFuncao(codigoFuncao))
                                        .comEspecialidadeServidor(gerarEspecialidade(codigoEspecialidade))
                                        .comOrgaoOrigemServidor(gerarOrgao(codigoOrgaoOrigem))
                                        .comOrgaoLotacaoServidor(gerarOrgao(codigoOrgaoLotacao))
                                        .comUnidadeExercicioServidor(gerarUnidade(unidadeExercicio))
                                        .comUnidadeLotacaoServidor(gerarUnidade(unidadeLotacao))
                                        .comTipoRelatorioAcompanhamento(TipoRelatorioAcompanhamento.ACOMPANHAMENTO_QUALIFICACOES)
                                        .comPeriodoDataInicioNascimento(periodoDataInicioNascimento)
                                        .comPeriodoDataFimNascimento(periodoDataFimNascimento)
                                        .comPeriodoDataInicioAdmissao(periodoDataInicioAdmissao)
                                        .comPeriodoDataFimAdmissao(periodoDataFimAdmissao)
                                        .comLocalizacaoArquivoCaixa(localizacaoArquivoCaixa)
                                        .comLocalizacaoArquivoPasta(localizacaoArquivoPasta)
                                        .comLocalizacaoArquivoPrateleira(localizacaoArquivoPrateleira)
                                        .comLocalizacaoArquivoLado(localizacaoArquivoLado)
                                        .comCampoAgrupamento(campoDeAgrupamento)
                                        .build();

                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                JasperPrint relatorioGerado = emissorRelatorioFacade.emitirRelatorioAcompanhamentoServidor(parametrosRelatorioAcompanhamentoServidorDTO);
                                return RelatorioUtils.extrairTextoDoJasperPrintIhGeraMensagemRelatorio(relatorioGerado);
                        }
                });
        }
       
        private Integer converterStringParaInteger(String parametro) {
                if(VerificadorUtil.naoEstaNuloOuVazio(parametro)) {
                        return new Integer(parametro);
                }
                return null;
        }
       
        private Servidor gerarServidor(String sequencialPessoa, String foto, String codigoGrauInstrucao, String codigoNacionalidade,
                        String codigoDeficiencia, String observacao, String localizacaoArquivo, String dadosBancarios,  String dependentes, String qualificacoes,
                        String dadosFuncionais, String dadosFuncionaisMatricula, String dadosFuncionaisMatriculaCarreira,
                        String dadosFuncionaisContratado, String dadosFuncionaisContratadoEstagiario, String dadosFuncionaisContratadoProcessoSeletivo,
                        String sequencialUsuario) {

                Servidor servidorConsultado = cenarioTestHelper.consultarServidorPorSequencial(Long.parseLong(sequencialPessoa));
               
                Servidor servidor = new ServidorBuilder(servidorConsultado)
                                                                        .comSequencial(sequencialPessoa)
                                                                        .comGrauInstrucao(gerarGrauInstrucao(codigoGrauInstrucao))
                                                                        .comNacionalidade(gerarNacionalidade(codigoNacionalidade))
                                                                        .comDeficiencia(gerarDeficiencia(codigoDeficiencia))
                                                                        .comObservacao(observacao)
                                                                        .comDependente(gerarDependentes(dependentes))
                                                                        .comQualificacao(gerarQualificacoes(qualificacoes))
                                                                        .comDadoFuncional(gerarDadosFuncionais(dadosFuncionais, dadosFuncionaisMatricula, dadosFuncionaisMatriculaCarreira,
                                                                                        dadosFuncionaisContratado, dadosFuncionaisContratadoEstagiario, dadosFuncionaisContratadoProcessoSeletivo))
                                                                        .build();

                if(VerificadorUtil.estaNulo(servidorConsultado)) {
                        servidor.setUsuario(new UsuarioViewBuilder().comSequencial(sequencialUsuario).build());
                }
                servidor.setListaServidorContaBancaria(gerarDadosBancarios(dadosBancarios, servidor));
                servidor.setServidorLocalizacaoArquivo(gerarServidorLocalizacaoArquivo(localizacaoArquivo, servidor));

                servidor.setFoto(FileUtil.getConteudoArquivoImagem(DIRETORIO_FOTOS, foto));
               
                return servidor;
        }

        private ServidorLocalizacaoArquivo gerarServidorLocalizacaoArquivo(String localizacaoArquivo, Servidor servidor) {
                ServidorLocalizacaoArquivo servidorLocalizacaoArquivo = null;

                if(VerificadorUtil.naoEstaNuloOuVazio(localizacaoArquivo)) {
                        String[] localizacaoArquivoPropriedade = gerarArrayPropriedadesString(localizacaoArquivo);

                        servidorLocalizacaoArquivo = new ServidorLocalizacaoArquivoBuilder()
                                .comNumeroCaixa(getPropriedadeTratandoExcecao(localizacaoArquivoPropriedade, 0))
                                .comNumeroPasta(getPropriedadeTratandoExcecao(localizacaoArquivoPropriedade, 1))
                                .comNumeroPrateleira(getPropriedadeTratandoExcecao(localizacaoArquivoPropriedade, 2))
                                .comTipoLado(getPropriedadeTratandoExcecao(localizacaoArquivoPropriedade, 3))
                                .build();
                       
                        servidorLocalizacaoArquivo.setServidor(servidor);
                }
                return servidorLocalizacaoArquivo;
        }

        private Set<ServidorContaBancaria> gerarDadosBancarios(String listaContasBancariasString, Servidor servidor) {
                Set<ServidorContaBancaria> contasBancarias = null;
               
                if(VerificadorUtil.naoEstaNuloOuVazio(listaContasBancariasString)) {
                        contasBancarias = new HashSet<ServidorContaBancaria>();

                        String[] contasBancariasArrayString = gerarArrayObjetosComPropriedadesString(listaContasBancariasString);

                        for (String contaBancariaArrayString : contasBancariasArrayString) {
                                String[] contaBancariaPropriedade = gerarArrayPropriedadesString(contaBancariaArrayString);
                                ServidorContaBancaria servidorContaBancaria = new ServidorContaBancariaBuilder()
                                        .comServidor(servidor)
                                        .comBanco(gerarBanco(getPropriedadeTratandoExcecao(contaBancariaPropriedade, 0)))
                                        .comNumeroAgencia(getPropriedadeTratandoExcecao(contaBancariaPropriedade, 1))
                                        .comNumeroConta(getPropriedadeTratandoExcecao(contaBancariaPropriedade, 2))
                                        .comNumeroOperacao(getPropriedadeTratandoExcecao(contaBancariaPropriedade, 3))
                                        .build();
                                contasBancarias.add(servidorContaBancaria);
                        }
                }
               
                return contasBancarias;
        }

        private Set<ServidorDadoFuncional> gerarDadosFuncionais(String dadosFuncionais, String dadosFuncionaisMatricula, String dadosFuncionaisMatriculaCarreira,
                        String dadosFuncionaisContratado, String dadosFuncionaisContratadoEstagiario, String dadosFuncionaisContratadoProcessoSeletivo) {

                Set<ServidorDadoFuncional> listaDadosFuncionais = new LinkedHashSet<ServidorDadoFuncional>();
               
                if(VerificadorUtil.naoEstaNuloOuVazio(dadosFuncionaisContratadoEstagiario)) {
                        listaDadosFuncionais.addAll(gerarDadosFuncionaisDoTipoContratadoEstagiario(dadosFuncionaisContratadoEstagiario,
                                        dadosFuncionaisContratado, dadosFuncionais));
                }
               
                if(VerificadorUtil.naoEstaNuloOuVazio(dadosFuncionaisContratadoProcessoSeletivo)) {
                        listaDadosFuncionais.addAll(gerarDadosFuncionaisDoTipoContratadoPrestadorProcessoSeletivo(dadosFuncionaisContratadoProcessoSeletivo,
                                        dadosFuncionaisContratado, dadosFuncionais));
                }
               
                if(VerificadorUtil.naoEstaNuloOuVazio(dadosFuncionaisMatriculaCarreira)) {
                        listaDadosFuncionais.addAll(gerarDadosFuncionaisDoTipoMatriculaCarreira(dadosFuncionaisMatriculaCarreira,
                                        dadosFuncionaisMatricula, dadosFuncionais));
                }
               
                if(VerificadorUtil.naoEstaNuloOuVazio(dadosFuncionaisMatricula)) {
                        listaDadosFuncionais.addAll(gerarDadosFuncionaisDoTipoMatricula(dadosFuncionaisMatricula,
                                        dadosFuncionais, dadosFuncionaisMatriculaCarreira));
                }

                return listaDadosFuncionais;
        }
       
        private Set<ServidorDadoFuncional> gerarDadosFuncionaisDoTipoContratadoEstagiario(String dadosFuncionaisContratadoEstagiario,
                        String dadosFuncionaisContratado, String dadosFuncionais) {

                Set<ServidorDadoFuncional> listaDadosFuncionais = new LinkedHashSet<ServidorDadoFuncional>();
               
                String[] dadosFuncionaisCEArrayString = gerarArrayObjetosComPropriedadesString(dadosFuncionaisContratadoEstagiario);
               
                for (String dadoFuncionalCEString : dadosFuncionaisCEArrayString) {
                        String[] dadoFuncionalCEPropriedade = gerarArrayPropriedadesString(dadoFuncionalCEString);

                        String[] dadosFuncionaisCArrayString = gerarArrayObjetosComPropriedadesString(dadosFuncionaisContratado);
                        String[] dadoFuncionalCPropriedade = null;
                        for (String dadoFuncionalCString : dadosFuncionaisCArrayString) {
                                dadoFuncionalCPropriedade = gerarArrayPropriedadesString(dadoFuncionalCString);
                                if (getPropriedadeTratandoExcecao(dadoFuncionalCEPropriedade, 0).equalsIgnoreCase(getPropriedadeTratandoExcecao(dadoFuncionalCPropriedade, 0))) {
                                        break;
                                }
                        }
                       
                        String[] dadosFuncionaisArrayString = gerarArrayObjetosComPropriedadesString(dadosFuncionais);
                        String[] dadoFuncionalPropriedade = null;
                        for (String dadoFuncionalString : dadosFuncionaisArrayString) {
                                dadoFuncionalPropriedade = gerarArrayPropriedadesString(dadoFuncionalString);
                                if (getPropriedadeTratandoExcecao(dadoFuncionalCEPropriedade, 0).equalsIgnoreCase(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 0))) {
                                        break;
                                }
                        }

                        ServidorDadoFuncionalContratadoEstagiario servidorDadoFuncional = new ServidorDadoFuncionalContratadoEstagiarioBuilder()
                                .comSequencial(getPropriedadeTratandoExcecao(dadoFuncionalCEPropriedade, 1))
                                .comInstituicao(getPropriedadeTratandoExcecao(dadoFuncionalCEPropriedade, 2))
                                .comCursoEstagio(getPropriedadeTratandoExcecao(dadoFuncionalCEPropriedade, 3))
                                .comIndicadorObrigatorio(getPropriedadeTratandoExcecao(dadoFuncionalCEPropriedade, 4))
                                .comIndicadorRemunerado(getPropriedadeTratandoExcecao(dadoFuncionalCEPropriedade, 5))
                                .comTipoNivel(getPropriedadeTratandoExcecao(dadoFuncionalCEPropriedade, 6))
                                .comNumeroContrato(getPropriedadeTratandoExcecao(dadoFuncionalCPropriedade, 2))
                                .comDataFim(getPropriedadeTratandoExcecao(dadoFuncionalCPropriedade, 3))
                                .comDataRescisao(getPropriedadeTratandoExcecao(dadoFuncionalCPropriedade, 4))
                                .comFormaIngresso(gerarFormaIngresso(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 2)))
                                .comDataInicio(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 3))
                                .comCargaHoraria(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 4))
                                .comOrgaoLotacao(gerarOrgao(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 5)))
                                .comUnidadeLotacao(gerarUnidade(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 6)))
                                .comSetor(gerarSetor(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 7)))
                                .comEspecialidade(gerarEspecialidade(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 8)))
                                .comConselho(gerarServidorDadoFuncionalConselho(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 9), getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 10), getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 11)))
                                .build();

                        if(VerificadorUtil.naoEstaNulo(servidorDadoFuncional.getServidorDadoFuncionalConselho())) {
                                servidorDadoFuncional.getServidorDadoFuncionalConselho().setServidorDadoFuncional(servidorDadoFuncional);
                        }
                       
                        listaDadosFuncionais.add(servidorDadoFuncional);
                }
               
                return listaDadosFuncionais;
        }
       
        private Set<ServidorDadoFuncional> gerarDadosFuncionaisDoTipoContratadoPrestadorProcessoSeletivo(String dadosFuncionaisContratadoProcessoSeletivo,
                        String dadosFuncionaisContratado, String dadosFuncionais) {

                Set<ServidorDadoFuncional> listaDadosFuncionais = new LinkedHashSet<ServidorDadoFuncional>();
               
                String[] dadosFuncionaisCPPArrayString = gerarArrayObjetosComPropriedadesString(dadosFuncionaisContratadoProcessoSeletivo);
               
                for (String dadoFuncionalCPPString : dadosFuncionaisCPPArrayString) {
                        String[] dadoFuncionalCPPPropriedade = gerarArrayPropriedadesString(dadoFuncionalCPPString);

                        String[] dadosFuncionaisCArrayString = gerarArrayObjetosComPropriedadesString(dadosFuncionaisContratado);
                        String[] dadoFuncionalCPropriedade = null;
                        for (String dadoFuncionalCString : dadosFuncionaisCArrayString) {
                                dadoFuncionalCPropriedade = gerarArrayPropriedadesString(dadoFuncionalCString);
                                if (getPropriedadeTratandoExcecao(dadoFuncionalCPPPropriedade, 0).equalsIgnoreCase(getPropriedadeTratandoExcecao(dadoFuncionalCPropriedade, 0))) {
                                        break;
                                }
                        }
                       
                        String[] dadosFuncionaisArrayString = gerarArrayObjetosComPropriedadesString(dadosFuncionais);
                        String[] dadoFuncionalPropriedade = null;
                        for (String dadoFuncionalString : dadosFuncionaisArrayString) {
                                dadoFuncionalPropriedade = gerarArrayPropriedadesString(dadoFuncionalString);
                                if (getPropriedadeTratandoExcecao(dadoFuncionalCPPPropriedade, 0).equalsIgnoreCase(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 0))) {
                                        break;
                                }
                        }

                        ServidorDadoFuncionalContratadoPrestadorProcessoSeletivo servidorDadoFuncional = new ServidorDadoFuncionalContratadoPrestadorProcessoSeletivoBuilder()
                                .comSequencial(getPropriedadeTratandoExcecao(dadoFuncionalCPPPropriedade, 1))
                                .comCargo(getPropriedadeTratandoExcecao(dadoFuncionalCPPPropriedade, 2))
                                .comOrgaoOrigem(getPropriedadeTratandoExcecao(dadoFuncionalCPPPropriedade, 3))
                                .comNumeroContrato(getPropriedadeTratandoExcecao(dadoFuncionalCPropriedade, 2))
                                .comDataFim(getPropriedadeTratandoExcecao(dadoFuncionalCPropriedade, 3))
                                .comDataRescisao(getPropriedadeTratandoExcecao(dadoFuncionalCPropriedade, 4))
                                .comFormaIngresso(gerarFormaIngresso(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 2)))
                                .comDataInicio(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 3))
                                .comCargaHoraria(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 4))
                                .comOrgaoLotacao(gerarOrgao(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 5)))
                                .comUnidadeLotacao(gerarUnidade(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 6)))
                                .comSetor(gerarSetor(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 7)))
                                .comConselho(gerarServidorDadoFuncionalConselho(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 9), getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 10), getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 11)))
                                .build();

                        if(VerificadorUtil.naoEstaNulo(servidorDadoFuncional.getServidorDadoFuncionalConselho())) {
                                servidorDadoFuncional.getServidorDadoFuncionalConselho().setServidorDadoFuncional(servidorDadoFuncional);
                        }

                        listaDadosFuncionais.add(servidorDadoFuncional);
                }
               
                return listaDadosFuncionais;
        }
       
        private Set<ServidorDadoFuncional> gerarDadosFuncionaisDoTipoMatricula(String dadosFuncionaisMatricula,
                        String dadosFuncionais, String dadosFuncionaisMatriculaCarreira) {

                Set<ServidorDadoFuncional> listaDadosFuncionais = new LinkedHashSet<ServidorDadoFuncional>();
               
                String[] dadosFuncionaisMArrayString = gerarArrayObjetosComPropriedadesString(dadosFuncionaisMatricula);
               
                for (String dadoFuncionalMString : dadosFuncionaisMArrayString) {
                        String[] dadoFuncionalMPropriedade = gerarArrayPropriedadesString(dadoFuncionalMString);

                        Boolean dadoFuncionalMatriculaIsolado = true;
                        if(VerificadorUtil.naoEstaNuloOuVazio(dadosFuncionaisMatriculaCarreira)) {
                                String[] dadosFuncionaisMCArrayString = gerarArrayObjetosComPropriedadesString(dadosFuncionaisMatriculaCarreira);
                                String[] dadoFuncionalMCPropriedade = null;
                                for (String dadoFuncionalMCString : dadosFuncionaisMCArrayString) {
                                        dadoFuncionalMCPropriedade = gerarArrayPropriedadesString(dadoFuncionalMCString);
                                        if (getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 0).equalsIgnoreCase(getPropriedadeTratandoExcecao(dadoFuncionalMCPropriedade, 0))) {
                                                dadoFuncionalMatriculaIsolado = false;
                                                break;
                                        }
                                }
                        }
                       
                        if(dadoFuncionalMatriculaIsolado) {
                       
                                String[] dadosFuncionaisArrayString = gerarArrayObjetosComPropriedadesString(dadosFuncionais);
                                String[] dadoFuncionalPropriedade = null;
                                for (String dadoFuncionalString : dadosFuncionaisArrayString) {
                                        dadoFuncionalPropriedade = gerarArrayPropriedadesString(dadoFuncionalString);
                                        if (getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 0).equalsIgnoreCase(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 0))) {
                                                break;
                                        }
                                }
       
                                Funcao funcaoConsultada = VerificadorUtil.estaNuloOuVazio(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 9)) ? null :
                                        cenarioTestHelper.consultarFuncaoPorSequencial(new Integer(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 9)));
                                       
                                ServidorDadoFuncionalMatricula servidorDadoFuncional = new ServidorDadoFuncionalMatriculaBuilder()
                                        .comSequencial(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 1))
                                        .comMatricula(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 2))
                                        .comDigitoMatricula(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 3))
                                        .comNumeroOrdem(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 4))
                                        .comSituacaoServidor(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 5))
                                        .comDataNomeacao(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 6))
                                        .comDataPosse(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 7))
                                        .comDataExercicio(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 8))
                                        .comFuncao(funcaoConsultada)
                                        .comOrgaoOrigem(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 10))
                                        .comTipoRegimeTrabalho(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 11))
                                        .comFormaIngresso(gerarFormaIngresso(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 2)))
                                        .comDataInicio(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 3))
                                        .comCargaHoraria(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 4))
                                        .comOrgaoLotacao(gerarOrgao(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 5)))
                                        .comUnidadeLotacao(gerarUnidade(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 6)))
                                        .comSetor(gerarSetor(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 7)))
                                        .comEspecialidade(gerarEspecialidade(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 8)))
                                        .comConselho(gerarServidorDadoFuncionalConselho(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 9), getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 10), getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 11)))
                                        .build();
       
                                if(VerificadorUtil.naoEstaNulo(servidorDadoFuncional.getServidorDadoFuncionalConselho())) {
                                        servidorDadoFuncional.getServidorDadoFuncionalConselho().setServidorDadoFuncional(servidorDadoFuncional);
                                }
       
                                listaDadosFuncionais.add(servidorDadoFuncional);
                        }
                }
               
                return listaDadosFuncionais;
        }
       
        private Set<ServidorDadoFuncional> gerarDadosFuncionaisDoTipoMatriculaCarreira(String dadosFuncionaisMatriculaCarreira,
                        String dadosFuncionaisMatricula, String dadosFuncionais) {

                Set<ServidorDadoFuncional> listaDadosFuncionais = new LinkedHashSet<ServidorDadoFuncional>();
               
                String[] dadosFuncionaisMCArrayString = gerarArrayObjetosComPropriedadesString(dadosFuncionaisMatriculaCarreira);
               
                for (String dadoFuncionalMCString : dadosFuncionaisMCArrayString) {
                        String[] dadoFuncionalMCPropriedade = gerarArrayPropriedadesString(dadoFuncionalMCString);

                        String[] dadosFuncionaisMArrayString = gerarArrayObjetosComPropriedadesString(dadosFuncionaisMatricula);
                        String[] dadoFuncionalMPropriedade = null;
                        for (String dadoFuncionalMString : dadosFuncionaisMArrayString) {
                                dadoFuncionalMPropriedade = gerarArrayPropriedadesString(dadoFuncionalMString);
                                if (getPropriedadeTratandoExcecao(dadoFuncionalMCPropriedade, 0).equalsIgnoreCase(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 0))) {
                                        break;
                                }
                        }
                       
                        String[] dadosFuncionaisArrayString = gerarArrayObjetosComPropriedadesString(dadosFuncionais);
                        String[] dadoFuncionalPropriedade = null;
                        for (String dadoFuncionalString : dadosFuncionaisArrayString) {
                                dadoFuncionalPropriedade = gerarArrayPropriedadesString(dadoFuncionalString);
                                if (getPropriedadeTratandoExcecao(dadoFuncionalMCPropriedade, 0).equalsIgnoreCase(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 0))) {
                                        break;
                                }
                        }

                        Funcao funcaoConsultada = VerificadorUtil.estaNuloOuVazio(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 9)) ? null :
                                cenarioTestHelper.consultarFuncaoPorSequencial(new Integer(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 9)));
                       
                        ServidorDadoFuncionalMatriculaCarreira servidorDadoFuncional = new ServidorDadoFuncionalMatriculaCarreiraBuilder()
                                .comSequencial(getPropriedadeTratandoExcecao(dadoFuncionalMCPropriedade, 1))
                                .comUnidadeExercicio(getPropriedadeTratandoExcecao(dadoFuncionalMCPropriedade, 2))
                                .comCargo(getPropriedadeTratandoExcecao(dadoFuncionalMCPropriedade, 3))
                                .comCarreira(getPropriedadeTratandoExcecao(dadoFuncionalMCPropriedade, 4))
                                .comTipoClasse(getPropriedadeTratandoExcecao(dadoFuncionalMCPropriedade, 5))
                                .comTipoNivel(getPropriedadeTratandoExcecao(dadoFuncionalMCPropriedade, 6))
                                .comMatricula(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 2))
                                .comDigitoMatricula(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 3))
                                .comNumeroOrdem(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 4))
                                .comSituacaoServidor(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 5))
                                .comDataNomeacao(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 6))
                                .comDataPosse(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 7))
                                .comDataExercicio(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 8))
                                .comFuncao(funcaoConsultada)
                                .comOrgaoOrigem(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 10))
                                .comTipoRegimeTrabalho(getPropriedadeTratandoExcecao(dadoFuncionalMPropriedade, 11))
                                .comFormaIngresso(gerarFormaIngresso(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 2)))
                                .comDataInicio(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 3))
                                .comCargaHoraria(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 4))
                                .comOrgaoLotacao(gerarOrgao(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 5)))
                                .comUnidadeLotacao(gerarUnidade(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 6)))
                                .comSetor(gerarSetor(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 7)))
                                .comEspecialidade(gerarEspecialidade(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 8)))
                                .comConselho(gerarServidorDadoFuncionalConselho(getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 9), getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 10), getPropriedadeTratandoExcecao(dadoFuncionalPropriedade, 11)))
                                .build();

                        if(VerificadorUtil.naoEstaNulo(servidorDadoFuncional.getServidorDadoFuncionalConselho())) {
                                servidorDadoFuncional.getServidorDadoFuncionalConselho().setServidorDadoFuncional(servidorDadoFuncional);
                        }

                        listaDadosFuncionais.add(servidorDadoFuncional);
                }
               
                return listaDadosFuncionais;
        }

        private SetorView gerarSetor(String codigoSetor) {
                SetorView setor = null;
               
                if(VerificadorUtil.naoEstaNuloOuVazio(codigoSetor)) {
                        setor = new SetorViewBuilder().comCodigo(codigoSetor).build();
                }
               
                return setor;
        }

        private Unidade gerarUnidade(String codigoUnidade) {
                Unidade unidade = null;
               
                if(VerificadorUtil.naoEstaNuloOuVazio(codigoUnidade)) {
                        unidade = new UnidadeBuilder().comCodigo(codigoUnidade).build();
                }
               
                return unidade;
        }

        private Orgao gerarOrgao(String codigoOrgao) {
                Orgao orgaoExterno= null;
               
                if(VerificadorUtil.naoEstaNuloOuVazio(codigoOrgao)) {
                        orgaoExterno = new OrgaoBuilder().comSequencial(codigoOrgao).build();
                }
               
                return orgaoExterno;
        }
       
        private OrgaoView gerarOrgaoView(String codigoOrgao) {
                OrgaoView orgao = null;
               
                if(VerificadorUtil.naoEstaNuloOuVazio(codigoOrgao)) {
                        orgao = new OrgaoViewBuilder().comCodigo(codigoOrgao).build();
                }
               
                return orgao;
        }

        private SituacaoServidor gerarSituacaoServidor( String codigoSituacaoServidor) {
                SituacaoServidor situacaoServidor = null;
               
                if(VerificadorUtil.naoEstaNuloOuVazio(codigoSituacaoServidor)) {
                        situacaoServidor = new SituacaoServidorBuilder().comCodigo(codigoSituacaoServidor).build();
                }
               
                return situacaoServidor;
        }

        private Funcao gerarFuncao(String codigoFuncao) {
                Funcao funcao = null;

                if(VerificadorUtil.naoEstaNuloOuVazio(codigoFuncao)) {
                        funcao = new FuncaoBuilder().comCodigo(codigoFuncao).build();
                }
               
                return funcao;
        }

        private Cargo gerarCargo(String codigoCargo) {
                Cargo cargo = null;
               
                if(VerificadorUtil.naoEstaNuloOuVazio(codigoCargo)) {
                        cargo = new CargoBuilder().comCodigo(codigoCargo).build();
                }
               
                return cargo;
        }

        private Especialidade gerarEspecialidade(String codigoEspecialidade) {
                Especialidade especialidade = null;
               
                if(VerificadorUtil.naoEstaNuloOuVazio(codigoEspecialidade)) {
                        especialidade = new EspecialidadeBuilder().comCodigo(codigoEspecialidade).build();
                }
               
                return especialidade;
        }

        private Banco gerarBanco(String codigoBanco) {
                Banco banco = null;
               
                if(VerificadorUtil.naoEstaNuloOuVazio(codigoBanco)) {
                        banco = new BancoBuilder().comCodigo(codigoBanco).build();
                }
               
                return banco;
        }
       
        private FormaIngresso gerarFormaIngresso(String codigo) {
                FormaIngresso formaIngresso = null;
                FormaIngresso formaIngressoConsutlada = null;

                if(VerificadorUtil.naoEstaNuloOuVazio(codigo)) {
                        formaIngresso = new FormaIngressoBuilder().comCodigo(codigo).build();
                        formaIngressoConsutlada = cenarioTestHelper.consultarFormaIngressoPorSequencial(codigo);
                }

                return VerificadorUtil.naoEstaNulo(formaIngressoConsutlada) ? formaIngressoConsutlada : formaIngresso;
        }
       
        private ServidorDadoFuncionalConselho gerarServidorDadoFuncionalConselho(String numeroInscricao, String codigoConselho, String uf) {
                ServidorDadoFuncionalConselho servidorDadoFuncionalConselho = null;
               
                if(VerificadorUtil.naoEstaNuloOuVazio(numeroInscricao) || VerificadorUtil.naoEstaNuloOuVazio(codigoConselho) || VerificadorUtil.naoEstaNuloOuVazio(uf)) {
                        servidorDadoFuncionalConselho = new ServidorDadoFuncionalConselhoBuilder()
                                .comNumeroInscricaoConselho(numeroInscricao)
                                .comConselho(codigoConselho)
                                .comUf(uf)
                                .build();
                }
               
                return servidorDadoFuncionalConselho;
        }

        private Set<ServidorQualificacao> gerarQualificacoes(String listaQualificacoesString) {
                Set<ServidorQualificacao> qualificacoes = null;
               
                if(VerificadorUtil.naoEstaNuloOuVazio(listaQualificacoesString)) {
                        qualificacoes = new HashSet<ServidorQualificacao>();
                       
                        String[] qualificacoesArrayString = gerarArrayObjetosComPropriedadesString(listaQualificacoesString);
                       
                        for (String qualificacaoArrayString : qualificacoesArrayString) {
                                String[] qualificacaoPropriedade = gerarArrayPropriedadesString(qualificacaoArrayString);
                                ServidorQualificacao servidorQualificacao = new ServidorQualificacaoBuilder()
                                        .comTipoQualificacao(getPropriedadeTratandoExcecao(qualificacaoPropriedade, 0))
                                        .comDescricao(getPropriedadeTratandoExcecao(qualificacaoPropriedade, 1))
                                        .comInstituicao(getPropriedadeTratandoExcecao(qualificacaoPropriedade, 2))
                                        .comCargaHoraria(getPropriedadeTratandoExcecao(qualificacaoPropriedade, 3))
                                        .comDataInicial(getPropriedadeTratandoExcecao(qualificacaoPropriedade, 4))
                                        .comDataFinal(getPropriedadeTratandoExcecao(qualificacaoPropriedade, 5))
                                        .comObservacao(getPropriedadeTratandoExcecao(qualificacaoPropriedade, 6))
                                        .build();
                                qualificacoes.add(servidorQualificacao);
                        }
                }
               
                return qualificacoes;
        }

        private Set<ServidorDependente> gerarDependentes(String listaDependentesString) {
                Set<ServidorDependente> dependentes = null;
               
                if(VerificadorUtil.naoEstaNuloOuVazio(listaDependentesString)) {
                        dependentes = new HashSet<ServidorDependente>();

                        String[] dependentesArrayString = gerarArrayObjetosComPropriedadesString(listaDependentesString);
                       
                        for (String dependenteArrayString : dependentesArrayString) {
                                String[] dependentePropriedade = gerarArrayPropriedadesString(dependenteArrayString);
                                ServidorDependente servidorDependente = new ServidorDependenteBuilder()
                                        .comNome(getPropriedadeTratandoExcecao(dependentePropriedade, 0))
                                        .comCPF(getPropriedadeTratandoExcecao(dependentePropriedade, 1))
                                        .comDataNascimento(getPropriedadeTratandoExcecao(dependentePropriedade, 2))
                                        .comSexo(getPropriedadeTratandoExcecao(dependentePropriedade, 3))
                                        .comTipoParentesco(getPropriedadeTratandoExcecao(dependentePropriedade, 4))
                                        .build();
                                dependentes.add(servidorDependente);
                        }
                }
               
                return dependentes;
        }

        private String getPropriedadeTratandoExcecao(String[] propriedades, int indice) {
                try {
                        return VerificadorUtil.naoEstaNuloOuVazio(propriedades[indice]) ? propriedades[indice] : null;
                } catch(Exception ex) {
                        return null;
                }
        }

        private String[] gerarArrayPropriedadesString(String objetosComPropriedadesString) {
                return objetosComPropriedadesString.split(",");
        }
       
        private String[] gerarArrayObjetosComPropriedadesString(String lista) {
                return lista.split(";");
        }
       
        private Deficiencia gerarDeficiencia(String codigoDeficiencia) {
                Deficiencia deficiencia = null;

                if(VerificadorUtil.naoEstaNuloOuVazio(codigoDeficiencia)) {
                        deficiencia = new DeficienciaBuilder().comCodigo(codigoDeficiencia).build();
                }

                return deficiencia;
        }

        private Nacionalidade gerarNacionalidade(String codigoNacionalidade) {
                Nacionalidade nacionalidade = null;

                if(VerificadorUtil.naoEstaNuloOuVazio(codigoNacionalidade)) {
                        nacionalidade = new NacionalidadeBuilder().comCodigo(codigoNacionalidade).build();
                }

                return nacionalidade;
        }

        private GrauInstrucao gerarGrauInstrucao(String codigoGrauInstrucao) {
                GrauInstrucao grauInstrucao = null;

                if(VerificadorUtil.naoEstaNuloOuVazio(codigoGrauInstrucao)) {
                        grauInstrucao = new GrauInstrucaoBuilder().comCodigo(codigoGrauInstrucao).build();
                }

                return grauInstrucao;
        }
       
        private String converterSimNaoParaTrueFalse(String value) {
                if (VerificadorUtil.estaNulo(value)) return null;
                if (value.equals("SIM")) return "true";
                if (value.equals("NAO")) return "false";
                return null;
        }

        @Override
        public String consultarOrgao(final String sigla, final String descricao, final String esfera, final String ativo) {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                Orgao filtro = new OrgaoBuilder().comSigla(sigla).comDescricao(descricao).comEsfera(esfera).comSituacaoAtivo(converterSimNaoParaTrueFalse(ativo)).build();
                                List<Orgao> orgaos = orgaoFacade.consultarOrgaos(filtro, PRIMEIRO_REGISTRO, Integer.MAX_VALUE);
                                return new FormatadorDeMensagemImpl().formatar(ContextoMensagem.EXIBIR, orgaos.toArray());
                        }
                });
        }

        @Override
        public String cadastrarOrgao(final String codigo, final String esfera, final String descricao, final String sigla) {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {                     
                        @Override
                        public String execute() throws Exception {
                                Orgao orgao = new OrgaoBuilder().comCodigoOrgao(codigo).comEsfera(esfera).comSigla(sigla).comDescricao(descricao).build();
                                orgaoFacade.cadastrar(orgao);
                                Orgao persistido = cenarioTestHelper.consultarOrgaoPorSequencial(orgao.getSequencial());
                                return DADOS_GRAVADOS_COM_SUCESSO + ": " + new FormatadorDeMensagemImpl().formatar(ContextoMensagem.EXIBIR, persistido);
                        }
                });
        }
       
        @Override
        public String alterarOrgao(final String sequencial, final String codigo, final String esfera, final String descricao, final String sigla, final String ativo) {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {                     
                        @Override
                        public String execute() throws Exception {
                                Orgao orgao = new OrgaoBuilder().comSequencial(sequencial).comCodigoOrgao(codigo).comEsfera(esfera).comSigla(sigla).comDescricao(descricao).comSituacaoAtivo(ativo).build();
                                orgaoFacade.alterar(orgao);
                                Orgao persistido = cenarioTestHelper.consultarOrgaoPorSequencial(orgao.getSequencial());
                                return DADOS_GRAVADOS_COM_SUCESSO + ": " + new FormatadorDeMensagemImpl().formatar(ContextoMensagem.EXIBIR, persistido);
                        }
                });
        }
        @Override
        public String consultarUnidade(final String sequencialOrgao, final String sigla, final String descricao, final String ativo) {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                Unidade filtro = new UnidadeBuilder().comOrgao(sequencialOrgao).comSigla(sigla).comDescricao(descricao).comSituacaoAtivo(converterSimNaoParaTrueFalse(ativo)).build();
                                List<Unidade> unidades = unidadeFacade.consultarUnidades(filtro, PRIMEIRO_REGISTRO, Integer.MAX_VALUE);
                               
                                return cenarioTestHelper.gerarMensagemConsultar(unidades);
                        }
                });
        }

        @Override
        public String cadastrarUnidade(final String sequencialOrgao, final String sigla, final String descricao) {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {                     
                        @Override
                        public String execute() throws Exception {
                                Unidade unidade = new UnidadeBuilder().comOrgao(sequencialOrgao).comSigla(sigla).comDescricao(descricao).build();
                                unidadeFacade.cadastrar(unidade);
                                Unidade unidadaConsultada = cenarioTestHelper.consultarUnidadePorSequencial(unidade.getCodigo());
                               
                                return DADOS_GRAVADOS_COM_SUCESSO + cenarioTestHelper.gerarMensagem(unidadaConsultada);
                        }
                });
        }

        @Override
        public String alterarUnidade(String sequencialUnidade, String sequencialOrgao, String sigla, String descricao, String ativo) {
                final Unidade unidade = new UnidadeBuilder().comCodigo(sequencialUnidade).comOrgao(sequencialOrgao).comSigla(sigla).comSituacaoAtivo(ativo).comDescricao(descricao).build();
               
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {                     
                        @Override
                        public String execute() throws Exception {
                                unidadeFacade.alterar(unidade);
                                Unidade unidadaConsultada = cenarioTestHelper.consultarUnidadePorSequencial(unidade.getCodigo());
                               
                                return DADOS_GRAVADOS_COM_SUCESSO + cenarioTestHelper.gerarMensagem(unidadaConsultada);
                        }
                });
        }
       
        @Override
        public String consultarCargo(String descricao, String sequencialGrauInstrucao, String ativo) {
                ParametroConsultaCargoDTO parametroConsultaCargoDTO = criarParametroConsultaCargoDTO(descricao, sequencialGrauInstrucao, ativo);
                List<Cargo> cargos = cargoFacade.consultar(parametroConsultaCargoDTO);
               
                return cenarioTestHelper.gerarMensagemConsultar(cargos);
        }
       
        @Override
        public String cadastrarCargo(String descricao, String sequencialGrauInstrucao, String quantidadeDeVagas) {
                final Cargo cargo = new CargoBuilder().comDescricao(descricao).comGrauInstrucao(sequencialGrauInstrucao).comQuantidadeDeVagas(quantidadeDeVagas).build();
               
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {                     
                        @Override
                        public String execute() throws Exception {
                                cargoFacade.cadastrar(cargo);
                                Cargo cargoConsultada = cenarioTestHelper.consultarCargoPorSequencial(cargo.getCodigo());
                               
                                return DADOS_GRAVADOS_COM_SUCESSO + cenarioTestHelper.gerarMensagem(cargoConsultada);
                        }
                });
        }
       
        @Override
        public String alterarCargo(String codigo, String descricao,String sequencialGrauInstrucao, String quantidadeDeVagas, String ativo) {
                final Cargo cargo = new CargoBuilder()
                                        .comCodigo(codigo)
                                        .comDescricao(descricao)
                                        .comGrauInstrucao(sequencialGrauInstrucao)
                                        .comQuantidadeDeVagas(quantidadeDeVagas)
                                        .comAtivo(ativo)
                                        .build();
               
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {                     
                        @Override
                        public String execute() throws Exception {
                                cargoFacade.alterar(cargo);
                                Cargo cargoConsultada = cenarioTestHelper.consultarCargoPorSequencial(cargo.getCodigo());
                               
                                return DADOS_GRAVADOS_COM_SUCESSO + cenarioTestHelper.gerarMensagem(cargoConsultada);
                        }
                });
        }
       
        @Override
        public String listarOrgao() {
                List<Orgao> listaOrgao = orgaoFacade.listarOrgao();
                return cenarioTestHelper.gerarMensagemConsultar(listaOrgao);
        }

        @Override
        public String listarFormaIngresso(String tipoVinculo) {
                FormaIngresso formaIngresso = new FormaIngressoBuilder().comTipoVinculo(TipoVinculo.CONTRATADO).build();
                List<FormaIngresso> retornoListaFormaIngresso = formaIngressoFacade.consultarFormaIngressoPorTipoVinculo(formaIngresso);
                return cenarioTestHelper.gerarMensagemConsultar(retornoListaFormaIngresso);
        }
        @Override
        public String listarOrgaoAtivo() {
                List<Orgao> listaOrgaoAtivo = orgaoFacade.listarOrgaoAtivo();
                return cenarioTestHelper.gerarMensagemConsultar(listaOrgaoAtivo);
        }

        @Override
        public String emitirRelatorioQuantitativoDeCargoOuFuncao(final String tipoRelatorio) {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                       
                        @Override
                        public String execute() throws Exception {
                                TipoRelatorioQuantitativo relatorio = null;
                                if(tipoRelatorio.equals("FUNCAO")){
                                        relatorio = TipoRelatorioQuantitativo.ACOMPANHAMENTO_FUNCAO;
                                }else{
                                        relatorio = TipoRelatorioQuantitativo.ACOMPANHAMENTO_CARGO;
                                }
                                JasperPrint relatorioGerado = emissorRelatorioFacade.emitirRelatorioQuantitativoDeCargoOuFuncao(relatorio);
                                return RelatorioUtils.extrairTextoDoJasperPrintIhGeraMensagemRelatorio(relatorioGerado);
                        }
                });
        }

        @Override
        public String listarUnidadeAtiva(String identificadorOrgao) {
                final Unidade unidade = new UnidadeBuilder().comOrgao(identificadorOrgao).build();
               
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                List<Unidade> listaUnidadesAtivas = unidadeFacade.listarUnidadeAtiva(unidade);
                                return cenarioTestHelper.gerarMensagemUnidadeAtiva(listaUnidadesAtivas);
                        }
                });
        }
       
        @Override
        public String listarFormaIngressoParaDadoFuncional(String situacaoCadastral, String sequencialUsuario, String tipoVinculo) {
                final TipoSituacaoCadastral situacao = TipoSituacaoCadastral.parse(situacaoCadastral);
                final UsuarioView usuarioAlteracao = cenarioTestHelper.consultarUsuarioViewComPermissoesScaPorSequencial(Long.parseLong(sequencialUsuario));
                final TipoVinculo vinculo = TipoVinculo.parse(tipoVinculo);
               
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                List<FormaIngresso> listaFormaIngresso = formaIngressoFacade.listarFormaIngressoParaDadoFuncional(situacao, usuarioAlteracao, vinculo);
                                return cenarioTestHelper.gerarMensagemFormaIngresso(listaFormaIngresso);
                        }
                });
        }

        @Override
        public String listarInstituicaoEstagio() {
                List<InstituicaoEstagio> consultaInstituicao = instituicaoEstagioFacade.listarInstituicaoEstagio();
                return cenarioTestHelper.gerarMensagemConsultar(consultaInstituicao);
        }

        @Override
        public String listarCursoEstagio() {
                List<CursoEstagio> consultaCursoEstagio = cursoEstagioFacade.listarCursoEstagio();
                return cenarioTestHelper.gerarMensagemConsultar(consultaCursoEstagio);
        }
       
        @Override
        public String listarParametro() {
                List<Parametro> consultaParametro = parametroFacade.listarParametro();
                return cenarioTestHelper.gerarMensagemConsultar(consultaParametro);
        }
       
        @Override
        public String alterarParametro(final String codigo, String valor) {
                Parametro parametroConsultado = cenarioTestHelper.consultarParametroPorCodigo(Integer.parseInt(codigo));
                final Parametro parametro = new ParametroBuilder(parametroConsultado).comValor(valor).build();

                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                parametroFacade.alterar(parametro);
                                Parametro parametroAlterado = cenarioTestHelper.consultarParametroPorCodigo(Integer.parseInt(codigo));
                                return DADOS_GRAVADOS_COM_SUCESSO + cenarioTestHelper.gerarMensagem(parametroAlterado);
                        }
                });
        }
       
        @Override
        public String listarEventoAtivo() {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                List<Evento> eventos = eventoFacade.listarEventoAtivo();
                               
                                return cenarioTestHelper.gerarMensagemConsultar(eventos);
                        }
                });
        }
       
        @Override
        public String consultarEventoServidor(final String sequencialUsuario, final String codigoEvento,
                        final String sequencialUnidadeExercicio, final String tipoSituacaoEvento, final String sequencialDadoFuncional) {

                final UsuarioView usuario = cenarioTestHelper.consultarUsuarioViewComPermissoesScaPorSequencial(new Long(sequencialUsuario));
                final List<Restricoes> listaRestricoes = gerarListaRestricoesConsultarEventoServidor(codigoEvento, sequencialUnidadeExercicio,
                                tipoSituacaoEvento, sequencialDadoFuncional);
               
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                List<EventoServidorDTO> eventosServidor = eventoServidorFacade.consultarDTOPassandoRestricoes(PRIMEIRO_REGISTRO, CINCO_ITENS,
                                                listaRestricoes, usuario);
                                return cenarioTestHelper.gerarMensagemConsultar(eventosServidor);
                        }
                });
        }
       
        @Override
        public String cadastrarEventoServidor(String sequencialUsuario, final String sequencialDadoFuncional, String codigoEvento,
                        String dataEvento, String observacao, String indicadorRetroativo, String listaDocumentos,
                        String exigeProcesso, String exigePortaria, String exigeDecreto, String exigeVigencia,
                        String transferencia, String remocaoOficiosa, String remocaoOficial, String redistribuicao,
                        String acesso, String progressaoHorizontal,     String progressoVertical) {

                inserirUsuarioHistoricoNoContexto(sequencialUsuario);
               
                final EventoServidorDadoFuncional eventoServidorDadoFuncional = gerarEventoServidorDadoFuncional(null, sequencialDadoFuncional, codigoEvento,
                                null, dataEvento, observacao, indicadorRetroativo, listaDocumentos,
                                exigeProcesso, exigePortaria, exigeDecreto, exigeVigencia,
                                transferencia, remocaoOficiosa, remocaoOficial, redistribuicao,
                                acesso, progressaoHorizontal, progressoVertical);
               
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                eventoServidorFacade.cadastrar(eventoServidorDadoFuncional);
                                EventoServidorDadoFuncional evento = cenarioTestHelper.consultarEventoServidorDadoFuncional(eventoServidorDadoFuncional.getSequencial());
                                return DADOS_GRAVADOS_COM_SUCESSO + cenarioTestHelper.gerarMensagem(evento);
                        }
                });
        }
       
        @Override
        public String alterarEventoServidor(final String sequencial, String sequencialUsuario,
                        String dataEvento, String observacao, String indicadorRetroativo, String listaDocumentos,
                        String exigeProcesso, String exigePortaria, String exigeDecreto, String exigeVigencia,
                        String transferencia, String remocaoOficiosa, String remocaoOficial, String redistribuicao,
                        String acesso, String progressaoHorizontal, String progressoVertical) {
               
                inserirUsuarioHistoricoNoContexto(sequencialUsuario);
               
                EventoServidorDadoFuncional eventoCadastrado = cenarioTestHelper.consultarEventoServidorDadoFuncional(new Long(sequencial));
                String sequencialDadoFuncional = eventoCadastrado.getServidorDadoFuncional().getSequencial().toString();
                String codigoEvento = eventoCadastrado.getEvento().getCodigo().toString();
                String tipoSituacao = eventoCadastrado.getTipoSituacaoEvento();
               
                final EventoServidorDadoFuncional eventoServidorDadoFuncional = gerarEventoServidorDadoFuncional(sequencial, sequencialDadoFuncional, codigoEvento,
                                tipoSituacao, dataEvento, observacao, indicadorRetroativo, listaDocumentos,
                                exigeProcesso, exigePortaria, exigeDecreto, exigeVigencia,
                                transferencia, remocaoOficiosa, remocaoOficial, redistribuicao,
                                acesso, progressaoHorizontal, progressoVertical);

                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                eventoServidorFacade.alterar(eventoServidorDadoFuncional);
                                EventoServidorDadoFuncional evento = cenarioTestHelper.consultarEventoServidorDadoFuncional(new Long(sequencial));
                                return DADOS_GRAVADOS_COM_SUCESSO + cenarioTestHelper.gerarMensagem(evento);
                        }
                });
        }
       
        @Override
        public String alterarSituacaoEventoServidor(final String sequencial, String sequencialUsuario, String tipoSituacao) {
               
                inserirUsuarioHistoricoNoContexto(sequencialUsuario);
               
                final EventoServidorDadoFuncional eventoCadastrado = cenarioTestHelper.consultarEventoServidorDadoFuncional(new Long(sequencial));
                final TipoSituacaoEvento situacao = TipoSituacaoEvento.parse(tipoSituacao);
               
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                eventoServidorFacade.alterarSituacao(eventoCadastrado, situacao);
                                EventoServidorDadoFuncional evento = cenarioTestHelper.consultarEventoServidorDadoFuncional(new Long(sequencial));
                                return mensagemFichaAtualizada(eventoCadastrado) + DADOS_GRAVADOS_COM_SUCESSO
                                                + cenarioTestHelper.gerarMensagem(evento) + cenarioTestHelper.gerarMensagemDadoFuncional(evento.getServidorDadoFuncional());
                        }
                       
                        private String mensagemFichaAtualizada(EventoServidorDadoFuncional eventoServidor) {
                                return (eventoServidor.getEvento().getIndicadorAtualizaFichaCadastral() && !eventoServidor.getIndicadorEventoRetroativo()) ?
                                                FICHA_CADASTRARL_SERVIDOR_ATUALIZADA : VALOR_VAZIO;
                        }
                });
        }
       
        @Override
        public String visualizarEventoServidor(final String sequencialEventoServidorDadoFuncional) {
               
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                EventoServidorDadoFuncional eventoServidor = eventoServidorFacade.consultarPorId(gerarEventoServidorConsulta(sequencialEventoServidorDadoFuncional));
                                String mensagemRetorno = cenarioTestHelper.gerarMensagemEventoServidorDadoFuncional(eventoServidor);
                               
                                RevisaoAuditoria revisao = eventoServidorFacade.consultarDataIhUsuarioDeCadastroDoRegistro(eventoServidor);
                                mensagemRetorno = mensagemRetorno.replace("{usuario_cadastro}", revisao.getNomeUsuario());
                                mensagemRetorno = mensagemRetorno.replace("{data_hora_cadastro}", DataUtils.converterDataComHorarioParaString(revisao.getDataHoraHistorico()));
                               
                                return mensagemRetorno;
                        }

                        private EventoServidorDadoFuncional gerarEventoServidorConsulta(String sequencialEventoServidorDadoFuncional) {
                                return new EventoServidorDadoFuncionalBuilder().comSequencial(sequencialEventoServidorDadoFuncional).build();
                        }
                });
        }

        private List<Restricoes> gerarListaRestricoesConsultarEventoServidor(String codigoEvento, String sequencialUnidadeExercicio,
                        String tipoSituacaoEvento, String sequencialDadoFuncional) {
               
                List<Restricoes> listaRestricoes = new ArrayList<Restricoes>();
               
                if(VerificadorUtil.naoEstaNuloOuVazio(codigoEvento)) {
                        listaRestricoes.add(Restricoes.igual("codigoEvento", ConversorDeTipo.parseInteger(codigoEvento)));
                }
               
                if(VerificadorUtil.naoEstaNuloOuVazio(sequencialUnidadeExercicio)) {
                        listaRestricoes.add(Restricoes.igual("sequencialUnidadeExercicio", ConversorDeTipo.parseLong(sequencialUnidadeExercicio)));
                }
               
                if(VerificadorUtil.naoEstaNuloOuVazio(tipoSituacaoEvento)) {
                        listaRestricoes.add(Restricoes.igual("tipoSituacaoEvento", tipoSituacaoEvento));
                }
               
                if(VerificadorUtil.naoEstaNuloOuVazio(sequencialDadoFuncional)) {
                        listaRestricoes.add(Restricoes.igual("sequencialDadoFuncional", ConversorDeTipo.parseLong(sequencialDadoFuncional)));
                }
               
                return listaRestricoes;
        }
       
        private EventoServidorDadoFuncional gerarEventoServidorDadoFuncional(String sequencial, String sequencialDadoFuncional, String codigoEvento,
                        String tipoSituacao, String dataEvento, String observacao, String indicadorRetroativo, String listaDocumentos,
                        String exigeProcesso, String exigePortaria, String exigeDecreto, String exigeVigencia,
                        String transferencia, String remocaoOficiosa, String remocaoOficial, String redistribuicao,
                        String acesso, String progressaoHorizontal,     String progressaoVertical) {
               
                EventoServidorDadoFuncional eventoServidor = new EventoServidorDadoFuncionalBuilder()
                                .comSequencial(sequencial)
                                .comServidorDadoFuncional(gerarServidorDadoFuncional(sequencialDadoFuncional))
                                .comTipoSituacaoEvento(tipoSituacao)
                                .comEvento(gerarEvento(codigoEvento))
                                .comDataEvento(dataEvento)
                                .comObservacao(observacao)
                                .comIndicadorRetroativo(indicadorRetroativo)
                                .comEventoTransferenciaReconducao(gerarEventoServidorTransferenciaReconducao(transferencia))
                                .comEventoRedistribuicaoCessao(gerarEventoServidorRedistribuicaoCessao(redistribuicao))
                                .comEventoAcesso(gerarEventoServidorAcesso(acesso))
                                .comEventoProgressaoFuncionalHorizontal(gerarEventoServidorProgressaoFuncionalHorizontal(progressaoHorizontal))
                                .comEventoProgressaoFuncionalVertical(gerarEventoServidorProgressaoFuncionalVertical(progressaoVertical))
                                .build();
               
                if(VerificadorUtil.naoEstaNulo(eventoServidor.getEvento())) {
                        if(eventoServidor.getEvento().getIndicadorExigeProcesso()) {
                                eventoServidor.setEventoServidorDadoFuncionalExigeProcesso(gerarEventoServidorExigeProcesso(exigeProcesso, eventoServidor));
                        }
                        if(eventoServidor.getEvento().getIndicadorExigePortaria()) {
                                eventoServidor.getEventoServidorDadoFuncionaisExigePublicacoes().add(gerarEventoServidorExigePublicacaoPortaria(exigePortaria, eventoServidor));
                        }
                        if(eventoServidor.getEvento().getIndicadorExigeDecreto()) {
                                eventoServidor.getEventoServidorDadoFuncionaisExigePublicacoes().add(gerarEventoServidorExigePublicacaoDecreto(exigeDecreto, eventoServidor));
                        }
                        if(eventoServidor.getEvento().getIndicadorExigeVigencia()) {
                                eventoServidor.setEventoServidorDadoFuncionalExigeVigencia(gerarEventoServidorExigeVigencia(exigeVigencia, eventoServidor));
                        }
                }
               
                eventoServidor.setEventoServidorDadoFuncionalDocumentos(gerarDocumentosEventoServidor(listaDocumentos, eventoServidor));
                adicionarEventoServidorRemocao(remocaoOficiosa, remocaoOficial, eventoServidor);
               
                return eventoServidor;
        }

        private ServidorDadoFuncional gerarServidorDadoFuncional(String sequencialDadoFuncional) {
                ServidorDadoFuncional servidorDadoFuncional = null;

                if(VerificadorUtil.naoEstaNuloOuVazio(sequencialDadoFuncional)) {
                        servidorDadoFuncional = cenarioTestHelper.consultarServidorDadoFuncional(new Long(sequencialDadoFuncional));
                }

                return servidorDadoFuncional;
        }
       
        private Evento gerarEvento(String codigo) {
                Evento evento = null;
               
                if(VerificadorUtil.naoEstaNuloOuVazio(codigo)) {
                        evento = cenarioTestHelper.consultarEvento(new Integer(codigo));
                }
               
                return evento;
        }
       
        private Set<EventoServidorDadoFuncionalDocumento> gerarDocumentosEventoServidor(String listaDocumentos, EventoServidorDadoFuncional eventoServidor) {
                Set<EventoServidorDadoFuncionalDocumento> documentos = null;
               
                if(VerificadorUtil.naoEstaNuloOuVazio(listaDocumentos)) {
                        documentos = new HashSet<EventoServidorDadoFuncionalDocumento>();

                        String[] documentosArrayString = gerarArrayObjetosComPropriedadesString(listaDocumentos);

                        for (String documentoArrayString : documentosArrayString) {
                                String[] documentoPropriedade = gerarArrayPropriedadesString(documentoArrayString);
                                EventoServidorDadoFuncionalDocumento eventoServidorDocumento = new EventoServidorDadoFuncionalDocumentoBuilder()
                                        .comEventoServidorDadoFuncional(eventoServidor)
                                        .comDescricao(getPropriedadeTratandoExcecao(documentoPropriedade, 0))
                                        .comObjeto(criarArquivoObjeto(getPropriedadeTratandoExcecao(documentoPropriedade, 1)))
                                        .comDescricaoExtensao(recuperarExtensaoArquivo(getPropriedadeTratandoExcecao(documentoPropriedade, 1)))
                                        .build();
                                documentos.add(eventoServidorDocumento);
                        }
                }
               
                return documentos;
        }
       
        private byte[] criarArquivoObjeto(String arquivo) {
                return FileUtil.getConteudoArquivoImagem(DIRETORIO_DOCUMENTOS, arquivo);
        }
       
        private String recuperarExtensaoArquivo(String arquivo) {
                return VerificadorUtil.naoEstaNuloOuVazio(arquivo) ? arquivo.substring(arquivo.lastIndexOf(".") + 1) : null;
        }
       
        private EventoServidorDadoFuncionalExigeProcesso gerarEventoServidorExigeProcesso(String exigeProcesso, EventoServidorDadoFuncional eventoServidor) {
                EventoServidorDadoFuncionalExigeProcesso evento = new EventoServidorDadoFuncionalExigeProcesso();
               
                if(VerificadorUtil.naoEstaNuloOuVazio(exigeProcesso)) {
                        String[] exigeProcessoPropriedade = gerarArrayPropriedadesString(exigeProcesso);
                        evento = new EventoServidorDadoFuncionalExigeProcessoBuilder()
                                .comEventoServidorDadoFuncional(eventoServidor)
                                .comOrgao(gerarOrgaoView(getPropriedadeTratandoExcecao(exigeProcessoPropriedade, 0)))
                                .comNumeroProcesso(getPropriedadeTratandoExcecao(exigeProcessoPropriedade, 1))
                                .comNumeroAnoProcesso(getPropriedadeTratandoExcecao(exigeProcessoPropriedade, 2))
                                .build();
                }

                return evento;
        }
       
        private void adicionarEventoServidorRemocao(String remocaoOficiosa, String remocaoOficial, EventoServidorDadoFuncional eventoServidor) {
                if(VerificadorUtil.naoEstaNuloOuVazio(remocaoOficiosa)) {
                        eventoServidor.setEventoServidorDadoFuncionalRemocao(gerarEventoServidorRemocaoOficiosa(remocaoOficiosa, eventoServidor));
                }
               
                if(VerificadorUtil.naoEstaNuloOuVazio(remocaoOficial)) {
                        eventoServidor.setEventoServidorDadoFuncionalRemocao(gerarEventoServidorRemocaoOficial(remocaoOficial, eventoServidor));
                }
        }

        private EventoServidorDadoFuncionalExigePublicacao gerarEventoServidorExigePublicacaoPortaria(String numeroPortaria, EventoServidorDadoFuncional eventoServidor) {
                return gerarEventoServidorExigePublicacao(TipoPublicacao.PORTARIA, numeroPortaria, eventoServidor);
        }
       
        private EventoServidorDadoFuncionalExigePublicacao gerarEventoServidorExigePublicacaoDecreto(String numeroDecreto, EventoServidorDadoFuncional eventoServidor) {
                return gerarEventoServidorExigePublicacao(TipoPublicacao.DECRETO, numeroDecreto, eventoServidor);
        }
       
        private EventoServidorDadoFuncionalExigePublicacao gerarEventoServidorExigePublicacao(TipoPublicacao tipoPublicacao, String numero, EventoServidorDadoFuncional eventoServidor) {
                return new EventoServidorDadoFuncionalExigePublicacaoBuilder()
                                .comEventoServidorDadoFuncional(eventoServidor)
                                .comNumeroPublicacao(numero)
                                .comTipoPublicacao(tipoPublicacao)
                                .build();
        }
       
        private EventoServidorDadoFuncionalRemocao gerarEventoServidorRemocaoOficiosa(String remocaoOficiosa, EventoServidorDadoFuncional eventoServidor) {
                return gerarEventoServidorRemocao(TipoRemocao.OFICIOSA, remocaoOficiosa, eventoServidor);
        }
       
        private EventoServidorDadoFuncionalRemocao gerarEventoServidorRemocaoOficial(String remocaoOficial, EventoServidorDadoFuncional eventoServidor) {
                return gerarEventoServidorRemocao(TipoRemocao.OFICIAL, remocaoOficial, eventoServidor);
        }
       
        private EventoServidorDadoFuncionalRemocao gerarEventoServidorRemocao(TipoRemocao tipoRemocao, String remocao, EventoServidorDadoFuncional eventoServidor) {
                EventoServidorDadoFuncionalRemocao evento = null;
               
                if(VerificadorUtil.naoEstaNuloOuVazio(remocao)) {
                        String[] remocaoPropriedade = gerarArrayPropriedadesString(remocao);
                        evento = new EventoServidorDadoFuncionalRemocaoBuilder()
                                .comEventoServidorDadoFuncional(eventoServidor)
                                .comUnidadeOrigem(gerarUnidade(getPropriedadeTratandoExcecao(remocaoPropriedade, 0)))
                                .comUnidadeDestino(gerarUnidade(getPropriedadeTratandoExcecao(remocaoPropriedade, 1)))
                                .comTipoRemocao(tipoRemocao)
                                .build();
                }
               
                return evento;
        }
       
        private EventoServidorDadoFuncionalExigeVigencia gerarEventoServidorExigeVigencia(String exigeVigencia, EventoServidorDadoFuncional eventoServidor) {
                EventoServidorDadoFuncionalExigeVigencia evento = new EventoServidorDadoFuncionalExigeVigencia();
               
                if(VerificadorUtil.naoEstaNuloOuVazio(exigeVigencia)) {
                        String[] exigeVigenciaPropriedade = gerarArrayPropriedadesString(exigeVigencia);
                        evento = new EventoServidorDadoFuncionalExigeVigenciaBuilder()
                                .comEventoServidorDadoFuncional(eventoServidor)
                                .comDataInicial(DataUtils.converterStringParaData(getPropriedadeTratandoExcecao(exigeVigenciaPropriedade, 0)))
                                .comDataFinal(DataUtils.converterStringParaData(getPropriedadeTratandoExcecao(exigeVigenciaPropriedade, 1)))
                                .build();
                }
               
                return evento;
        }
       
        private EventoServidorDadoFuncionalTransferenciaReconducao gerarEventoServidorTransferenciaReconducao(String transferencia) {
                EventoServidorDadoFuncionalTransferenciaReconducao evento = null;
               
                if(VerificadorUtil.naoEstaNuloOuVazio(transferencia)) {
                        String[] transferenciaPropriedade = gerarArrayPropriedadesString(transferencia);
                        evento = new EventoServidorDadoFuncionalTransferenciaReconducaoBuilder()
                                .comCargoOrigem(gerarCargo(getPropriedadeTratandoExcecao(transferenciaPropriedade, 0)))
                                .comCargoDestino(gerarCargo(getPropriedadeTratandoExcecao(transferenciaPropriedade, 1)))
                                .build();
                }
               
                return evento;
        }
       
        private EventoServidorDadoFuncionalRedistribuicaoCessao gerarEventoServidorRedistribuicaoCessao(String redistribuicao) {
                EventoServidorDadoFuncionalRedistribuicaoCessao evento = null;
               
                if(VerificadorUtil.naoEstaNuloOuVazio(redistribuicao)) {
                        String[] redistribuicaoPropriedade = gerarArrayPropriedadesString(redistribuicao);
                        evento = new EventoServidorDadoFuncionalRedistribuicaoCessaoBuilder()
                                .comOrgaoOrigem(gerarOrgao(getPropriedadeTratandoExcecao(redistribuicaoPropriedade, 0)))
                                .comOrgaoDestino(gerarOrgao(getPropriedadeTratandoExcecao(redistribuicaoPropriedade, 1)))
                                .build();
                }
               
                return evento;
        }
       
        private EventoServidorDadoFuncionalAcesso gerarEventoServidorAcesso(String acesso) {
                EventoServidorDadoFuncionalAcesso evento = null;
               
                if(VerificadorUtil.naoEstaNuloOuVazio(acesso)) {
                        String[] acessoPropriedade = gerarArrayPropriedadesString(acesso);
                        evento = new EventoServidorDadoFuncionalAcessoBuilder()
                                .comFuncaoOrigem(gerarFuncao(getPropriedadeTratandoExcecao(acessoPropriedade, 0)))
                                .comFuncaoDestino(gerarFuncao(getPropriedadeTratandoExcecao(acessoPropriedade, 1)))
                                .build();
                }
               
                return evento;
        }
       
        private EventoServidorDadoFuncionalProgressaoFuncionalHorizontal gerarEventoServidorProgressaoFuncionalHorizontal(String progressaoHorizontal) {
                EventoServidorDadoFuncionalProgressaoFuncionalHorizontal evento = null;
               
                if(VerificadorUtil.naoEstaNuloOuVazio(progressaoHorizontal)) {
                        String[] progressaoPropriedade = gerarArrayPropriedadesString(progressaoHorizontal);
                        evento = new EventoServidorDadoFuncionalProgressaoFuncionalHorizontalBuilder()
                                .comClasseCarreiraOrigem(TipoClasseCarreira.parse(getPropriedadeTratandoExcecao(progressaoPropriedade, 0)))
                                .comClasseCarreiraDestino(TipoClasseCarreira.parse(getPropriedadeTratandoExcecao(progressaoPropriedade, 1)))
                                .build();
                }
               
                return evento;
        }
       
        private EventoServidorDadoFuncionalProgressaoFuncionalVertical gerarEventoServidorProgressaoFuncionalVertical(String progressaoVertical) {
                EventoServidorDadoFuncionalProgressaoFuncionalVertical evento = null;
               
                if(VerificadorUtil.naoEstaNuloOuVazio(progressaoVertical)) {
                        String[] progressaoPropriedade = gerarArrayPropriedadesString(progressaoVertical);
                        evento = new EventoServidorDadoFuncionalProgressaoFuncionalVerticalBuilder()
                                .comNivelCarreiraOrigem(TipoNivelCarreira.parse(getPropriedadeTratandoExcecao(progressaoPropriedade, 0)))
                                .comNivelCarreiraDestino(TipoNivelCarreira.parse(getPropriedadeTratandoExcecao(progressaoPropriedade, 1)))
                                .build();
                }
               
                return evento;
        }
       
        private void inserirUsuarioHistoricoNoContexto(String sequencialUsuario) {
                SecurityContextImpl context = new SecurityContextImpl();
                UsuarioView usuarioView = new UsuarioView();
                usuarioView.setSequencialPessoa(new Long(sequencialUsuario));
                UserIndra userIndra = new UserIndra(usuarioView, "nome", "senha", true, null);
                context.setAuthentication(new IndraAuthentication("login", userIndra, true, null));
                SecurityContextHolder.setContext(context);
        }

        @Override
        public String listarUnidadeDoServidor(final String identificadorServidor) {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                List<Unidade> unidades = unidadeFacade.listarUnidadeDoServidor(new Long(identificadorServidor));
                               
                                return cenarioTestHelper.gerarMensagemConsultar(unidades);
                        }
                });
        }

        @Override
        public String consultarProgramacaoFerias(String anoProgramacao, String identificadorUnidade, String numeroServidor) {
                List<Restricoes> listaRestricoes = new ArrayList<Restricoes>();
                adicionandoRestricoes(anoProgramacao, identificadorUnidade, numeroServidor,     listaRestricoes);
               
                List<ProgramacaoFeriasDTO> listaProgramacaoFeriasDTO = programacaoFeriasFacade.consultarProgramacaoFerias(0, 5, listaRestricoes);

                return cenarioTestHelper.gerarMensagemConsultar(listaProgramacaoFeriasDTO);
        }

        private void adicionandoRestricoes(String anoProgramacao, String identificadorUnidade, String numeroServidor, List<Restricoes> listaRestricoes) {
                if(VerificadorUtil.naoEstaNuloOuVazio(anoProgramacao)) {
                        listaRestricoes.add(Restricoes.igual("anoProgramacao", ConversorDeTipo.parseInteger(anoProgramacao)));
                }
               
                if(VerificadorUtil.naoEstaNuloOuVazio(identificadorUnidade)) {
                        listaRestricoes.add(Restricoes.igual("unidade", ConversorDeTipo.parseInteger(identificadorUnidade)));
                }
               
                if(VerificadorUtil.naoEstaNuloOuVazio(numeroServidor)) {
                        listaRestricoes.add(Restricoes.igual("nossoNumero", ConversorDeTipo.parseInteger(numeroServidor)));
                }
        }
       
        @Override
        public String cadastrarProgramacaoFerias(final String anoProgramacao, final String identificadorUnidade, final String servidoresIhPeriodos) {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                ProgramacaoFerias programacaoFerias = new ProgramacaoFerias();
                                programacaoFerias.setNumeroAnoProgramacao(ConversorDeTipo.parseLong(anoProgramacao));
                                programacaoFerias.setUnidade(new UnidadeBuilder().comCodigo(identificadorUnidade).build());
                                programacaoFerias = criandoProgramacaoFeriasServidorDadoFuncional(programacaoFerias, servidoresIhPeriodos);
                                programacaoFeriasFacade.cadastrar(programacaoFerias);
                                ProgramacaoFerias ConsultaProgramacaoFerias = cenarioTestHelper.consultarProgramacaoFeriasIhServidorDadoFuncional(anoProgramacao, identificadorUnidade);  
                                return DADOS_GRAVADOS_COM_SUCESSO + cenarioTestHelper.gerarMensagem(ConsultaProgramacaoFerias);
                        }
                });
        }

        private ProgramacaoFerias criandoProgramacaoFeriasServidorDadoFuncional(ProgramacaoFerias programacaoFerias, String servidoresIhPeriodos) {
                programacaoFerias.getProgramacoesFeriasServidorDadoFuncional().clear();
                if(VerificadorUtil.naoEstaNuloOuVazio(servidoresIhPeriodos)){
                        String[] servidor = servidoresIhPeriodos.split(";");
                        for(String linhaCompleta : servidor){
                                String[] dadosSeparado = linhaCompleta.split(",");
                                ProgramacaoFeriasServidorDadoFuncional programacaoServidorDadoFuncional = new ProgramacaoFeriasServidorDadoFuncionalBuilder()
                                        .comCodigo(dadosSeparado[0])
                                        .comDataInicial(VerificadorUtil.naoEstaNuloOuVazio(dadosSeparado[1])? dadosSeparado[1] : null)
                                         .comDataFinal((dadosSeparado.length > 2)? VerificadorUtil.naoEstaNuloOuVazio(dadosSeparado[2])? dadosSeparado[2] : null : null)
                                         .comProgramacaoFerias(programacaoFerias)
                                        .build();
                                programacaoFerias.getProgramacoesFeriasServidorDadoFuncional().add(programacaoServidorDadoFuncional);
                        }
                }
                return programacaoFerias;
        }

        @Override
        public String consultarServidorValido(String indicadoresUnidade, String cpf, String nome, String matricula, String nossoNumero) {
                final ParametroConsultaServidorAtivoDTO parametros = new ParametroConsultaServidorAtivoDTOBuilder()
                        .comCpf(cpf).comNossoNumero(nossoNumero).comMatricula(matricula)
                        .comNome(nome).comUnidades(indicadoresUnidade).build();
               
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                List<ServidorAtivoDTO> servidores = servidorFacade.consultarServidorAtivo(parametros);
                                return cenarioTestHelper.gerarMensagemConsultar(servidores);
                        }
                });
        }
       
        @Override
        public String consultarServidorNaoPendente(String cpf, String nome, String matricula, String nossoNumero) {
                final ParametroConsultaServidorAtivoDTO parametros = new ParametroConsultaServidorAtivoDTOBuilder()
                        .comCpf(cpf).comNossoNumero(nossoNumero).comMatricula(matricula).comNome(nome).build();
       
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                List<ServidorAtivoDTO> servidores = servidorFacade.consultarServidorNaoPendente(parametros);
                                return cenarioTestHelper.gerarMensagemConsultar(servidores);
                        }
                });
        }

        @Override
        public String alterarProgramacaoFerias( final String anoProgramacao, final String codigoUnidade, final String servidoresIhPeriodos) {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                ProgramacaoFerias programacaoFerias = cenarioTestHelper.consultarProgramacaoFeriasIhServidorDadoFuncional(anoProgramacao, codigoUnidade);
                                criandoProgramacaoFeriasServidorDadoFuncional(programacaoFerias, servidoresIhPeriodos);
                                programacaoFeriasFacade.alterar(programacaoFerias);
                                ProgramacaoFerias ConsultaProgramacaoFerias = cenarioTestHelper.consultarProgramacaoFeriasIhServidorDadoFuncional(anoProgramacao, codigoUnidade);  
                                return DADOS_GRAVADOS_COM_SUCESSO + cenarioTestHelper.gerarMensagem(ConsultaProgramacaoFerias);
                        }
                });
        }
       
        @Override
        public String consultarServidorPorNossoNumero(final String nossoNumero) {
                return VerificadorLancamentoException.verificarMensagemLancamentoException(new Command() {
                        @Override
                        public String execute() throws Exception {
                                Long sequencialNossoNumero = ConversorDeTipo.parseLong(nossoNumero);
                                Servidor servidor = servidorFacade.consultarServidorPorNossoNumero(sequencialNossoNumero);
                                return new FormatadorServidorPorNossoNumero().formatar(servidor);
                        }
                });
        }

        @Override
        public String detalharProgramacaoFerias(String anoProgramacao, String codigoUnidade) {
                ProgramacaoFerias programacaoFerias = new ProgramacaoFerias();
                programacaoFerias.setNumeroAnoProgramacao(ConversorDeTipo.parseLong(anoProgramacao));
                programacaoFerias.setUnidade(new UnidadeBuilder().comCodigo(codigoUnidade).build());
                ProgramacaoFerias consultaProgramacaoFerias = programacaoFeriasFacade.consultarDetalheProgramacaoFeriasPorId(programacaoFerias);
            StringBuilder mensagemRetornoFilhas = montandoMensagemDaListaDaEntidadeInterna(consultaProgramacaoFerias);
                return cenarioTestHelper.gerarMensagemDetalheProgramacaoFerias(consultaProgramacaoFerias) + mensagemRetornoFilhas.toString();
        }

        private StringBuilder montandoMensagemDaListaDaEntidadeInterna(ProgramacaoFerias consultaProgramacaoFerias) {
                StringBuilder mensagemRetornoFilhas = new StringBuilder("[Programações: ");
            for(ProgramacaoFeriasServidorDadoFuncional pfsdf : consultaProgramacaoFerias.getProgramacoesFeriasServidorDadoFuncional()) {
                String msg = cenarioTestHelper.gerarMensagemDetalheProgramacaoFeriasServidorDadoFuncional(pfsdf);
                RevisaoAuditoria revisaoAuditoria =     programacaoFeriasFacade.consultarDataIhUsuarioDaUltimaAlteracaoDoRegistro(pfsdf);
                if(revisaoAuditoria != null) {
                        msg = msg.replace("{nome_usuario}", revisaoAuditoria.getNomeUsuario());
                        msg = msg.replace("{data_alteracao}", DataUtils.converterDataComHorarioParaString(revisaoAuditoria.getDataHoraHistorico()));
                } else {
                        msg = msg.replace("{nome_usuario}", VALOR_VAZIO);
                        msg = msg.replace("{data_alteracao}", VALOR_VAZIO);
                }
                mensagemRetornoFilhas.append(msg);
            }
            mensagemRetornoFilhas.append(" ]");
                return mensagemRetornoFilhas;
        }

}